All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC 0/11] state lock reduction prep
@ 2009-12-16 17:39 Benny Halevy
  2009-12-16 17:40 ` [RFC 01/11] nfsd: introduce nfs4_client state Benny Halevy
                   ` (10 more replies)
  0 siblings, 11 replies; 24+ messages in thread
From: Benny Halevy @ 2009-12-16 17:39 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: pNFS Mailing List, NFS list

Bruce,

The following patches implement the first phase in preparation
for reducing the scope in we which we hold the state lock mutex.

[RFC 01/11] nfsd: introduce nfs4_client state
[RFC 02/11] nfsd: mark client state as expired in expire_client
[RFC 03/11] nfsd: introduce get_nfs4_client
[RFC 04/11] nfsd: mark client for renew
[RFC 05/11] nfsd: skip clients marked for renewal
[RFC 06/11] nfsd41: no need to hold the state lock around mark_client_for_renew

the patches above use an atomic cl_state field to manage the
nfs4_client expire vs. renew state so this can be done outside
the state lock.

[RFC 07/11] nfsd: rename recall_lock to deleg_lock
[RFC 08/11] nfsd: use deleg_lock to protect dl_perfile and dl_perclnt
[RFC 09/11] nfsd: get a reference count on the delgation while outside of the deleg_lock
[RFC 10/11] nfsd: close delegation only on last reference
[RFC 11/11] nfsd: refactor unhash_delegation

The patches above augment the use of the recall_lock spinlock
(and rename it to deleg_lock) and grab a reference count on
the delegation structure while not protected by the deleg_lock.
The delegation's respective file will be closed only on last
dereference, so the deleg structure could be used safely while
not holding the state_lock and potentially in parallel to
expire_client being called (and unhashing the delegation)

The next steps I see are:

1. use a spinlock for traversing the nfs4_client hash lists
2. use a spinlock for traversing the nfs4_stateowner lists

Eventually, reducing the state_lock scope for complex state changes
requiring the coordination of state across multiple lists
and involving blocking ops (e.g. allocation, manipulating clid_dir)
in particular there should be no need to hold the state lock
for expire_client.

Benny

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

end of thread, other threads:[~2009-12-17 20:19 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-16 17:39 [RFC 0/11] state lock reduction prep Benny Halevy
2009-12-16 17:40 ` [RFC 01/11] nfsd: introduce nfs4_client state Benny Halevy
2009-12-16 22:33   ` [pnfs] " Peter Staubach
2009-12-16 23:17     ` Benny Halevy
2009-12-16 17:40 ` [RFC 02/11] nfsd: mark client state as expired in expire_client Benny Halevy
2009-12-16 17:40 ` [RFC 03/11] nfsd: introduce get_nfs4_client Benny Halevy
2009-12-16 17:41 ` [RFC 04/11] nfsd: mark client for renew Benny Halevy
2009-12-16 20:48   `  J. Bruce Fields
2009-12-16 20:53     `  J. Bruce Fields
2009-12-16 21:56       ` Benny Halevy
2009-12-16 22:06         ` J. Bruce Fields
2009-12-16 22:23           ` Benny Halevy
2009-12-17 20:19             ` J. Bruce Fields
2009-12-16 17:41 ` [RFC 05/11] nfsd: skip clients marked for renewal Benny Halevy
2009-12-16 20:58   `  J. Bruce Fields
2009-12-16 21:54     ` Benny Halevy
2009-12-16 17:41 ` [RFC 06/11] nfsd41: no need to hold the state lock around mark_client_for_renew Benny Halevy
2009-12-16 17:41 ` [RFC 07/11] nfsd: rename recall_lock to deleg_lock Benny Halevy
2009-12-16 17:42 ` [RFC 08/11] nfsd: use deleg_lock to protect dl_perfile and dl_perclnt Benny Halevy
2009-12-16 17:42 ` [RFC 09/11] nfsd: get a reference count on the delgation while outside of the deleg_lock Benny Halevy
2009-12-16 17:42 ` [RFC 10/11] nfsd: close delegation only on last reference Benny Halevy
2009-12-16 21:18   `  J. Bruce Fields
2009-12-16 22:04     ` Benny Halevy
2009-12-16 17:42 ` [RFC 11/11] nfsd: refactor unhash_delegation Benny Halevy

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.