linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff Layton <jlayton@redhat.com>
To: Sean Anderson <seanga2@gmail.com>, Matthew Wilcox <willy@infradead.org>
Cc: linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	linux-doc@vger.kernel.org, corbet@lwn.net
Subject: Re: [PATCH v2] Documentation: filesystems: update filesystem locking documentation
Date: Tue, 01 Aug 2017 07:15:00 -0400	[thread overview]
Message-ID: <1501586100.4702.4.camel@redhat.com> (raw)
In-Reply-To: <039038a9-ff79-a6fc-fd98-b0d8abd702d1@gmail.com>

On Tue, 2017-08-01 at 07:09 -0400, Sean Anderson wrote:
> 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 <seanga2@gmail.com>
> ---
> v2: changed 'yes's to 'exclusive's when describing i_rwsem usage
> 
>  Documentation/filesystems/Locking | 43 ++++++++++++++++++++++-----------------
>  1 file changed, 24 insertions(+), 19 deletions(-)
> 
> diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
> index fe25787ff6d4..c0cab97d2b1a 100644
> --- a/Documentation/filesystems/Locking
> +++ b/Documentation/filesystems/Locking
> @@ -69,31 +69,31 @@ prototypes:
>  
>  locking rules:
>  	all may block
> -		i_mutex(inode)
> -lookup:		yes
> -create:		yes
> -link:		yes (both)
> -mknod:		yes
> -symlink:	yes
> -mkdir:		yes
> -unlink:		yes (both)
> -rmdir:		yes (both)	(see below)
> -rename:	yes (all)	(see below)
> +		i_rwsem(inode)
> +lookup:		shared
> +create:		exclusive
> +link:		exclusive (both)
> +mknod:		exclusive
> +symlink:	exclusive
> +mkdir:		exclusive
> +unlink:		exclusive (both)
> +rmdir:		exclusive (both)(see below)
> +rename:		exclusive (all)	(see below)
>  readlink:	no
>  get_link:	no
> -setattr:	yes
> +setattr:	exclusive
>  permission:	no (may not block if called in rcu-walk mode)
>  get_acl:	no
>  getattr:	no
>  listxattr:	no
>  fiemap:		no
>  update_time:	no
> -atomic_open:	yes
> +atomic_open:	exclusive
>  tmpfile:	no
>  
>  
> -	Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
> -victim.
> +	Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_rwsem
> +	exclusive on victim.
>  	cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem.
>  
>  See Documentation/filesystems/directory-locking for more detailed discussion
> @@ -111,10 +111,10 @@ prototypes:
>  
>  locking rules:
>  	all may block
> -		i_mutex(inode)
> +		i_rwsem(inode)
>  list:		no
>  get:		no
> -set:		yes
> +set:		exclusive
>  
>  --------------------------- super_operations ---------------------------
>  prototypes:
> @@ -217,14 +217,14 @@ 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:
>  set_page_dirty		no
>  readpages:
> -write_begin:		locks the page		yes
> -write_end:		yes, unlocks		yes
> +write_begin:		locks the page		exclusive
> +write_end:		yes, unlocks		exclusive
>  bmap:
>  invalidatepage:		yes
>  releasepage:		yes
> @@ -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 exclusive.
> +
> +->iterate_shared() is called with i_rwsem at least 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

Reviewed-by: Jeff Layton <jlayton@redhat.com>

  reply	other threads:[~2017-08-01 11:15 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-31 15:53 [PATCH] Documentation: filesystems: update filesystem locking documentation Sean Anderson
2017-07-31 17:23 ` Matthew Wilcox
2017-08-01 11:09   ` [PATCH v2] " Sean Anderson
2017-08-01 11:15     ` Jeff Layton [this message]
2017-08-01 14:22     ` Jonathan Corbet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1501586100.4702.4.camel@redhat.com \
    --to=jlayton@redhat.com \
    --cc=corbet@lwn.net \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=seanga2@gmail.com \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).