Documentation/filesystems/Locking no longer reflects current locking
semantics. i_mutex is no longer used for locking, and has been superseded
by i_rwsem. Additionally, ->iterate_shared() was not documented.

Signed-off-by: Sean Anderson <sean...@gmail.com>
---
 Documentation/filesystems/Locking | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/Documentation/filesystems/Locking 
b/Documentation/filesystems/Locking
index fe25787ff6d4..b098d2e50b7f 100644
--- a/Documentation/filesystems/Locking
+++ b/Documentation/filesystems/Locking
@@ -69,8 +69,8 @@ prototypes:
 
 locking rules:
        all may block
-               i_mutex(inode)
-lookup:                yes
+               i_rwsem(inode)
+lookup:                shared
 create:                yes
 link:          yes (both)
 mknod:         yes
@@ -92,7 +92,7 @@ atomic_open:  yes
 tmpfile:       no
 
 
-       Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
+       Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_rwsem on
 victim.
        cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem.
 
@@ -111,7 +111,7 @@ prototypes:
 
 locking rules:
        all may block
-               i_mutex(inode)
+               i_rwsem(inode)
 list:          no
 get:           no
 set:           yes
@@ -217,7 +217,7 @@ prototypes:
 locking rules:
        All except set_page_dirty and freepage may block
 
-                       PageLocked(page)        i_mutex
+                       PageLocked(page)        i_rwsem
 writepage:             yes, unlocks (see below)
 readpage:              yes, unlocks
 writepages:
@@ -439,6 +439,7 @@ prototypes:
        ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
        ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
        int (*iterate) (struct file *, struct dir_context *);
+       int (*iterate_shared) (struct file *, struct dir_context *);
        unsigned int (*poll) (struct file *, struct poll_table_struct *);
        long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
        long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
@@ -480,6 +481,10 @@ mutex or just to use i_size_read() instead.
 Note: this does not protect the file->f_pos against concurrent modifications
 since this is something the userspace has to take care about.
 
+->iterate() is called with i_rwsem held.
+
+->iterate_shared() is called with i_rwsem shared.
+
 ->fasync() is responsible for maintaining the FASYNC bit in filp->f_flags.
 Most instances call fasync_helper(), which does that maintenance, so it's
 not normally something one needs to worry about.  Return values > 0 will be
-- 
2.13.2

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to