diff options
author | J. Bruce Fields <bfields@redhat.com> | 2011-02-07 16:53:46 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2011-02-14 10:35:19 -0500 |
commit | 5d926e8c2f46dc09f4ddde86644a5f1d0726a470 (patch) | |
tree | ef30c949c75ee204c3108159caf9eeb22daf8418 /fs/nfsd/nfs4state.c | |
parent | 65bc58f5187e2ff4011ef1bd3082e83cd1b036f1 (diff) |
nfsd4: modify fi_delegations under recall_lock
Modify fi_delegations only under the recall_lock, allowing us to use
that list on lease breaks.
Also some trivial cleanup to simplify later changes.
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r-- | fs/nfsd/nfs4state.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index d978192838a3..8b6cd3cf4835 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -277,9 +277,9 @@ nfs4_close_delegation(struct nfs4_delegation *dp) | |||
277 | static void | 277 | static void |
278 | unhash_delegation(struct nfs4_delegation *dp) | 278 | unhash_delegation(struct nfs4_delegation *dp) |
279 | { | 279 | { |
280 | list_del_init(&dp->dl_perfile); | ||
281 | list_del_init(&dp->dl_perclnt); | 280 | list_del_init(&dp->dl_perclnt); |
282 | spin_lock(&recall_lock); | 281 | spin_lock(&recall_lock); |
282 | list_del_init(&dp->dl_perfile); | ||
283 | list_del_init(&dp->dl_recall_lru); | 283 | list_del_init(&dp->dl_recall_lru); |
284 | spin_unlock(&recall_lock); | 284 | spin_unlock(&recall_lock); |
285 | nfs4_close_delegation(dp); | 285 | nfs4_close_delegation(dp); |
@@ -2336,9 +2336,7 @@ static void nfsd_break_one_deleg(struct nfs4_delegation *dp) | |||
2336 | * it's safe to take a reference: */ | 2336 | * it's safe to take a reference: */ |
2337 | atomic_inc(&dp->dl_count); | 2337 | atomic_inc(&dp->dl_count); |
2338 | 2338 | ||
2339 | spin_lock(&recall_lock); | ||
2340 | list_add_tail(&dp->dl_recall_lru, &del_recall_lru); | 2339 | list_add_tail(&dp->dl_recall_lru, &del_recall_lru); |
2341 | spin_unlock(&recall_lock); | ||
2342 | 2340 | ||
2343 | /* only place dl_time is set. protected by lock_flocks*/ | 2341 | /* only place dl_time is set. protected by lock_flocks*/ |
2344 | dp->dl_time = get_seconds(); | 2342 | dp->dl_time = get_seconds(); |
@@ -2363,8 +2361,10 @@ static void nfsd_break_deleg_cb(struct file_lock *fl) | |||
2363 | */ | 2361 | */ |
2364 | fl->fl_break_time = 0; | 2362 | fl->fl_break_time = 0; |
2365 | 2363 | ||
2366 | nfsd_break_one_deleg(dp); | 2364 | spin_lock(&recall_lock); |
2367 | dp->dl_file->fi_had_conflict = true; | 2365 | dp->dl_file->fi_had_conflict = true; |
2366 | nfsd_break_one_deleg(dp); | ||
2367 | spin_unlock(&recall_lock); | ||
2368 | } | 2368 | } |
2369 | 2369 | ||
2370 | static | 2370 | static |