diff options
author | Weston Andros Adamson <dros@primarydata.com> | 2014-07-17 20:42:19 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2014-08-03 17:05:26 -0400 |
commit | 411a99adffb4f993eee29759f744de01487044ac (patch) | |
tree | cea4af52189a179a8001d5ae5c2d5ed28bd5f7d7 /fs/nfs/filelayout/filelayout.c | |
parent | e6cf82d1830f5e16a10d566f58db70f297ba5da8 (diff) |
nfs: clear_request_commit while holding i_lock
Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/filelayout/filelayout.c')
-rw-r--r-- | fs/nfs/filelayout/filelayout.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c index 524e66f6bb9c..1359c4a27393 100644 --- a/fs/nfs/filelayout/filelayout.c +++ b/fs/nfs/filelayout/filelayout.c | |||
@@ -1009,6 +1009,7 @@ static u32 select_bucket_index(struct nfs4_filelayout_segment *fl, u32 j) | |||
1009 | 1009 | ||
1010 | /* The generic layer is about to remove the req from the commit list. | 1010 | /* The generic layer is about to remove the req from the commit list. |
1011 | * If this will make the bucket empty, it will need to put the lseg reference. | 1011 | * If this will make the bucket empty, it will need to put the lseg reference. |
1012 | * Note this is must be called holding the inode (/cinfo) lock | ||
1012 | */ | 1013 | */ |
1013 | static void | 1014 | static void |
1014 | filelayout_clear_request_commit(struct nfs_page *req, | 1015 | filelayout_clear_request_commit(struct nfs_page *req, |
@@ -1016,7 +1017,6 @@ filelayout_clear_request_commit(struct nfs_page *req, | |||
1016 | { | 1017 | { |
1017 | struct pnfs_layout_segment *freeme = NULL; | 1018 | struct pnfs_layout_segment *freeme = NULL; |
1018 | 1019 | ||
1019 | spin_lock(cinfo->lock); | ||
1020 | if (!test_and_clear_bit(PG_COMMIT_TO_DS, &req->wb_flags)) | 1020 | if (!test_and_clear_bit(PG_COMMIT_TO_DS, &req->wb_flags)) |
1021 | goto out; | 1021 | goto out; |
1022 | cinfo->ds->nwritten--; | 1022 | cinfo->ds->nwritten--; |
@@ -1031,8 +1031,7 @@ filelayout_clear_request_commit(struct nfs_page *req, | |||
1031 | } | 1031 | } |
1032 | out: | 1032 | out: |
1033 | nfs_request_remove_commit_list(req, cinfo); | 1033 | nfs_request_remove_commit_list(req, cinfo); |
1034 | spin_unlock(cinfo->lock); | 1034 | pnfs_put_lseg_async(freeme); |
1035 | pnfs_put_lseg(freeme); | ||
1036 | } | 1035 | } |
1037 | 1036 | ||
1038 | static void | 1037 | static void |