| Function report | 
| Source Code: mm\migrate.c | Create Date:2022-07-28 15:58:48 | 
| Last Modify:2022-05-20 09:53:13 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:__buffer_migrate_page
Proto:static int __buffer_migrate_page(struct address_space *mapping, struct page *newpage, struct page *page, enum migrate_mode mode, bool check_refs)
Type:int
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| struct address_space * | mapping | |
| struct page * | newpage | |
| struct page * | page | |
| enum migrate_mode | mode | |
| bool | check_refs | 
| 744 | If Not page_has_buffers(page) Then Return Common logic to directly migrate a single LRU page suitable for* pages that do not use PagePrivate/PagePrivate2.* Pages are locked upon entry and exit. | 
| 748 | expected_count = expected_page_refs(mapping, page) | 
| 749 | If page_count(page) != expected_count Then Return -EAGAIN | 
| 753 | If Not Returns true if all buffers are successfully locked Then Return -EAGAIN | 
| 756 | If check_refs Then | 
| 758 | bool invalidated = false | 
| 760 | recheck_buffers : | 
| 761 | busy = false | 
| 762 | spin_lock( & private_lock) | 
| 764 | Do | 
| 765 | If atomic_read( & users using this buffer_head ) Then | 
| 766 | busy = true | 
| 767 | Break | 
| 771 | If busy Then | 
| 772 | If invalidated Then | 
| 774 | Go to unlock_buffers | 
| 776 | spin_unlock( & private_lock) | 
| 777 | invalidate_bh_lrus() | 
| 778 | invalidated = true | 
| 779 | Go to recheck_buffers | 
| 784 | If rc != Return values from addresss_space_operations.migratepage():* - negative errno on page migration failure;* - zero on page migration success; Then Go to unlock_buffers | 
| 788 | set_page_private(newpage, page_private(page)) | 
| 789 | set_page_private(page, 0) | 
| 794 | Do | 
| 795 | set_bh_page(bh, newpage, bh_offset(bh)) | 
| 802 | If mode != MIGRATE_SYNC_NO_COPY Then migrate_page_copy(newpage, page) | 
| 804 | Else Copy the page to its new location | 
| 807 | rc = Return values from addresss_space_operations.migratepage():* - negative errno on page migration failure;* - zero on page migration success; | 
| 808 | unlock_buffers : | 
| 809 | If check_refs Then spin_unlock( & private_lock) | 
| 812 | Do | 
| 813 | unlock_buffer(bh) | 
| 818 | Return rc | 
| Name | Describe | 
|---|---|
| buffer_migrate_page | Migration function for pages with buffers. This function can only be used* if the underlying filesystem guarantees that no other references to "page"* exist. For example attached buffer heads are accessed only under page lock. | 
| buffer_migrate_page_norefs | Same as above except that this variant is more careful and checks that there* are also no buffer head references. This function is the right one for* mappings where buffer heads are directly looked up and referenced (such as* block device mappings). | 
| Source code conversion tool public plug-in interface | X | 
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |