diff options
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/filesystems/vfs.txt | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 0fcbd74efd2f..adaa899e5c90 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -458,7 +458,7 @@ address-space can provide. These include communicating memory | |||
458 | pressure, page lookup by address, and keeping track of pages tagged as | 458 | pressure, page lookup by address, and keeping track of pages tagged as |
459 | Dirty or Writeback. | 459 | Dirty or Writeback. |
460 | 460 | ||
461 | The first can be used independantly to the others. The vm can try to | 461 | The first can be used independently to the others. The VM can try to |
462 | either write dirty pages in order to clean them, or release clean | 462 | either write dirty pages in order to clean them, or release clean |
463 | pages in order to reuse them. To do this it can call the ->writepage | 463 | pages in order to reuse them. To do this it can call the ->writepage |
464 | method on dirty pages, and ->releasepage on clean pages with | 464 | method on dirty pages, and ->releasepage on clean pages with |
@@ -466,7 +466,7 @@ PagePrivate set. Clean pages without PagePrivate and with no external | |||
466 | references will be released without notice being given to the | 466 | references will be released without notice being given to the |
467 | address_space. | 467 | address_space. |
468 | 468 | ||
469 | To achieve this functionality, pages need to be placed on an lru with | 469 | To achieve this functionality, pages need to be placed on an LRU with |
470 | lru_cache_add and mark_page_active needs to be called whenever the | 470 | lru_cache_add and mark_page_active needs to be called whenever the |
471 | page is used. | 471 | page is used. |
472 | 472 | ||
@@ -478,20 +478,20 @@ quickly. | |||
478 | The Dirty tag is primarily used by mpage_writepages - the default | 478 | The Dirty tag is primarily used by mpage_writepages - the default |
479 | ->writepages method. It uses the tag to find dirty pages to call | 479 | ->writepages method. It uses the tag to find dirty pages to call |
480 | ->writepage on. If mpage_writepages is not used (i.e. the address | 480 | ->writepage on. If mpage_writepages is not used (i.e. the address |
481 | provides it's own ->writepages) , the PAGECACHE_TAG_DIRTY tag is | 481 | provides its own ->writepages) , the PAGECACHE_TAG_DIRTY tag is |
482 | almost unused. write_inode_now and sync_inode do use it (through | 482 | almost unused. write_inode_now and sync_inode do use it (through |
483 | __sync_single_inode) to check if ->writepages has been successful in | 483 | __sync_single_inode) to check if ->writepages has been successful in |
484 | writing out the whole address_space. | 484 | writing out the whole address_space. |
485 | 485 | ||
486 | The Writeback tag is used by filemap*wait* and sync_page* functions, | 486 | The Writeback tag is used by filemap*wait* and sync_page* functions, |
487 | though wait_on_page_writeback_range, to wait for all writeback to | 487 | via wait_on_page_writeback_range, to wait for all writeback to |
488 | complete. While waiting ->sync_page (if defined) will be called on | 488 | complete. While waiting ->sync_page (if defined) will be called on |
489 | each page that is found to require writeback | 489 | each page that is found to require writeback. |
490 | 490 | ||
491 | An address_space handler may attach extra information to a page, | 491 | An address_space handler may attach extra information to a page, |
492 | typically using the 'private' field in the 'struct page'. If such | 492 | typically using the 'private' field in the 'struct page'. If such |
493 | information is attached, the PG_Private flag should be set. This will | 493 | information is attached, the PG_Private flag should be set. This will |
494 | cause various mm routines to make extra calls into the address_space | 494 | cause various VM routines to make extra calls into the address_space |
495 | handler to deal with that data. | 495 | handler to deal with that data. |
496 | 496 | ||
497 | An address space acts as an intermediate between storage and | 497 | An address space acts as an intermediate between storage and |
@@ -500,7 +500,7 @@ time, and provided to the application either by copying of the page, | |||
500 | or by memory-mapping the page. | 500 | or by memory-mapping the page. |
501 | Data is written into the address space by the application, and then | 501 | Data is written into the address space by the application, and then |
502 | written-back to storage typically in whole pages, however the | 502 | written-back to storage typically in whole pages, however the |
503 | address_space has finner control of write sizes. | 503 | address_space has finer control of write sizes. |
504 | 504 | ||
505 | The read process essentially only requires 'readpage'. The write | 505 | The read process essentially only requires 'readpage'. The write |
506 | process is more complicated and uses prepare_write/commit_write or | 506 | process is more complicated and uses prepare_write/commit_write or |
@@ -546,7 +546,7 @@ struct address_space_operations { | |||
546 | }; | 546 | }; |
547 | 547 | ||
548 | writepage: called by the VM to write a dirty page to backing store. | 548 | writepage: called by the VM to write a dirty page to backing store. |
549 | This may happen for data integrity reason (i.e. 'sync'), or | 549 | This may happen for data integrity reasons (i.e. 'sync'), or |
550 | to free up memory (flush). The difference can be seen in | 550 | to free up memory (flush). The difference can be seen in |
551 | wbc->sync_mode. | 551 | wbc->sync_mode. |
552 | The PG_Dirty flag has been cleared and PageLocked is true. | 552 | The PG_Dirty flag has been cleared and PageLocked is true. |
@@ -555,10 +555,10 @@ struct address_space_operations { | |||
555 | or asynchronously when the write operation completes. | 555 | or asynchronously when the write operation completes. |
556 | 556 | ||
557 | If wbc->sync_mode is WB_SYNC_NONE, ->writepage doesn't have to | 557 | If wbc->sync_mode is WB_SYNC_NONE, ->writepage doesn't have to |
558 | try too hard if there are problems, and may choose to write out a | 558 | try too hard if there are problems, and may choose to write out |
559 | different page from the mapping if that would be more | 559 | other pages from the mapping if that is easier (e.g. due to |
560 | appropriate. If it chooses not to start writeout, it should | 560 | internal dependencies). If it chooses not to start writeout, it |
561 | return AOP_WRITEPAGE_ACTIVATE so that the VM will not keep | 561 | should return AOP_WRITEPAGE_ACTIVATE so that the VM will not keep |
562 | calling ->writepage on that page. | 562 | calling ->writepage on that page. |
563 | 563 | ||
564 | See the file "Locking" for more details. | 564 | See the file "Locking" for more details. |
@@ -568,7 +568,7 @@ struct address_space_operations { | |||
568 | unlocked and marked uptodate once the read completes. | 568 | unlocked and marked uptodate once the read completes. |
569 | If ->readpage discovers that it needs to unlock the page for | 569 | If ->readpage discovers that it needs to unlock the page for |
570 | some reason, it can do so, and then return AOP_TRUNCATED_PAGE. | 570 | some reason, it can do so, and then return AOP_TRUNCATED_PAGE. |
571 | In this case, the page will be re-located, re-locked and if | 571 | In this case, the page will be relocated, relocked and if |
572 | that all succeeds, ->readpage will be called again. | 572 | that all succeeds, ->readpage will be called again. |
573 | 573 | ||
574 | sync_page: called by the VM to notify the backing store to perform all | 574 | sync_page: called by the VM to notify the backing store to perform all |
@@ -579,12 +579,12 @@ struct address_space_operations { | |||
579 | PG_Writeback set while waiting for the writeback to complete. | 579 | PG_Writeback set while waiting for the writeback to complete. |
580 | 580 | ||
581 | writepages: called by the VM to write out pages associated with the | 581 | writepages: called by the VM to write out pages associated with the |
582 | address_space object. If WBC_SYNC_ALL, then the | 582 | address_space object. If wbc->sync_mode is WBC_SYNC_ALL, then |
583 | writeback_control will specify a range of pages that must be | 583 | the writeback_control will specify a range of pages that must be |
584 | written out. If WBC_SYNC_NONE, then a nr_to_write is given | 584 | written out. If it is WBC_SYNC_NONE, then a nr_to_write is given |
585 | and that many pages should be written if possible. | 585 | and that many pages should be written if possible. |
586 | If no ->writepages is given, then mpage_writepages is used | 586 | If no ->writepages is given, then mpage_writepages is used |
587 | instead. This will choose pages from the addresspace that are | 587 | instead. This will choose pages from the address space that are |
588 | tagged as DIRTY and will pass them to ->writepage. | 588 | tagged as DIRTY and will pass them to ->writepage. |
589 | 589 | ||
590 | set_page_dirty: called by the VM to set a page dirty. | 590 | set_page_dirty: called by the VM to set a page dirty. |
@@ -599,15 +599,15 @@ struct address_space_operations { | |||
599 | object. This is essentially just a vector version of | 599 | object. This is essentially just a vector version of |
600 | readpage. Instead of just one page, several pages are | 600 | readpage. Instead of just one page, several pages are |
601 | requested. | 601 | requested. |
602 | readpages is only used for readahead, so read errors are | 602 | readpages is only used for read-ahead, so read errors are |
603 | ignored. If anything goes wrong, feel free to give up. | 603 | ignored. If anything goes wrong, feel free to give up. |
604 | 604 | ||
605 | prepare_write: called by the generic write path in VM to set up a write | 605 | prepare_write: called by the generic write path in VM to set up a write |
606 | request for a page. This indicates to the address space that | 606 | request for a page. This indicates to the address space that |
607 | the given range of bytes are about to be written. The | 607 | the given range of bytes is about to be written. The |
608 | address_space should check that the write will be able to | 608 | address_space should check that the write will be able to |
609 | complete, by allocating space if necessary and doing any other | 609 | complete, by allocating space if necessary and doing any other |
610 | internal house keeping. If the write will update parts of | 610 | internal housekeeping. If the write will update parts of |
611 | any basic-blocks on storage, then those blocks should be | 611 | any basic-blocks on storage, then those blocks should be |
612 | pre-read (if they haven't been read already) so that the | 612 | pre-read (if they haven't been read already) so that the |
613 | updated blocks can be written out properly. | 613 | updated blocks can be written out properly. |
@@ -625,9 +625,9 @@ struct address_space_operations { | |||
625 | errors should have been handled by prepare_write. | 625 | errors should have been handled by prepare_write. |
626 | 626 | ||
627 | bmap: called by the VFS to map a logical block offset within object to | 627 | bmap: called by the VFS to map a logical block offset within object to |
628 | physical block number. This method is used by for the FIBMAP | 628 | physical block number. This method is used by the FIBMAP |
629 | ioctl and for working with swap-files. To be able to swap to | 629 | ioctl and for working with swap-files. To be able to swap to |
630 | a file, the file must have as stable mapping to a block | 630 | a file, the file must have a stable mapping to a block |
631 | device. The swap system does not go through the filesystem | 631 | device. The swap system does not go through the filesystem |
632 | but instead uses bmap to find out where the blocks in the file | 632 | but instead uses bmap to find out where the blocks in the file |
633 | are and uses those addresses directly. | 633 | are and uses those addresses directly. |
@@ -635,7 +635,7 @@ struct address_space_operations { | |||
635 | 635 | ||
636 | invalidatepage: If a page has PagePrivate set, then invalidatepage | 636 | invalidatepage: If a page has PagePrivate set, then invalidatepage |
637 | will be called when part or all of the page is to be removed | 637 | will be called when part or all of the page is to be removed |
638 | from the address space. This generally corresponds either a | 638 | from the address space. This generally corresponds to either a |
639 | truncation or a complete invalidation of the address space | 639 | truncation or a complete invalidation of the address space |
640 | (in the latter case 'offset' will always be 0). | 640 | (in the latter case 'offset' will always be 0). |
641 | Any private data associated with the page should be updated | 641 | Any private data associated with the page should be updated |
@@ -663,13 +663,13 @@ struct address_space_operations { | |||
663 | they believe the cache may be out of date with storage) by | 663 | they believe the cache may be out of date with storage) by |
664 | calling invalidate_inode_pages2(). | 664 | calling invalidate_inode_pages2(). |
665 | If the filesystem makes such a call, and needs to be certain | 665 | If the filesystem makes such a call, and needs to be certain |
666 | that all pages are invalidated, then it's releasepage will | 666 | that all pages are invalidated, then its releasepage will |
667 | need to ensure this. Possibly it can clear the PageUptodate | 667 | need to ensure this. Possibly it can clear the PageUptodate |
668 | bit if it cannot free private data yet. | 668 | bit if it cannot free private data yet. |
669 | 669 | ||
670 | direct_IO: called by the generic read/write routines to perform | 670 | direct_IO: called by the generic read/write routines to perform |
671 | direct_IO - that is IO requests which bypass the page cache | 671 | direct_IO - that is IO requests which bypass the page cache |
672 | and tranfer data directly between the storage and the | 672 | and transfer data directly between the storage and the |
673 | application's address space. | 673 | application's address space. |
674 | 674 | ||
675 | get_xip_page: called by the VM to translate a block number to a page. | 675 | get_xip_page: called by the VM to translate a block number to a page. |