[PATCH v4 16/19] fs: only set S_VERSION when updating times if necessary

2017-12-22 Thread Jeff Layton
From: Jeff Layton We only really need to update i_version if someone has queried for it since we last incremented it. By doing that, we can avoid having to update the inode if the times haven't changed. If the times have changed, then we go ahead and forcibly increment the counter, under

[PATCH v4 17/19] xfs: avoid setting XFS_ILOG_CORE if i_version doesn't need incrementing

2017-12-22 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> If XFS_ILOG_CORE is already set then go ahead and increment it. Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/xfs/xfs_trans_inode.c | 14 -- 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_trans_

[PATCH v4 17/19] xfs: avoid setting XFS_ILOG_CORE if i_version doesn't need incrementing

2017-12-22 Thread Jeff Layton
From: Jeff Layton If XFS_ILOG_CORE is already set then go ahead and increment it. Signed-off-by: Jeff Layton --- fs/xfs/xfs_trans_inode.c | 14 -- 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_trans_inode.c b/fs/xfs/xfs_trans_inode.c index 225544327c4f

[PATCH v4 19/19] fs: handle inode->i_version more efficiently

2017-12-22 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Since i_version is mostly treated as an opaque value, we can exploit that fact to avoid incrementing it when no one is watching. With that change, we can avoid incrementing the counter on writes, unless someone has queried for it since it wa

[PATCH v4 19/19] fs: handle inode->i_version more efficiently

2017-12-22 Thread Jeff Layton
From: Jeff Layton Since i_version is mostly treated as an opaque value, we can exploit that fact to avoid incrementing it when no one is watching. With that change, we can avoid incrementing the counter on writes, unless someone has queried for it since it was last incremented. If the a/c/mtime

[PATCH v4 12/19] ocfs2: convert to new i_version API

2017-12-22 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> Reviewed-by: Jan Kara <j...@suse.cz> --- fs/ocfs2/dir.c | 15 --- fs/ocfs2/inode.c| 3 ++- fs/ocfs2/namei.c| 3 ++- fs/ocfs2/quota_global.c | 3 ++- 4

[PATCH v4 04/19] affs: convert to new i_version API

2017-12-22 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/affs/amigaffs.c | 5 +++-- fs/affs/dir.c | 5 +++-- fs/affs/super.c| 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/fs/affs/amigaffs.c b/fs/affs/amig

[PATCH v4 12/19] ocfs2: convert to new i_version API

2017-12-22 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton Reviewed-by: Jan Kara --- fs/ocfs2/dir.c | 15 --- fs/ocfs2/inode.c| 3 ++- fs/ocfs2/namei.c| 3 ++- fs/ocfs2/quota_global.c | 3 ++- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/fs/ocfs2

[PATCH v4 04/19] affs: convert to new i_version API

2017-12-22 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/affs/amigaffs.c | 5 +++-- fs/affs/dir.c | 5 +++-- fs/affs/super.c| 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/fs/affs/amigaffs.c b/fs/affs/amigaffs.c index 0f0e6925e97d..14a6c1b90c9f 100644 --- a/fs/affs

[PATCH v4 18/19] btrfs: only dirty the inode in btrfs_update_time if something was changed

2017-12-22 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> At this point, we know that "now" and the file times may differ, and we suspect that the i_version has been flagged to be bumped. Attempt to bump the i_version, and only mark the inode dirty if that actually occurred or if one of the t

[PATCH v4 18/19] btrfs: only dirty the inode in btrfs_update_time if something was changed

2017-12-22 Thread Jeff Layton
From: Jeff Layton At this point, we know that "now" and the file times may differ, and we suspect that the i_version has been flagged to be bumped. Attempt to bump the i_version, and only mark the inode dirty if that actually occurred or if one of the times was updated. Signed-of

[PATCH v4 02/19] fs: don't take the i_lock in inode_inc_iversion

2017-12-22 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.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 th

[PATCH v4 02/19] fs: don't take the i_lock in inode_inc_iversion

2017-12-22 Thread Jeff Layton
From: Jeff Layton 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

[PATCH v4 01/19] fs: new API for handling inode->i_version

2017-12-22 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Add a documentation blob that explains what the i_version field is, how it is expected to work, and how it is currently implemented by various filesystems. We already have inode_inc_iversion. Add several other functions for manipulating and acc

[PATCH v4 01/19] fs: new API for handling inode->i_version

2017-12-22 Thread Jeff Layton
From: Jeff Layton Add a documentation blob that explains what the i_version field is, how it is expected to work, and how it is currently implemented by various filesystems. We already have inode_inc_iversion. Add several other functions for manipulating and accessing the i_version counter

[PATCH v4 00/19] fs: rework and optimize i_version handling in filesystems

2017-12-22 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> v4: - fix SB_LAZYTIME handling in generic_update_time - add memory barriers to patch to convert i_version field to atomic64_t v3: - move i_version handling functions to new header file - document that the kernel-managed i_version implementation will

[PATCH v4 00/19] fs: rework and optimize i_version handling in filesystems

2017-12-22 Thread Jeff Layton
From: Jeff Layton v4: - fix SB_LAZYTIME handling in generic_update_time - add memory barriers to patch to convert i_version field to atomic64_t v3: - move i_version handling functions to new header file - document that the kernel-managed i_version implementation will appear to increase over

Re: [PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-21 Thread Jeff Layton
On Wed, 2017-12-20 at 17:41 +0100, Jan Kara wrote: > On Wed 20-12-17 09:03:06, Jeff Layton wrote: > > On Tue, 2017-12-19 at 09:07 +1100, Dave Chinner wrote: > > > On Mon, Dec 18, 2017 at 02:35:20PM -0500, Jeff Layton wrote: > > > > [PATCH] SQUASH: add memory barr

Re: [PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-21 Thread Jeff Layton
On Wed, 2017-12-20 at 17:41 +0100, Jan Kara wrote: > On Wed 20-12-17 09:03:06, Jeff Layton wrote: > > On Tue, 2017-12-19 at 09:07 +1100, Dave Chinner wrote: > > > On Mon, Dec 18, 2017 at 02:35:20PM -0500, Jeff Layton wrote: > > > > [PATCH] SQUASH: add memory barr

Re: [PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-20 Thread Jeff Layton
On Tue, 2017-12-19 at 09:07 +1100, Dave Chinner wrote: > On Mon, Dec 18, 2017 at 02:35:20PM -0500, Jeff Layton wrote: > > [PATCH] SQUASH: add memory barriers around i_version accesses > > Why explicit memory barriers rather than annotating the operations > with the required sem

Re: [PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-20 Thread Jeff Layton
On Tue, 2017-12-19 at 09:07 +1100, Dave Chinner wrote: > On Mon, Dec 18, 2017 at 02:35:20PM -0500, Jeff Layton wrote: > > [PATCH] SQUASH: add memory barriers around i_version accesses > > Why explicit memory barriers rather than annotating the operations > with the required sem

Re: [PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-19 Thread Jeff Layton
On Tue, 2017-12-19 at 10:29 +0100, Jan Kara wrote: > On Mon 18-12-17 12:22:20, Jeff Layton wrote: > > On Mon, 2017-12-18 at 17:34 +0100, Jan Kara wrote: > > > On Mon 18-12-17 10:11:56, Jeff Layton wrote: > > > > static inline bool > > > > inode_maybe_in

Re: [PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-19 Thread Jeff Layton
On Tue, 2017-12-19 at 10:29 +0100, Jan Kara wrote: > On Mon 18-12-17 12:22:20, Jeff Layton wrote: > > On Mon, 2017-12-18 at 17:34 +0100, Jan Kara wrote: > > > On Mon 18-12-17 10:11:56, Jeff Layton wrote: > > > > static inline bool > > > > inode_maybe_in

Re: [PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-18 Thread Jeff Layton
On Mon, 2017-12-18 at 12:36 -0500, J. Bruce Fields wrote: > On Mon, Dec 18, 2017 at 12:22:20PM -0500, Jeff Layton wrote: > > On Mon, 2017-12-18 at 17:34 +0100, Jan Kara wrote: > > > On Mon 18-12-17 10:11:56, Jeff Layton wrote: > > > > static inline bool > >

Re: [PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-18 Thread Jeff Layton
On Mon, 2017-12-18 at 12:36 -0500, J. Bruce Fields wrote: > On Mon, Dec 18, 2017 at 12:22:20PM -0500, Jeff Layton wrote: > > On Mon, 2017-12-18 at 17:34 +0100, Jan Kara wrote: > > > On Mon 18-12-17 10:11:56, Jeff Layton wrote: > > > > static inline bool > >

Re: [PATCH v3 01/19] fs: new API for handling inode->i_version

2017-12-18 Thread Jeff Layton
On Mon, 2017-12-18 at 10:11 -0500, Jeff Layton wrote: > From: Jeff Layton <jlay...@redhat.com> > > Add a documentation blob that explains what the i_version field is, how > it is expected to work, and how it is currently implemented by various > filesystems.

Re: [PATCH v3 01/19] fs: new API for handling inode->i_version

2017-12-18 Thread Jeff Layton
On Mon, 2017-12-18 at 10:11 -0500, Jeff Layton wrote: > From: Jeff Layton > > Add a documentation blob that explains what the i_version field is, how > it is expected to work, and how it is currently implemented by various > filesystems. > > We already have inode_inc_iversi

Re: [PATCH v3 16/19] fs: only set S_VERSION when updating times if necessary

2017-12-18 Thread Jeff Layton
On Mon, 2017-12-18 at 17:07 +0100, Jan Kara wrote: > On Mon 18-12-17 10:11:53, Jeff Layton wrote: > > From: Jeff Layton <jlay...@redhat.com> > > > > We only really need to update i_version if someone has queried for it > > since we last incremented it. B

Re: [PATCH v3 16/19] fs: only set S_VERSION when updating times if necessary

2017-12-18 Thread Jeff Layton
On Mon, 2017-12-18 at 17:07 +0100, Jan Kara wrote: > On Mon 18-12-17 10:11:53, Jeff Layton wrote: > > From: Jeff Layton > > > > We only really need to update i_version if someone has queried for it > > since we last incremented it. By doing that, we can avoid hav

Re: [PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-18 Thread Jeff Layton
On Mon, 2017-12-18 at 17:34 +0100, Jan Kara wrote: > On Mon 18-12-17 10:11:56, Jeff Layton wrote: > > static inline bool > > inode_maybe_inc_iversion(struct inode *inode, bool force) > > { > > - atomic64_t *ivp = (atomic64_t *)>i_version; > > + u64 cur,

Re: [PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-18 Thread Jeff Layton
On Mon, 2017-12-18 at 17:34 +0100, Jan Kara wrote: > On Mon 18-12-17 10:11:56, Jeff Layton wrote: > > static inline bool > > inode_maybe_inc_iversion(struct inode *inode, bool force) > > { > > - atomic64_t *ivp = (atomic64_t *)>i_version; > > + u64 cur,

[PATCH v3 01/19] fs: new API for handling inode->i_version

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Add a documentation blob that explains what the i_version field is, how it is expected to work, and how it is currently implemented by various filesystems. We already have inode_inc_iversion. Add several other functions for manipulating and acc

[PATCH v3 01/19] fs: new API for handling inode->i_version

2017-12-18 Thread Jeff Layton
From: Jeff Layton Add a documentation blob that explains what the i_version field is, how it is expected to work, and how it is currently implemented by various filesystems. We already have inode_inc_iversion. Add several other functions for manipulating and accessing the i_version counter

[PATCH v3 04/19] affs: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/affs/amigaffs.c | 5 +++-- fs/affs/dir.c | 5 +++-- fs/affs/super.c| 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/fs/affs/amigaffs.c b/fs/affs/amig

[PATCH v3 04/19] affs: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/affs/amigaffs.c | 5 +++-- fs/affs/dir.c | 5 +++-- fs/affs/super.c| 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/fs/affs/amigaffs.c b/fs/affs/amigaffs.c index 0f0e6925e97d..14a6c1b90c9f 100644 --- a/fs/affs

[PATCH v3 02/19] fs: don't take the i_lock in inode_inc_iversion

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.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 th

[PATCH v3 02/19] fs: don't take the i_lock in inode_inc_iversion

2017-12-18 Thread Jeff Layton
From: Jeff Layton 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

[PATCH v3 05/19] afs: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> For AFS, it's generally treated as an opaque value, so we use the *_raw variants of the API here. Note that AFS has quite a different definition for this counter. AFS only increments it on changes to the data, not for the metadata. We'll need to rec

[PATCH v3 05/19] afs: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton For AFS, it's generally treated as an opaque value, so we use the *_raw variants of the API here. Note that AFS has quite a different definition for this counter. AFS only increments it on changes to the data, not for the metadata. We'll need to reconcile that somehow if we

[PATCH v3 07/19] exofs: switch to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/exofs/dir.c | 9 + fs/exofs/super.c | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fs/exofs/dir.c b/fs/exofs/dir.c index 98233a97b7b8..c5a53fcc43ea 100

[PATCH v3 07/19] exofs: switch to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/exofs/dir.c | 9 + fs/exofs/super.c | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fs/exofs/dir.c b/fs/exofs/dir.c index 98233a97b7b8..c5a53fcc43ea 100644 --- a/fs/exofs/dir.c +++ b/fs/exofs/dir.c @@ -31,6

[PATCH v3 10/19] nfs: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> For NFS, we just use the "raw" API since the i_version is mostly managed by the server. The exception there is when the client holds a write delegation, but we only need to bump it once there anyway to handle CB_GETATTR. Signed-off-by: J

[PATCH v3 08/19] ext2: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> Reviewed-by: Jan Kara <j...@suse.cz> --- fs/ext2/dir.c | 9 + fs/ext2/super.c | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/fs/ext2/dir.c b/f

[PATCH v3 10/19] nfs: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton For NFS, we just use the "raw" API since the i_version is mostly managed by the server. The exception there is when the client holds a write delegation, but we only need to bump it once there anyway to handle CB_GETATTR. Signed-off-by: Jeff Layton --- fs/nfs/de

[PATCH v3 08/19] ext2: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton Reviewed-by: Jan Kara --- fs/ext2/dir.c | 9 + fs/ext2/super.c | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/fs/ext2/dir.c b/fs/ext2/dir.c index 987647986f47..4111085a129f 100644 --- a/fs/ext2/dir.c +++ b/fs

[PATCH v3 11/19] nfsd: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Mostly just making sure we use the "get" wrappers so we know when it is being fetched for later use. Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/nfsd/nfsfh.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --g

[PATCH v3 11/19] nfsd: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Mostly just making sure we use the "get" wrappers so we know when it is being fetched for later use. Signed-off-by: Jeff Layton --- fs/nfsd/nfsfh.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/nfsd/nfsfh.h b/fs/nfsd/nfsfh.h index 43

[PATCH v3 14/19] xfs: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/xfs/libxfs/xfs_inode_buf.c | 7 +-- fs/xfs/xfs_icache.c | 5 +++-- fs/xfs/xfs_inode.c| 3 ++- fs/xfs/xfs_inode_item.c | 3 ++- fs/xfs/xfs_trans_inode.c

[PATCH v3 14/19] xfs: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/xfs/libxfs/xfs_inode_buf.c | 7 +-- fs/xfs/xfs_icache.c | 5 +++-- fs/xfs/xfs_inode.c| 3 ++- fs/xfs/xfs_inode_item.c | 3 ++- fs/xfs/xfs_trans_inode.c | 4 +++- 5 files changed, 15 insertions(+), 7

[PATCH v3 13/19] ufs: use new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/ufs/dir.c | 9 + fs/ufs/inode.c | 3 ++- fs/ufs/super.c | 3 ++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/fs/ufs/dir.c b/fs/ufs/dir.c index 2edc1755b7c5..

[PATCH v3 13/19] ufs: use new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/ufs/dir.c | 9 + fs/ufs/inode.c | 3 ++- fs/ufs/super.c | 3 ++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/fs/ufs/dir.c b/fs/ufs/dir.c index 2edc1755b7c5..50dfce000864 100644 --- a/fs/ufs/dir.c +++ b/fs/ufs

[PATCH v3 15/19] IMA: switch IMA over to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- security/integrity/ima/ima_api.c | 3 ++- security/integrity/ima/ima_main.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/security/integrity/ima/ima_api.c b/securi

[PATCH v3 17/19] xfs: avoid setting XFS_ILOG_CORE if i_version doesn't need incrementing

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> If XFS_ILOG_CORE is already set then go ahead and increment it. Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/xfs/xfs_trans_inode.c | 14 -- 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_trans_

[PATCH v3 15/19] IMA: switch IMA over to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- security/integrity/ima/ima_api.c | 3 ++- security/integrity/ima/ima_main.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c index c7e8db0ea4c0

[PATCH v3 17/19] xfs: avoid setting XFS_ILOG_CORE if i_version doesn't need incrementing

2017-12-18 Thread Jeff Layton
From: Jeff Layton If XFS_ILOG_CORE is already set then go ahead and increment it. Signed-off-by: Jeff Layton --- fs/xfs/xfs_trans_inode.c | 14 -- 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/fs/xfs/xfs_trans_inode.c b/fs/xfs/xfs_trans_inode.c index 225544327c4f

[PATCH v3 18/19] btrfs: only dirty the inode in btrfs_update_time if something was changed

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> At this point, we know that "now" and the file times may differ, and we suspect that the i_version has been flagged to be bumped. Attempt to bump the i_version, and only mark the inode dirty if that actually occurred or if one of the t

[PATCH v3 18/19] btrfs: only dirty the inode in btrfs_update_time if something was changed

2017-12-18 Thread Jeff Layton
From: Jeff Layton At this point, we know that "now" and the file times may differ, and we suspect that the i_version has been flagged to be bumped. Attempt to bump the i_version, and only mark the inode dirty if that actually occurred or if one of the times was updated. Signed-of

[PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Since i_version is mostly treated as an opaque value, we can exploit that fact to avoid incrementing it when no one is watching. With that change, we can avoid incrementing the counter on writes, unless someone has queried for it since it wa

[PATCH v3 19/19] fs: handle inode->i_version more efficiently

2017-12-18 Thread Jeff Layton
From: Jeff Layton Since i_version is mostly treated as an opaque value, we can exploit that fact to avoid incrementing it when no one is watching. With that change, we can avoid incrementing the counter on writes, unless someone has queried for it since it was last incremented. If the a/c/mtime

[PATCH v3 00/19] fs: rework and optimize i_version handling in filesystems

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> v3: - move i_version handling functions to new header file - document that the kernel-managed i_version implementation will appear to increase over time - fix inode_cmp_iversion to handle wraparound correctly v2: - xfs should use inode_peek_iv

[PATCH v3 16/19] fs: only set S_VERSION when updating times if necessary

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> We only really need to update i_version if someone has queried for it since we last incremented it. By doing that, we can avoid having to update the inode if the times haven't changed. If the times have changed, then we go ahead and forcibly inc

[PATCH v3 09/19] ext4: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> Acked-by: Theodore Ts'o <ty...@mit.edu> --- fs/ext4/dir.c| 9 + fs/ext4/inline.c | 7 --- fs/ext4/inode.c | 13 + fs/ext4/ioctl.c | 3 ++- fs/ext4/namei.c |

[PATCH v3 00/19] fs: rework and optimize i_version handling in filesystems

2017-12-18 Thread Jeff Layton
From: Jeff Layton v3: - move i_version handling functions to new header file - document that the kernel-managed i_version implementation will appear to increase over time - fix inode_cmp_iversion to handle wraparound correctly v2: - xfs should use inode_peek_iversion instead

[PATCH v3 16/19] fs: only set S_VERSION when updating times if necessary

2017-12-18 Thread Jeff Layton
From: Jeff Layton We only really need to update i_version if someone has queried for it since we last incremented it. By doing that, we can avoid having to update the inode if the times haven't changed. If the times have changed, then we go ahead and forcibly increment the counter, under

[PATCH v3 09/19] ext4: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton Acked-by: Theodore Ts'o --- fs/ext4/dir.c| 9 + fs/ext4/inline.c | 7 --- fs/ext4/inode.c | 13 + fs/ext4/ioctl.c | 3 ++- fs/ext4/namei.c | 5 +++-- fs/ext4/super.c | 3 ++- fs/ext4/xattr.c | 5 +++-- 7 files

[PATCH v3 06/19] btrfs: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/btrfs/delayed-inode.c | 7 +-- fs/btrfs/file.c | 1 + fs/btrfs/inode.c | 7 +-- fs/btrfs/ioctl.c | 1 + fs/btrfs/tree-log.c | 4 +++- fs/btrfs/xattr.c

[PATCH v3 12/19] ocfs2: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> Reviewed-by: Jan Kara <j...@suse.cz> --- fs/ocfs2/dir.c | 15 --- fs/ocfs2/inode.c| 3 ++- fs/ocfs2/namei.c| 3 ++- fs/ocfs2/quota_global.c | 3 ++- 4

[PATCH v3 03/19] fat: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/fat/dir.c | 3 ++- fs/fat/inode.c | 9 + fs/fat/namei_msdos.c | 7 --- fs/fat/namei_vfat.c | 22 +++--- 4 files changed, 22 insertions(+),

[PATCH v3 06/19] btrfs: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/btrfs/delayed-inode.c | 7 +-- fs/btrfs/file.c | 1 + fs/btrfs/inode.c | 7 +-- fs/btrfs/ioctl.c | 1 + fs/btrfs/tree-log.c | 4 +++- fs/btrfs/xattr.c | 1 + 6 files changed, 16 insertions(+), 5

[PATCH v3 12/19] ocfs2: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton Reviewed-by: Jan Kara --- fs/ocfs2/dir.c | 15 --- fs/ocfs2/inode.c| 3 ++- fs/ocfs2/namei.c| 3 ++- fs/ocfs2/quota_global.c | 3 ++- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/fs/ocfs2

[PATCH v3 03/19] fat: convert to new i_version API

2017-12-18 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/fat/dir.c | 3 ++- fs/fat/inode.c | 9 + fs/fat/namei_msdos.c | 7 --- fs/fat/namei_vfat.c | 22 +++--- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/fs/fat/dir.c b/fs/fat/dir.c

Re: [PATCH 01/19] fs: new API for handling inode->i_version

2017-12-18 Thread Jeff Layton
On Sat, 2017-12-16 at 15:17 +1100, NeilBrown wrote: > On Wed, Dec 13 2017, Jeff Layton wrote: > > > On Thu, 2017-12-14 at 09:04 +1100, NeilBrown wrote: > > > On Wed, Dec 13 2017, Jeff Layton wrote: > > > > > > > +/* > > > > + * The change at

Re: [PATCH 01/19] fs: new API for handling inode->i_version

2017-12-18 Thread Jeff Layton
On Sat, 2017-12-16 at 15:17 +1100, NeilBrown wrote: > On Wed, Dec 13 2017, Jeff Layton wrote: > > > On Thu, 2017-12-14 at 09:04 +1100, NeilBrown wrote: > > > On Wed, Dec 13 2017, Jeff Layton wrote: > > > > > > > +/* > > > > + * The change at

Re: [PATCH 01/19] fs: new API for handling inode->i_version

2017-12-17 Thread Jeff Layton
On Sat, 2017-12-16 at 15:17 +1100, NeilBrown wrote: > On Wed, Dec 13 2017, Jeff Layton wrote: > > > On Thu, 2017-12-14 at 09:04 +1100, NeilBrown wrote: > > > On Wed, Dec 13 2017, Jeff Layton wrote: > > > > > > > +/* > > > > + * The change at

Re: [PATCH 01/19] fs: new API for handling inode->i_version

2017-12-17 Thread Jeff Layton
On Sat, 2017-12-16 at 15:17 +1100, NeilBrown wrote: > On Wed, Dec 13 2017, Jeff Layton wrote: > > > On Thu, 2017-12-14 at 09:04 +1100, NeilBrown wrote: > > > On Wed, Dec 13 2017, Jeff Layton wrote: > > > > > > > +/* > > > > + * The change at

Re: [PATCH v2 01/19] fs: new API for handling inode->i_version

2017-12-16 Thread Jeff Layton
On Sun, 2017-12-17 at 09:37 +1100, Dave Chinner wrote: > On Sat, Dec 16, 2017 at 08:46:38AM -0500, Jeff Layton wrote: > > From: Jeff Layton <jlay...@redhat.com> > > > > Add a documentation blob that explains what the i_version field is, how > > it is expected

Re: [PATCH v2 01/19] fs: new API for handling inode->i_version

2017-12-16 Thread Jeff Layton
On Sun, 2017-12-17 at 09:37 +1100, Dave Chinner wrote: > On Sat, Dec 16, 2017 at 08:46:38AM -0500, Jeff Layton wrote: > > From: Jeff Layton > > > > Add a documentation blob that explains what the i_version field is, how > > it is expected to work, and how it is curre

Re: [PATCH v2 05/19] afs: convert to new i_version API

2017-12-16 Thread Jeff Layton
On Sat, 2017-12-16 at 11:18 -0500, Jeffrey Altman wrote: > Hi Jeff, > > A few thoughts on AFS usage below which might impact a future revision > of the API. I hope they are useful. > > On 12/16/2017 8:49 AM, Jeff Layton wrote: > > On Sat, 2017-12-16 at 08:46 -0500, Jeff

Re: [PATCH v2 05/19] afs: convert to new i_version API

2017-12-16 Thread Jeff Layton
On Sat, 2017-12-16 at 11:18 -0500, Jeffrey Altman wrote: > Hi Jeff, > > A few thoughts on AFS usage below which might impact a future revision > of the API. I hope they are useful. > > On 12/16/2017 8:49 AM, Jeff Layton wrote: > > On Sat, 2017-12-16 at 08:46 -0500, Jeff

[PATCH v2 01/19] fs: new API for handling inode->i_version

2017-12-16 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Add a documentation blob that explains what the i_version field is, how it is expected to work, and how it is currently implemented by various filesystems. We already have inode_inc_iversion. Add several other functions for manipulating and acc

[PATCH v2 01/19] fs: new API for handling inode->i_version

2017-12-16 Thread Jeff Layton
From: Jeff Layton Add a documentation blob that explains what the i_version field is, how it is expected to work, and how it is currently implemented by various filesystems. We already have inode_inc_iversion. Add several other functions for manipulating and accessing the i_version counter

[PATCH v2 03/19] fat: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/fat/dir.c | 2 +- fs/fat/inode.c | 8 fs/fat/namei_msdos.c | 6 +++--- fs/fat/namei_vfat.c | 20 ++-- 4 files changed, 18 insertions(+), 18 deleti

[PATCH v2 03/19] fat: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/fat/dir.c | 2 +- fs/fat/inode.c | 8 fs/fat/namei_msdos.c | 6 +++--- fs/fat/namei_vfat.c | 20 ++-- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/fs/fat/dir.c b/fs/fat/dir.c

[PATCH v2 02/19] fs: don't take the i_lock in inode_inc_iversion

2017-12-16 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.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 th

[PATCH v2 04/19] affs: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/affs/amigaffs.c | 4 ++-- fs/affs/dir.c | 4 ++-- fs/affs/super.c| 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/affs/amigaffs.c b/fs/affs/amig

[PATCH v2 04/19] affs: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/affs/amigaffs.c | 4 ++-- fs/affs/dir.c | 4 ++-- fs/affs/super.c| 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/affs/amigaffs.c b/fs/affs/amigaffs.c index 0f0e6925e97d..085a93bea1e2 100644 --- a/fs/affs

[PATCH v2 02/19] fs: don't take the i_lock in inode_inc_iversion

2017-12-16 Thread Jeff Layton
From: Jeff Layton 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

[PATCH v2 06/19] btrfs: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/btrfs/delayed-inode.c | 6 -- fs/btrfs/inode.c | 6 -- fs/btrfs/tree-log.c | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/delayed-

[PATCH v2 06/19] btrfs: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/btrfs/delayed-inode.c | 6 -- fs/btrfs/inode.c | 6 -- fs/btrfs/tree-log.c | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index 5d73f79ded8b

[PATCH v2 09/19] ext4: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> Acked-by: Theodore Ts'o <ty...@mit.edu> --- fs/ext4/dir.c| 8 fs/ext4/inline.c | 6 +++--- fs/ext4/inode.c | 12 fs/ext4/ioctl.c | 2 +- fs/ext4/namei.c

[PATCH v2 09/19] ext4: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton Acked-by: Theodore Ts'o --- fs/ext4/dir.c| 8 fs/ext4/inline.c | 6 +++--- fs/ext4/inode.c | 12 fs/ext4/ioctl.c | 2 +- fs/ext4/namei.c | 4 ++-- fs/ext4/super.c | 2 +- fs/ext4/xattr.c | 4 ++-- 7 files

[PATCH v2 07/19] exofs: switch to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/exofs/dir.c | 8 fs/exofs/super.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/exofs/dir.c b/fs/exofs/dir.c index 98233a97b7b8..36e314083b80 100644 --

[PATCH v2 07/19] exofs: switch to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/exofs/dir.c | 8 fs/exofs/super.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/exofs/dir.c b/fs/exofs/dir.c index 98233a97b7b8..36e314083b80 100644 --- a/fs/exofs/dir.c +++ b/fs/exofs/dir.c @@ -60,7

[PATCH v2 10/19] nfs: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> For NFS, we just use the "raw" API since the i_version is mostly managed by the server. The exception there is when the client holds a write delegation, but we only need to bump it once there anyway to handle CB_GETATTR. Signed-off-by: J

[PATCH v2 10/19] nfs: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton For NFS, we just use the "raw" API since the i_version is mostly managed by the server. The exception there is when the client holds a write delegation, but we only need to bump it once there anyway to handle CB_GETATTR. Signed-off-by: Jeff Layton --- fs/nfs/de

[PATCH v2 13/19] ufs: use new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/ufs/dir.c | 8 fs/ufs/inode.c | 2 +- fs/ufs/super.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/ufs/dir.c b/fs/ufs/dir.c index 2edc1755b7c5..547c4d4

[PATCH v2 13/19] ufs: use new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton Signed-off-by: Jeff Layton --- fs/ufs/dir.c | 8 fs/ufs/inode.c | 2 +- fs/ufs/super.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/ufs/dir.c b/fs/ufs/dir.c index 2edc1755b7c5..547c4d4c4db8 100644 --- a/fs/ufs/dir.c +++ b/fs/ufs/dir.c

Re: [PATCH v2 05/19] afs: convert to new i_version API

2017-12-16 Thread Jeff Layton
On Sat, 2017-12-16 at 08:46 -0500, Jeff Layton wrote: > From: Jeff Layton <jlay...@redhat.com> > > For AFS, it's generally treated as an opaque value, so we use the > *_raw variants of the API here. > > Note that AFS has quite a different definition for this counte

Re: [PATCH v2 05/19] afs: convert to new i_version API

2017-12-16 Thread Jeff Layton
On Sat, 2017-12-16 at 08:46 -0500, Jeff Layton wrote: > From: Jeff Layton > > For AFS, it's generally treated as an opaque value, so we use the > *_raw variants of the API here. > > Note that AFS has quite a different definition for this counter. AFS > only increments it o

[PATCH v2 14/19] xfs: convert to new i_version API

2017-12-16 Thread Jeff Layton
From: Jeff Layton <jlay...@redhat.com> Signed-off-by: Jeff Layton <jlay...@redhat.com> --- fs/xfs/libxfs/xfs_inode_buf.c | 5 +++-- fs/xfs/xfs_icache.c | 4 ++-- fs/xfs/xfs_inode.c| 2 +- fs/xfs/xfs_inode_item.c | 2 +- fs/xfs/xfs_trans_inode.c | 2

<    3   4   5   6   7   8   9   10   11   12   >