diff options
Diffstat (limited to 'fs/nfs/pnfs.c')
-rw-r--r-- | fs/nfs/pnfs.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 539b94cb6c0f..0f42e02436ee 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c | |||
@@ -1064,19 +1064,21 @@ pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev, | |||
1064 | gfp_flags = GFP_NOFS; | 1064 | gfp_flags = GFP_NOFS; |
1065 | } | 1065 | } |
1066 | 1066 | ||
1067 | if (pgio->pg_count == prev->wb_bytes) { | 1067 | if (pgio->pg_lseg == NULL) { |
1068 | if (pgio->pg_count != prev->wb_bytes) | ||
1069 | return true; | ||
1068 | /* This is first coelesce call for a series of nfs_pages */ | 1070 | /* This is first coelesce call for a series of nfs_pages */ |
1069 | pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode, | 1071 | pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode, |
1070 | prev->wb_context, | 1072 | prev->wb_context, |
1071 | req_offset(req), | 1073 | req_offset(prev), |
1072 | pgio->pg_count, | 1074 | pgio->pg_count, |
1073 | access_type, | 1075 | access_type, |
1074 | gfp_flags); | 1076 | gfp_flags); |
1075 | return true; | 1077 | if (pgio->pg_lseg == NULL) |
1078 | return true; | ||
1076 | } | 1079 | } |
1077 | 1080 | ||
1078 | if (pgio->pg_lseg && | 1081 | if (req_offset(req) > end_offset(pgio->pg_lseg->pls_range.offset, |
1079 | req_offset(req) > end_offset(pgio->pg_lseg->pls_range.offset, | ||
1080 | pgio->pg_lseg->pls_range.length)) | 1082 | pgio->pg_lseg->pls_range.length)) |
1081 | return false; | 1083 | return false; |
1082 | 1084 | ||