aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/blocklayout
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2014-08-21 11:09:28 -0500
committerTrond Myklebust <trond.myklebust@primarydata.com>2014-09-10 12:47:02 -0700
commitbe98fd0ac3dd45c1aa404b101caa37f9b317ab57 (patch)
tree5bccac582ae97e3b04af00d925b60e1fd1a5cfcc /fs/nfs/blocklayout
parentpnfs/blocklayout: improve GETDEVICEINFO error reporting (diff)
downloadlinux-dev-be98fd0ac3dd45c1aa404b101caa37f9b317ab57.tar.xz
linux-dev-be98fd0ac3dd45c1aa404b101caa37f9b317ab57.zip
pnfs/blocklayout: plug block queues
Make sure the block queue is plugged when performing pNFS blocklayout I/O. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/blocklayout')
-rw-r--r--fs/nfs/blocklayout/blocklayout.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
index 6c1a4212919d..5427ae766f06 100644
--- a/fs/nfs/blocklayout/blocklayout.c
+++ b/fs/nfs/blocklayout/blocklayout.c
@@ -255,6 +255,7 @@ bl_read_pagelist(struct nfs_pgio_header *hdr)
struct page **pages = hdr->args.pages;
int pg_index = hdr->args.pgbase >> PAGE_CACHE_SHIFT;
const bool is_dio = (header->dreq != NULL);
+ struct blk_plug plug;
dprintk("%s enter nr_pages %u offset %lld count %u\n", __func__,
hdr->page_array.npages, f_offset,
@@ -266,6 +267,8 @@ bl_read_pagelist(struct nfs_pgio_header *hdr)
par->pnfs_callback = bl_end_par_io_read;
/* At this point, we can no longer jump to use_mds */
+ blk_start_plug(&plug);
+
isect = (sector_t) (f_offset >> SECTOR_SHIFT);
/* Code assumes extents are page-aligned */
for (i = pg_index; i < hdr->page_array.npages; i++) {
@@ -342,6 +345,7 @@ out:
bl_put_extent(be);
bl_put_extent(cow_read);
bl_submit_bio(READ, bio);
+ blk_finish_plug(&plug);
put_parallel(par);
return PNFS_ATTEMPTED;
@@ -688,9 +692,12 @@ bl_write_pagelist(struct nfs_pgio_header *header, int sync)
u64 temp;
int npg_per_block =
NFS_SERVER(header->inode)->pnfs_blksize >> PAGE_CACHE_SHIFT;
+ struct blk_plug plug;
dprintk("%s enter, %Zu@%lld\n", __func__, count, offset);
+ blk_start_plug(&plug);
+
if (header->dreq != NULL &&
(!IS_ALIGNED(offset, NFS_SERVER(header->inode)->pnfs_blksize) ||
!IS_ALIGNED(count, NFS_SERVER(header->inode)->pnfs_blksize))) {
@@ -894,9 +901,11 @@ out:
bl_put_extent(be);
bl_put_extent(cow_read);
bl_submit_bio(WRITE, bio);
+ blk_finish_plug(&plug);
put_parallel(par);
return PNFS_ATTEMPTED;
out_mds:
+ blk_finish_plug(&plug);
bl_put_extent(be);
bl_put_extent(cow_read);
kfree(par);