Skip to content

Commit

Permalink
nfsd4: modify fi_delegations under recall_lock
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
J. Bruce Fields committed Feb 14, 2011
1 parent 65bc58f commit 5d926e8
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions fs/nfsd/nfs4state.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,9 +277,9 @@ nfs4_close_delegation(struct nfs4_delegation *dp)
static void
unhash_delegation(struct nfs4_delegation *dp)
{
list_del_init(&dp->dl_perfile);
list_del_init(&dp->dl_perclnt);
spin_lock(&recall_lock);
list_del_init(&dp->dl_perfile);
list_del_init(&dp->dl_recall_lru);
spin_unlock(&recall_lock);
nfs4_close_delegation(dp);
Expand Down Expand Up @@ -2336,9 +2336,7 @@ static void nfsd_break_one_deleg(struct nfs4_delegation *dp)
* it's safe to take a reference: */
atomic_inc(&dp->dl_count);

spin_lock(&recall_lock);
list_add_tail(&dp->dl_recall_lru, &del_recall_lru);
spin_unlock(&recall_lock);

/* only place dl_time is set. protected by lock_flocks*/
dp->dl_time = get_seconds();
Expand All @@ -2363,8 +2361,10 @@ static void nfsd_break_deleg_cb(struct file_lock *fl)
*/
fl->fl_break_time = 0;

nfsd_break_one_deleg(dp);
spin_lock(&recall_lock);
dp->dl_file->fi_had_conflict = true;
nfsd_break_one_deleg(dp);
spin_unlock(&recall_lock);
}

static
Expand Down

0 comments on commit 5d926e8

Please sign in to comment.