All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/6] Skipped unlocks
@ 2017-04-06 11:23 Benjamin Coddington
  2017-04-06 11:23 ` [PATCH 1/6] NFS4: remove a redundant lock range check Benjamin Coddington
                   ` (5 more replies)
  0 siblings, 6 replies; 24+ messages in thread
From: Benjamin Coddington @ 2017-04-06 11:23 UTC (permalink / raw)
  To: Trond Myklebust, Anna Schumaker, Jeff Layton, bfields,
	Miklos Szeredi, Alexander Viro
  Cc: linux-nfs, linux-fsdevel

Well over a year ago I made other attempts to fix the problem of NFS failing
to send an unlock when signalled.  Those attempts were terrible.

Here's yet another version, this time using the approach suggested by Jeff
Layton to utilize an RPC waitqueue to defer unlock tasks until IO has
completed.  In order to do this for NLM without violating all the layers,
a new nlmclnt_operations struct is defined and passed in to allow the NLM
client to call back out to NFS at various stages.

Comments and review are welcomed.

since v1:
        - add Christoph's reviewed-by on 1/4 and 2/4 and fixup switch
          indentation on 2/4
since v2:
        - don't sleep in rpciod to wait for I/O completion, just send the unlock
          immediately for both v3 and v4.
since v3:
		- don't just skip the wait for FL_CLOSE.  Instead, build new
		  machinery into NLM to allow waiting in rpc_call_prepare().
since v4:
		- move the uoc_rpcwaitq outside #if IS_ENABLED(CONFIG_NFS_V4), since
		  we need it for nfsv3.  Add some explanation for the fuse change in 3/6.

Benjamin Coddington (6):
  NFS4: remove a redundant lock range check
  NFS: Move the flock open mode check into nfs_flock()
  locks: Set FL_CLOSE when removing flock locks on close()
  NFS: Add an iocounter wait function for async RPC tasks
  lockd: Introduce nlmclnt_operations
  NFS: Always wait for I/O completion before unlock

 fs/fuse/file.c              |  2 +-
 fs/lockd/clntproc.c         | 26 +++++++++++++++++++++++++-
 fs/locks.c                  |  2 +-
 fs/nfs/client.c             |  1 +
 fs/nfs/file.c               | 28 +++++++++++++++++++++-------
 fs/nfs/nfs3proc.c           | 38 +++++++++++++++++++++++++++++++++++++-
 fs/nfs/nfs4proc.c           | 27 +++++++--------------------
 fs/nfs/pagelist.c           | 26 +++++++++++++++++++++++++-
 fs/nfs/proc.c               |  2 +-
 include/linux/fs.h          |  2 ++
 include/linux/lockd/bind.h  | 11 +++++++++--
 include/linux/lockd/lockd.h |  2 ++
 include/linux/nfs_fs.h      |  1 +
 include/linux/nfs_fs_sb.h   |  1 +
 include/linux/nfs_page.h    |  1 +
 15 files changed, 135 insertions(+), 35 deletions(-)

-- 
2.9.3

^ permalink raw reply	[flat|nested] 24+ messages in thread
* [PATCH v6 0/6] Skipped unlocks
@ 2017-04-11 16:50 Benjamin Coddington
  2017-04-11 16:50 ` [PATCH 4/6] NFS: Add an iocounter wait function for async RPC tasks Benjamin Coddington
  0 siblings, 1 reply; 24+ messages in thread
From: Benjamin Coddington @ 2017-04-11 16:50 UTC (permalink / raw)
  To: Trond Myklebust, Anna Schumaker, Jeff Layton, bfields,
	Miklos Szeredi, Alexander Viro
  Cc: linux-nfs, linux-fsdevel

Well over a year ago I made other attempts to fix the problem of NFS failing
to send an unlock when signalled.  Those attempts were terrible.

Here's yet another version, this time using the approach suggested by Jeff
Layton to utilize an RPC waitqueue to defer unlock tasks until IO has
completed.  In order to do this for NLM without violating all the layers,
a new nlmclnt_operations struct is defined and passed in to allow the NLM
client to call back out to NFS at various stages.

Comments and review are welcomed.

since v1:
        - add Christoph's reviewed-by on 1/4 and 2/4 and fixup switch
          indentation on 2/4
since v2:
        - don't sleep in rpciod to wait for I/O completion, just send the unlock
          immediately for both v3 and v4.
since v3:
		- don't just skip the wait for FL_CLOSE.  Instead, build new
		  machinery into NLM to allow waiting in rpc_call_prepare().
since v4:
		- move the uoc_rpcwaitq outside #if IS_ENABLED(CONFIG_NFS_V4), since
		  we need it for nfsv3.  Add some explanation for the fuse change in 3/6.
since v5:
		- fixup 3/6 to add parens in flags comparison (thanks robot!)
		- changes in 4/6 - add comment block to nfs_async_iocounter_wait,
		  and arg changes from void * to struct nfs_lock_context *.
		- 5/6 is reworked to install nlmclnt_operations on the NLM host as
		  suggested by Jeff Layton instead of passed at call time to
		  nlmclnt_proc().
		- 6/6 is reworked to account for NLM always using the callbacks, and
		  to add missing reference increments to the nfs_open_context which
		  fixes a race that can have the final put of the open context
		  happen before the final put of the lock context.

	Also, Jeff asked "what of NFSv2?" on the last version, and I said I
would implement the same behavior as NFSv3.  After thinking about that, I've
decided to leave NFSv2 alone.  I don't feel particularly confident about
changing how NFSv2 works at this point since I expect that it gets very
little use, and I expect any use may be in environments that are very
dependent on NFSv2's current behavior. I don't think we should change it a
bit.

These patches are based on v4.10 and can be pulled from:
git://bcodding.com/~bcodding/linux skipped_unlocks.v6

Benjamin Coddington (6):
  NFS4: remove a redundant lock range check
  NFS: Move the flock open mode check into nfs_flock()
  locks: Set FL_CLOSE when removing flock locks on close()
  NFS: Add an iocounter wait function for async RPC tasks
  lockd: Introduce nlmclnt_operations
  NFS: Always wait for I/O completion before unlock

 fs/fuse/file.c              |  2 +-
 fs/lockd/clntlock.c         |  1 +
 fs/lockd/clntproc.c         | 26 +++++++++++++++++++++-
 fs/locks.c                  |  2 +-
 fs/nfs/client.c             |  2 ++
 fs/nfs/file.c               | 28 +++++++++++++++++------
 fs/nfs/nfs3proc.c           | 54 ++++++++++++++++++++++++++++++++++++++++++++-
 fs/nfs/nfs4proc.c           | 26 ++++++++--------------
 fs/nfs/pagelist.c           | 34 +++++++++++++++++++++++++++-
 fs/nfs/proc.c               |  2 +-
 include/linux/fs.h          |  2 ++
 include/linux/lockd/bind.h  | 24 ++++++++++++++++++--
 include/linux/lockd/lockd.h |  2 ++
 include/linux/nfs_fs.h      |  1 +
 include/linux/nfs_fs_sb.h   |  1 +
 include/linux/nfs_page.h    |  1 +
 include/linux/nfs_xdr.h     |  1 +
 17 files changed, 177 insertions(+), 32 deletions(-)

-- 
2.9.3

^ permalink raw reply	[flat|nested] 24+ messages in thread
* [PATCH v4 0/6] Skipped unlocks
@ 2017-04-01  3:15 Benjamin Coddington
  2017-04-01  3:16 ` [PATCH 4/6] NFS: Add an iocounter wait function for async RPC tasks Benjamin Coddington
  0 siblings, 1 reply; 24+ messages in thread
From: Benjamin Coddington @ 2017-04-01  3:15 UTC (permalink / raw)
  To: Trond Myklebust, Anna Schumaker, Jeff Layton, bfields,
	Miklos Szeredi, Alexander Viro
  Cc: linux-nfs, linux-fsdevel

Well over a year ago I made other attempts to fix the problem of NFS failing
to send an unlock when signalled.  Those attempts were terrible.

Here's yet another version, this time using the approach suggested by Jeff
Layton to utilize an RPC waitqueue to defer unlock tasks until IO has
completed.  In order to do this for NLM without violating all the layers,
a new nlmclnt_operations struct is defined and passed in to allow the NLM
client to call back out to NFS at various stages.

Comments and review are welcomed.

since v1:
        - add Christoph's reviewed-by on 1/4 and 2/4 and fixup switch
          indentation on 2/4
since v2:
        - don't sleep in rpciod to wait for I/O completion, just send the unlock
          immediately for both v3 and v4.
since v3:
		- don't just skip the wait for FL_CLOSE.  Instead, build new
		  machinery into NLM to allow waiting in rpc_call_prepare().

Benjamin Coddington (6):
  NFS4: remove a redundant lock range check
  NFS: Move the flock open mode check into nfs_flock()
  locks: Set FL_CLOSE when removing flock locks on close()
  NFS: Add an iocounter wait function for async RPC tasks
  lockd: Introduce nlmclnt_operations
  NFS: Always wait for I/O completion before unlock

 fs/fuse/file.c              |  2 +-
 fs/lockd/clntproc.c         | 26 +++++++++++++++++++++++++-
 fs/locks.c                  |  2 +-
 fs/nfs/client.c             |  1 +
 fs/nfs/file.c               | 28 +++++++++++++++++++++-------
 fs/nfs/nfs3proc.c           | 38 +++++++++++++++++++++++++++++++++++++-
 fs/nfs/nfs4proc.c           | 27 +++++++--------------------
 fs/nfs/pagelist.c           | 26 +++++++++++++++++++++++++-
 fs/nfs/proc.c               |  2 +-
 include/linux/fs.h          |  2 ++
 include/linux/lockd/bind.h  | 11 +++++++++--
 include/linux/lockd/lockd.h |  2 ++
 include/linux/nfs_fs.h      |  1 +
 include/linux/nfs_fs_sb.h   |  1 +
 include/linux/nfs_page.h    |  1 +
 15 files changed, 135 insertions(+), 35 deletions(-)

-- 
2.9.3

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2017-04-21 12:24 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-06 11:23 [PATCH v5 0/6] Skipped unlocks Benjamin Coddington
2017-04-06 11:23 ` [PATCH 1/6] NFS4: remove a redundant lock range check Benjamin Coddington
2017-04-06 11:23 ` [PATCH 2/6] NFS: Move the flock open mode check into nfs_flock() Benjamin Coddington
2017-04-06 11:23 ` [PATCH 3/6] locks: Set FL_CLOSE when removing flock locks on close() Benjamin Coddington
2017-04-06 18:17   ` Jeff Layton
2017-04-06 18:17     ` Jeff Layton
2017-04-08  5:34   ` kbuild test robot
2017-04-06 11:23 ` [PATCH 4/6] NFS: Add an iocounter wait function for async RPC tasks Benjamin Coddington
2017-04-07 10:44   ` Jeff Layton
2017-04-07 10:44     ` Jeff Layton
2017-04-07 11:26     ` Benjamin Coddington
2017-04-06 11:23 ` [PATCH 5/6] lockd: Introduce nlmclnt_operations Benjamin Coddington
2017-04-07 12:10   ` Jeff Layton
2017-04-07 12:10     ` Jeff Layton
2017-04-06 11:23 ` [PATCH 6/6] NFS: Always wait for I/O completion before unlock Benjamin Coddington
2017-04-07 12:22   ` Jeff Layton
2017-04-07 12:22     ` Jeff Layton
2017-04-07 13:34     ` Benjamin Coddington
  -- strict thread matches above, loose matches on Subject: below --
2017-04-11 16:50 [PATCH v6 0/6] Skipped unlocks Benjamin Coddington
2017-04-11 16:50 ` [PATCH 4/6] NFS: Add an iocounter wait function for async RPC tasks Benjamin Coddington
2017-04-21 12:24   ` Jeff Layton
2017-04-21 12:24     ` Jeff Layton
2017-04-01  3:15 [PATCH v4 0/6] Skipped unlocks Benjamin Coddington
2017-04-01  3:16 ` [PATCH 4/6] NFS: Add an iocounter wait function for async RPC tasks Benjamin Coddington
2017-04-02 14:29   ` kbuild test robot
2017-04-03  9:42     ` Benjamin Coddington

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.