lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20180109151428.yuhawmbgv7tywjcq@quack2.suse.cz> Date: Tue, 9 Jan 2018 16:14:28 +0100 From: Jan Kara <jack@...e.cz> To: Jeff Layton <jlayton@...nel.org> Cc: linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org, viro@...iv.linux.org.uk, linux-nfs@...r.kernel.org, bfields@...ldses.org, neilb@...e.de, jack@...e.de, linux-ext4@...r.kernel.org, tytso@....edu, adilger.kernel@...ger.ca, linux-xfs@...r.kernel.org, darrick.wong@...cle.com, david@...morbit.com, linux-btrfs@...r.kernel.org, clm@...com, jbacik@...com, dsterba@...e.com, linux-integrity@...r.kernel.org, zohar@...ux.vnet.ibm.com, dmitry.kasatkin@...il.com, linux-afs@...ts.infradead.org, dhowells@...hat.com, jaltman@...istor.com, krzk@...nel.org Subject: Re: [PATCH v5 02/19] fs: don't take the i_lock in inode_inc_iversion On Tue 09-01-18 09:10:42, Jeff Layton wrote: > From: Jeff Layton <jlayton@...hat.com> > > The rationale for taking the i_lock when incrementing this value is > lost in antiquity. The readers of the field don't take it (at least > not universally), so my assumption is that it was only done here to > serialize incrementors. > > If that is indeed the case, then we can drop the i_lock from this > codepath and treat it as a atomic64_t for the purposes of > incrementing it. This allows us to use inode_inc_iversion without > any danger of lock inversion. > > Note that the read side is not fetched atomically with this change. > The assumption here is that that is not a critical issue since the > i_version is not fully synchronized with anything else anyway. > > Signed-off-by: Jeff Layton <jlayton@...hat.com> This changes the memory barrier behavior but IMO it is good enough for an intermediate version. You can add: Reviewed-by: Jan Kara <jack@...e.cz> Honza > --- > include/linux/iversion.h | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/include/linux/iversion.h b/include/linux/iversion.h > index d09cc3a08740..5ad9eaa3a9b0 100644 > --- a/include/linux/iversion.h > +++ b/include/linux/iversion.h > @@ -104,12 +104,13 @@ inode_set_iversion_queried(struct inode *inode, u64 new) > static inline bool > inode_maybe_inc_iversion(struct inode *inode, bool force) > { > - spin_lock(&inode->i_lock); > - inode->i_version++; > - spin_unlock(&inode->i_lock); > + atomic64_t *ivp = (atomic64_t *)&inode->i_version; > + > + atomic64_inc(ivp); > return true; > } > > + > /** > * inode_inc_iversion - forcibly increment i_version > * @inode: inode that needs to be updated > -- > 2.14.3 > -- Jan Kara <jack@...e.com> SUSE Labs, CR
Powered by blists - more mailing lists