Skip to content

Commit

Permalink
NFSv4.1: Fix another refcount issue in pnfs_find_alloc_layout
Browse files Browse the repository at this point in the history
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
  • Loading branch information
Trond Myklebust authored and Trond Myklebust committed Oct 2, 2012
1 parent ae2bb03 commit 251ec41
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions fs/nfs/pnfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -907,18 +907,19 @@ pnfs_find_alloc_layout(struct inode *ino,

dprintk("%s Begin ino=%p layout=%p\n", __func__, ino, nfsi->layout);

if (nfsi->layout) {
pnfs_get_layout_hdr(nfsi->layout);
return nfsi->layout;
}
if (nfsi->layout != NULL)
goto out_existing;
spin_unlock(&ino->i_lock);
new = alloc_init_layout_hdr(ino, ctx, gfp_flags);
spin_lock(&ino->i_lock);

if (likely(nfsi->layout == NULL)) /* Won the race? */
if (likely(nfsi->layout == NULL)) { /* Won the race? */
nfsi->layout = new;
else
pnfs_free_layout_hdr(new);
return new;
}
pnfs_free_layout_hdr(new);
out_existing:
pnfs_get_layout_hdr(nfsi->layout);
return nfsi->layout;
}

Expand Down

0 comments on commit 251ec41

Please sign in to comment.