diff options
author | Fred Isaman <iisaman@netapp.com> | 2011-01-06 06:36:32 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2011-01-06 14:46:32 -0500 |
commit | f7e8917a67980924651a9e244510e63ef05c7755 (patch) | |
tree | fb00db5ef8b3b26793fae7a1186f1cd16205ab9d /fs/nfs/client.c | |
parent | 36840370845629e6cb4324d1dd4aff6778670503 (diff) |
pnfs: layout roc code
A layout can request return-on-close. How this interacts with the
forgetful model of never sending LAYOUTRETURNS is a bit ambiguous.
We forget any layouts marked roc, and wait for them to be completely
forgotten before continuing with the close. In addition, to compensate
for races with any inflight LAYOUTGETs, and the fact that we do not get
any layout stateid back from the server, we set the barrier to the worst
case scenario of current_seqid + number of outstanding LAYOUTGETS.
Signed-off-by: Fred Isaman <iisaman@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/client.c')
-rw-r--r-- | fs/nfs/client.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 11eb9934c747..684b67771199 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c | |||
@@ -244,6 +244,11 @@ static void nfs_cb_idr_remove_locked(struct nfs_client *clp) | |||
244 | idr_remove(&cb_ident_idr, clp->cl_cb_ident); | 244 | idr_remove(&cb_ident_idr, clp->cl_cb_ident); |
245 | } | 245 | } |
246 | 246 | ||
247 | static void pnfs_init_server(struct nfs_server *server) | ||
248 | { | ||
249 | rpc_init_wait_queue(&server->roc_rpcwaitq, "pNFS ROC"); | ||
250 | } | ||
251 | |||
247 | #else | 252 | #else |
248 | static void nfs4_shutdown_client(struct nfs_client *clp) | 253 | static void nfs4_shutdown_client(struct nfs_client *clp) |
249 | { | 254 | { |
@@ -256,6 +261,11 @@ void nfs_cleanup_cb_ident_idr(void) | |||
256 | static void nfs_cb_idr_remove_locked(struct nfs_client *clp) | 261 | static void nfs_cb_idr_remove_locked(struct nfs_client *clp) |
257 | { | 262 | { |
258 | } | 263 | } |
264 | |||
265 | static void pnfs_init_server(struct nfs_server *server) | ||
266 | { | ||
267 | } | ||
268 | |||
259 | #endif /* CONFIG_NFS_V4 */ | 269 | #endif /* CONFIG_NFS_V4 */ |
260 | 270 | ||
261 | /* | 271 | /* |
@@ -1024,6 +1034,8 @@ static struct nfs_server *nfs_alloc_server(void) | |||
1024 | return NULL; | 1034 | return NULL; |
1025 | } | 1035 | } |
1026 | 1036 | ||
1037 | pnfs_init_server(server); | ||
1038 | |||
1027 | return server; | 1039 | return server; |
1028 | } | 1040 | } |
1029 | 1041 | ||