aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/filesystems/Locking12
-rw-r--r--Documentation/filesystems/vfs.txt39
2 files changed, 12 insertions, 39 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
index 8362860e21a7..23d2f4460deb 100644
--- a/Documentation/filesystems/Locking
+++ b/Documentation/filesystems/Locking
@@ -161,8 +161,12 @@ prototypes:
161 int (*set_page_dirty)(struct page *page); 161 int (*set_page_dirty)(struct page *page);
162 int (*readpages)(struct file *filp, struct address_space *mapping, 162 int (*readpages)(struct file *filp, struct address_space *mapping,
163 struct list_head *pages, unsigned nr_pages); 163 struct list_head *pages, unsigned nr_pages);
164 int (*prepare_write)(struct file *, struct page *, unsigned, unsigned); 164 int (*write_begin)(struct file *, struct address_space *mapping,
165 int (*commit_write)(struct file *, struct page *, unsigned, unsigned); 165 loff_t pos, unsigned len, unsigned flags,
166 struct page **pagep, void **fsdata);
167 int (*write_end)(struct file *, struct address_space *mapping,
168 loff_t pos, unsigned len, unsigned copied,
169 struct page *page, void *fsdata);
166 sector_t (*bmap)(struct address_space *, sector_t); 170 sector_t (*bmap)(struct address_space *, sector_t);
167 int (*invalidatepage) (struct page *, unsigned long); 171 int (*invalidatepage) (struct page *, unsigned long);
168 int (*releasepage) (struct page *, int); 172 int (*releasepage) (struct page *, int);
@@ -180,8 +184,6 @@ sync_page: no maybe
180writepages: no 184writepages: no
181set_page_dirty no no 185set_page_dirty no no
182readpages: no 186readpages: no
183prepare_write: no yes yes
184commit_write: no yes yes
185write_begin: no locks the page yes 187write_begin: no locks the page yes
186write_end: no yes, unlocks yes 188write_end: no yes, unlocks yes
187perform_write: no n/a yes 189perform_write: no n/a yes
@@ -191,7 +193,7 @@ releasepage: no yes
191direct_IO: no 193direct_IO: no
192launder_page: no yes 194launder_page: no yes
193 195
194 ->prepare_write(), ->commit_write(), ->sync_page() and ->readpage() 196 ->write_begin(), ->write_end(), ->sync_page() and ->readpage()
195may be called from the request handler (/dev/loop). 197may be called from the request handler (/dev/loop).
196 198
197 ->readpage() unlocks the page, either synchronously or via I/O 199 ->readpage() unlocks the page, either synchronously or via I/O
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt
index c4d348dabe94..5579bda58a6d 100644
--- a/Documentation/filesystems/vfs.txt
+++ b/Documentation/filesystems/vfs.txt
@@ -492,7 +492,7 @@ written-back to storage typically in whole pages, however the
492address_space has finer control of write sizes. 492address_space has finer control of write sizes.
493 493
494The read process essentially only requires 'readpage'. The write 494The read process essentially only requires 'readpage'. The write
495process is more complicated and uses prepare_write/commit_write or 495process is more complicated and uses write_begin/write_end or
496set_page_dirty to write data into the address_space, and writepage, 496set_page_dirty to write data into the address_space, and writepage,
497sync_page, and writepages to writeback data to storage. 497sync_page, and writepages to writeback data to storage.
498 498
@@ -521,8 +521,6 @@ struct address_space_operations {
521 int (*set_page_dirty)(struct page *page); 521 int (*set_page_dirty)(struct page *page);
522 int (*readpages)(struct file *filp, struct address_space *mapping, 522 int (*readpages)(struct file *filp, struct address_space *mapping,
523 struct list_head *pages, unsigned nr_pages); 523 struct list_head *pages, unsigned nr_pages);
524 int (*prepare_write)(struct file *, struct page *, unsigned, unsigned);
525 int (*commit_write)(struct file *, struct page *, unsigned, unsigned);
526 int (*write_begin)(struct file *, struct address_space *mapping, 524 int (*write_begin)(struct file *, struct address_space *mapping,
527 loff_t pos, unsigned len, unsigned flags, 525 loff_t pos, unsigned len, unsigned flags,
528 struct page **pagep, void **fsdata); 526 struct page **pagep, void **fsdata);
@@ -598,37 +596,7 @@ struct address_space_operations {
598 readpages is only used for read-ahead, so read errors are 596 readpages is only used for read-ahead, so read errors are
599 ignored. If anything goes wrong, feel free to give up. 597 ignored. If anything goes wrong, feel free to give up.
600 598
601 prepare_write: called by the generic write path in VM to set up a write 599 write_begin:
602 request for a page. This indicates to the address space that
603 the given range of bytes is about to be written. The
604 address_space should check that the write will be able to
605 complete, by allocating space if necessary and doing any other
606 internal housekeeping. If the write will update parts of
607 any basic-blocks on storage, then those blocks should be
608 pre-read (if they haven't been read already) so that the
609 updated blocks can be written out properly.
610 The page will be locked.
611
612 Note: the page _must not_ be marked uptodate in this function
613 (or anywhere else) unless it actually is uptodate right now. As
614 soon as a page is marked uptodate, it is possible for a concurrent
615 read(2) to copy it to userspace.
616
617 commit_write: If prepare_write succeeds, new data will be copied
618 into the page and then commit_write will be called. It will
619 typically update the size of the file (if appropriate) and
620 mark the inode as dirty, and do any other related housekeeping
621 operations. It should avoid returning an error if possible -
622 errors should have been handled by prepare_write.
623
624 write_begin: This is intended as a replacement for prepare_write. The
625 key differences being that:
626 - it returns a locked page (in *pagep) rather than being
627 given a pre locked page;
628 - it must be able to cope with short writes (where the
629 length passed to write_begin is greater than the number
630 of bytes copied into the page).
631
632 Called by the generic buffered write code to ask the filesystem to 600 Called by the generic buffered write code to ask the filesystem to
633 prepare to write len bytes at the given offset in the file. The 601 prepare to write len bytes at the given offset in the file. The
634 address_space should check that the write will be able to complete, 602 address_space should check that the write will be able to complete,
@@ -640,6 +608,9 @@ struct address_space_operations {
640 The filesystem must return the locked pagecache page for the specified 608 The filesystem must return the locked pagecache page for the specified
641 offset, in *pagep, for the caller to write into. 609 offset, in *pagep, for the caller to write into.
642 610
611 It must be able to cope with short writes (where the length passed to
612 write_begin is greater than the number of bytes copied into the page).
613
643 flags is a field for AOP_FLAG_xxx flags, described in 614 flags is a field for AOP_FLAG_xxx flags, described in
644 include/linux/fs.h. 615 include/linux/fs.h.
645 616