diff options
Diffstat (limited to 'fs/nfs/pagelist.c')
-rw-r--r-- | fs/nfs/pagelist.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c index ed0db61f8543..2b5e769beb16 100644 --- a/fs/nfs/pagelist.c +++ b/fs/nfs/pagelist.c | |||
@@ -258,6 +258,7 @@ bool nfs_page_group_sync_on_bit(struct nfs_page *req, unsigned int bit) | |||
258 | static inline void | 258 | static inline void |
259 | nfs_page_group_init(struct nfs_page *req, struct nfs_page *prev) | 259 | nfs_page_group_init(struct nfs_page *req, struct nfs_page *prev) |
260 | { | 260 | { |
261 | struct inode *inode; | ||
261 | WARN_ON_ONCE(prev == req); | 262 | WARN_ON_ONCE(prev == req); |
262 | 263 | ||
263 | if (!prev) { | 264 | if (!prev) { |
@@ -276,12 +277,16 @@ nfs_page_group_init(struct nfs_page *req, struct nfs_page *prev) | |||
276 | * nfs_page_group_destroy is called */ | 277 | * nfs_page_group_destroy is called */ |
277 | kref_get(&req->wb_head->wb_kref); | 278 | kref_get(&req->wb_head->wb_kref); |
278 | 279 | ||
279 | /* grab extra ref if head request has extra ref from | 280 | /* grab extra ref and bump the request count if head request |
280 | * the write/commit path to handle handoff between write | 281 | * has extra ref from the write/commit path to handle handoff |
281 | * and commit lists */ | 282 | * between write and commit lists. */ |
282 | if (test_bit(PG_INODE_REF, &prev->wb_head->wb_flags)) { | 283 | if (test_bit(PG_INODE_REF, &prev->wb_head->wb_flags)) { |
284 | inode = page_file_mapping(req->wb_page)->host; | ||
283 | set_bit(PG_INODE_REF, &req->wb_flags); | 285 | set_bit(PG_INODE_REF, &req->wb_flags); |
284 | kref_get(&req->wb_kref); | 286 | kref_get(&req->wb_kref); |
287 | spin_lock(&inode->i_lock); | ||
288 | NFS_I(inode)->nrequests++; | ||
289 | spin_unlock(&inode->i_lock); | ||
285 | } | 290 | } |
286 | } | 291 | } |
287 | } | 292 | } |