aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2013-06-27 02:04:47 -0400
committerBen Myers <bpm@sgi.com>2013-06-27 14:27:24 -0400
commit34eefc06a06f496b92c3267a0601129a932c7174 (patch)
tree5c5d3c93612963b5f6fe5158ac6a3a5ea26e7b7c /fs
parentcbb2864aa48977205c76291ba5a23331393b2578 (diff)
xfs: plug directory buffer readahead
Similar to bulkstat inode chunk readahead, we need to plug directory data buffer readahead during getdents to ensure that we can merge adjacent readahead requests and sort out of order requests optimally before they are dispatched. This improves the readahead efficiency and reduces the IO load it generates as the IO patterns are significantly better for both contiguous and fragmented directories. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/xfs/xfs_dir2_leaf.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/xfs/xfs_dir2_leaf.c b/fs/xfs/xfs_dir2_leaf.c
index da71a1819d78..bb22aac9fc01 100644
--- a/fs/xfs/xfs_dir2_leaf.c
+++ b/fs/xfs/xfs_dir2_leaf.c
@@ -1108,6 +1108,7 @@ xfs_dir2_leaf_readbuf(
1108 struct xfs_mount *mp = dp->i_mount; 1108 struct xfs_mount *mp = dp->i_mount;
1109 struct xfs_buf *bp = *bpp; 1109 struct xfs_buf *bp = *bpp;
1110 struct xfs_bmbt_irec *map = mip->map; 1110 struct xfs_bmbt_irec *map = mip->map;
1111 struct blk_plug plug;
1111 int error = 0; 1112 int error = 0;
1112 int length; 1113 int length;
1113 int i; 1114 int i;
@@ -1236,6 +1237,7 @@ xfs_dir2_leaf_readbuf(
1236 /* 1237 /*
1237 * Do we need more readahead? 1238 * Do we need more readahead?
1238 */ 1239 */
1240 blk_start_plug(&plug);
1239 for (mip->ra_index = mip->ra_offset = i = 0; 1241 for (mip->ra_index = mip->ra_offset = i = 0;
1240 mip->ra_want > mip->ra_current && i < mip->map_blocks; 1242 mip->ra_want > mip->ra_current && i < mip->map_blocks;
1241 i += mp->m_dirblkfsbs) { 1243 i += mp->m_dirblkfsbs) {
@@ -1287,6 +1289,7 @@ xfs_dir2_leaf_readbuf(
1287 } 1289 }
1288 } 1290 }
1289 } 1291 }
1292 blk_finish_plug(&plug);
1290 1293
1291out: 1294out:
1292 *bpp = bp; 1295 *bpp = bp;