From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk0-f195.google.com ([209.85.220.195]:38630 "EHLO mail-qk0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751008AbdHALJN (ORCPT ); Tue, 1 Aug 2017 07:09:13 -0400 Subject: [PATCH v2] Documentation: filesystems: update filesystem locking documentation To: Matthew Wilcox Cc: linux-fsdevel , linux-doc@vger.kernel.org, corbet@lwn.net References: <2adf1174-ee74-5655-7b2e-3ea8b28ec2ae@gmail.com> <20170731172359.GJ15980@bombadil.infradead.org> From: Sean Anderson Message-ID: <039038a9-ff79-a6fc-fd98-b0d8abd702d1@gmail.com> Date: Tue, 1 Aug 2017 07:09:10 -0400 MIME-Version: 1.0 In-Reply-To: <20170731172359.GJ15980@bombadil.infradead.org> Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="W8N3HbGdVQVaD6UWUGEBOI5kJ8C0DUm2b" Sender: linux-fsdevel-owner@vger.kernel.org List-ID: This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --W8N3HbGdVQVaD6UWUGEBOI5kJ8C0DUm2b Content-Type: multipart/mixed; boundary="W1DOPFQPwxxaqlDS55u6BaiB9GWAwsT3q"; protected-headers="v1" From: Sean Anderson To: Matthew Wilcox Cc: linux-fsdevel , linux-doc@vger.kernel.org, corbet@lwn.net Message-ID: <039038a9-ff79-a6fc-fd98-b0d8abd702d1@gmail.com> Subject: [PATCH v2] Documentation: filesystems: update filesystem locking documentation References: <2adf1174-ee74-5655-7b2e-3ea8b28ec2ae@gmail.com> <20170731172359.GJ15980@bombadil.infradead.org> In-Reply-To: <20170731172359.GJ15980@bombadil.infradead.org> --W1DOPFQPwxxaqlDS55u6BaiB9GWAwsT3q Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable 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 --- 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/filesystem= s/Locking index fe25787ff6d4..c0cab97d2b1a 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking @@ -69,31 +69,31 @@ prototypes: =20 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 =20 =20 - 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. =20 See Documentation/filesystems/directory-locking for more detailed discus= sion @@ -111,10 +111,10 @@ prototypes: =20 locking rules: all may block - i_mutex(inode) + i_rwsem(inode) list: no get: no -set: yes +set: exclusive =20 --------------------------- super_operations ---------------------------= prototypes: @@ -217,14 +217,14 @@ prototypes: locking rules: All except set_page_dirty and freepage may block =20 - 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 modificat= ions since this is something the userspace has to take care about. =20 +->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_flag= s. 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 --=20 2.13.2 --W1DOPFQPwxxaqlDS55u6BaiB9GWAwsT3q-- --W8N3HbGdVQVaD6UWUGEBOI5kJ8C0DUm2b Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQGTBAEBCgB9FiEEkGEdW86NSNID6GAoPuiP7LShEG4FAlmAYVZfFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDkw NjExRDVCQ0U4RDQ4RDIwM0U4NjAyODNFRTg4RkVDQjRBMTEwNkUACgkQPuiP7LSh EG7ZKQf9Gex6ZPTnLVbQB09tcF4Q7TyylIFviUeDqFnXgiUXtvT6Z/1Y3xxUp2gD sHeOqDGTTGxXJPs6ZHi216y0JgipfrbWjsvxVcCPiAWBLJr4DJaMlvXGd/sSxPkg LfVaGAhH0ZWVrhqOk7ZyuxtmENgfVKx9IqVq2EVz2C6hoBlbeJ0M5TJBOkbkmTF+ XRo+uCwni+YDk/zi2EbLrDhTcSjS6T4UUc4HpjgkknnhBp/is1uhtKyhuFjMxv0l FvX1gQHyTj/FawGDAP9Zhe1KAhb/c2arv0+HMfnPd3uawldJ9tEl8SCccIvpCO9W bRO4KDHipS61B6ADAo0GXGAaNEPxyg== =lrXZ -----END PGP SIGNATURE----- --W8N3HbGdVQVaD6UWUGEBOI5kJ8C0DUm2b--