From: Dave Chinner <david@fromorbit.com>
To: xfs@oss.sgi.com
Subject: [PATCH 20/25] xfs: Add verifiers to dir2 data readahead.
Date: Thu, 25 Oct 2012 17:34:09 +1100 [thread overview]
Message-ID: <1351146854-19343-21-git-send-email-david@fromorbit.com> (raw)
In-Reply-To: <1351146854-19343-1-git-send-email-david@fromorbit.com>
From: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
fs/xfs/xfs_da_btree.c | 4 ++--
fs/xfs/xfs_da_btree.h | 4 ++--
fs/xfs/xfs_dir2_data.c | 13 ++++++++++++-
fs/xfs/xfs_dir2_leaf.c | 11 +++++------
fs/xfs/xfs_dir2_priv.h | 2 ++
fs/xfs/xfs_file.c | 4 +++-
6 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c
index e950192..7656c14 100644
--- a/fs/xfs/xfs_da_btree.c
+++ b/fs/xfs/xfs_da_btree.c
@@ -2278,10 +2278,10 @@ xfs_da_reada_buf(
struct xfs_trans *trans,
struct xfs_inode *dp,
xfs_dablk_t bno,
+ xfs_daddr_t mappedbno,
int whichfork,
xfs_buf_iodone_t verifier)
{
- xfs_daddr_t mappedbno = -1;
struct xfs_buf_map map;
struct xfs_buf_map *mapp;
int nmap;
@@ -2289,7 +2289,7 @@ xfs_da_reada_buf(
mapp = ↦
nmap = 1;
- error = xfs_dabuf_map(trans, dp, bno, -1, whichfork,
+ error = xfs_dabuf_map(trans, dp, bno, mappedbno, whichfork,
&mapp, &nmap);
if (error) {
/* mapping a hole is not an error, but we don't continue */
diff --git a/fs/xfs/xfs_da_btree.h b/fs/xfs/xfs_da_btree.h
index 2d1bec4..521b008 100644
--- a/fs/xfs/xfs_da_btree.h
+++ b/fs/xfs/xfs_da_btree.h
@@ -231,8 +231,8 @@ int xfs_da_read_buf(struct xfs_trans *trans, struct xfs_inode *dp,
struct xfs_buf **bpp, int whichfork,
xfs_buf_iodone_t verifier);
xfs_daddr_t xfs_da_reada_buf(struct xfs_trans *trans, struct xfs_inode *dp,
- xfs_dablk_t bno, int whichfork,
- xfs_buf_iodone_t verifier);
+ xfs_dablk_t bno, xfs_daddr_t mapped_bno,
+ int whichfork, xfs_buf_iodone_t verifier);
int xfs_da_shrink_inode(xfs_da_args_t *args, xfs_dablk_t dead_blkno,
struct xfs_buf *dead_buf);
diff --git a/fs/xfs/xfs_dir2_data.c b/fs/xfs/xfs_dir2_data.c
index 43c8426..795cfdd 100644
--- a/fs/xfs/xfs_dir2_data.c
+++ b/fs/xfs/xfs_dir2_data.c
@@ -185,7 +185,7 @@ __xfs_dir2_data_check(
return 0;
}
-static void
+void
xfs_dir2_data_verify(
struct xfs_buf *bp)
{
@@ -217,6 +217,17 @@ xfs_dir2_data_read(
XFS_DATA_FORK, xfs_dir2_data_verify);
}
+int
+xfs_dir2_data_readahead(
+ struct xfs_trans *tp,
+ struct xfs_inode *dp,
+ xfs_dablk_t bno,
+ xfs_daddr_t mapped_bno)
+{
+ return xfs_da_reada_buf(tp, dp, bno, mapped_bno,
+ XFS_DATA_FORK, xfs_dir2_data_verify);
+}
+
/*
* Given a data block and an unused entry from that block,
* return the bestfree entry if any that corresponds to it.
diff --git a/fs/xfs/xfs_dir2_leaf.c b/fs/xfs/xfs_dir2_leaf.c
index 67cc21c..8a95547 100644
--- a/fs/xfs/xfs_dir2_leaf.c
+++ b/fs/xfs/xfs_dir2_leaf.c
@@ -972,11 +972,11 @@ xfs_dir2_leaf_readbuf(
*/
if (i > mip->ra_current &&
map[mip->ra_index].br_blockcount >= mp->m_dirblkfsbs) {
- xfs_buf_readahead(mp->m_ddev_targp,
+ xfs_dir2_data_readahead(NULL, dp,
+ map[mip->ra_index].br_startoff + mip->ra_offset,
XFS_FSB_TO_DADDR(mp,
map[mip->ra_index].br_startblock +
- mip->ra_offset),
- (int)BTOBB(mp->m_dirblksize), NULL);
+ mip->ra_offset));
mip->ra_current = i;
}
@@ -985,10 +985,9 @@ xfs_dir2_leaf_readbuf(
* use our mapping, but this is a very rare case.
*/
else if (i > mip->ra_current) {
- xfs_da_reada_buf(NULL, dp,
+ xfs_dir2_data_readahead(NULL, dp,
map[mip->ra_index].br_startoff +
- mip->ra_offset,
- XFS_DATA_FORK, NULL);
+ mip->ra_offset, -1);
mip->ra_current = i;
}
diff --git a/fs/xfs/xfs_dir2_priv.h b/fs/xfs/xfs_dir2_priv.h
index 1f42e81..aa06174 100644
--- a/fs/xfs/xfs_dir2_priv.h
+++ b/fs/xfs/xfs_dir2_priv.h
@@ -48,6 +48,8 @@ extern int xfs_dir2_leaf_to_block(struct xfs_da_args *args,
extern bool __xfs_dir2_data_check(struct xfs_inode *dp, struct xfs_buf *bp);
extern int xfs_dir2_data_read(struct xfs_trans *tp, struct xfs_inode *dp,
xfs_dablk_t bno, xfs_daddr_t mapped_bno, struct xfs_buf **bpp);
+extern int xfs_dir2_data_readahead(struct xfs_trans *tp, struct xfs_inode *dp,
+ xfs_dablk_t bno, xfs_daddr_t mapped_bno);
extern struct xfs_dir2_data_free *
xfs_dir2_data_freeinsert(struct xfs_dir2_data_hdr *hdr,
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index d949bad..2cc2361 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -31,6 +31,8 @@
#include "xfs_error.h"
#include "xfs_vnodeops.h"
#include "xfs_da_btree.h"
+#include "xfs_dir2_format.h"
+#include "xfs_dir2_priv.h"
#include "xfs_ioctl.h"
#include "xfs_trace.h"
@@ -890,7 +892,7 @@ xfs_dir_open(
*/
mode = xfs_ilock_map_shared(ip);
if (ip->i_d.di_nextents > 0)
- xfs_da_reada_buf(NULL, ip, 0, XFS_DATA_FORK, NULL);
+ xfs_dir2_data_readahead(NULL, ip, 0, -1);
xfs_iunlock(ip, mode);
return 0;
}
--
1.7.10
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2012-10-25 6:33 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-25 6:33 [PATCH 00/25, V3] xfs: metadata buffer verifiers Dave Chinner
2012-10-25 6:33 ` [PATCH 01/25] xfs: growfs: don't read garbage for new secondary superblocks Dave Chinner
2012-10-30 0:17 ` Phil White
2012-10-25 6:33 ` [PATCH 02/25] xfs: invalidate allocbt blocks moved to the free list Dave Chinner
2012-10-26 8:47 ` Christoph Hellwig
2012-10-30 0:22 ` Phil White
2012-10-25 6:33 ` [PATCH 03/25] xfs: make buffer read verication an IO completion function Dave Chinner
2012-10-30 0:29 ` Phil White
2012-10-30 0:45 ` Dave Chinner
2012-10-30 0:55 ` Phil White
2012-10-25 6:33 ` [PATCH 04/25] xfs: uncached buffer reads need to return an error Dave Chinner
2012-10-26 8:48 ` Christoph Hellwig
2012-10-30 0:36 ` Phil White
2012-10-25 6:33 ` [PATCH 05/25] xfs: verify superblocks as they are read from disk Dave Chinner
2012-10-30 0:48 ` Phil White
2012-10-25 6:33 ` [PATCH 06/25] xfs: verify AGF blocks " Dave Chinner
2012-10-30 0:51 ` Phil White
2012-10-25 6:33 ` [PATCH 07/25] xfs: verify AGI " Dave Chinner
2012-10-30 0:53 ` Phil White
2012-10-30 22:13 ` Dave Chinner
2012-10-25 6:33 ` [PATCH 08/25] xfs: verify AGFL " Dave Chinner
2012-10-30 1:00 ` Phil White
2012-10-25 6:33 ` [PATCH 09/25] xfs: verify inode buffers " Dave Chinner
2012-10-30 1:06 ` Phil White
2012-10-25 6:33 ` [PATCH 10/25] xfs: verify btree blocks " Dave Chinner
2012-10-30 1:14 ` Phil White
2012-10-25 6:34 ` [PATCH 11/25] xfs: verify dquot " Dave Chinner
2012-10-30 1:36 ` Phil White
2012-10-25 6:34 ` [PATCH 12/25] xfs: add verifier callback to directory read code Dave Chinner
2012-10-30 3:15 ` Phil White
2012-10-25 6:34 ` [PATCH 13/25] xfs: factor dir2 block read operations Dave Chinner
2012-10-30 3:23 ` Phil White
2012-10-30 22:16 ` Dave Chinner
2012-10-25 6:34 ` [PATCH 14/25] xfs: verify dir2 block format buffers Dave Chinner
2012-10-30 3:26 ` Phil White
2012-10-25 6:34 ` [PATCH 15/25] xfs: factor dir2 free block reading Dave Chinner
2012-10-30 13:14 ` Phil White
2012-10-25 6:34 ` [PATCH 16/25] xfs: factor out dir2 data " Dave Chinner
2012-10-30 13:21 ` Phil White
2012-10-25 6:34 ` [PATCH 17/25] xfs: factor dir2 leaf read Dave Chinner
2012-10-30 13:22 ` Phil White
2012-10-25 6:34 ` [PATCH 18/25] xfs: factor and verify attr leaf reads Dave Chinner
2012-10-30 13:26 ` Phil White
2012-10-25 6:34 ` [PATCH 19/25] xfs: add xfs_da_node verification Dave Chinner
2012-10-30 13:30 ` Phil White
2012-10-30 22:23 ` Dave Chinner
2012-10-31 0:23 ` Phil White
2012-10-31 0:50 ` Dave Chinner
2012-10-25 6:34 ` Dave Chinner [this message]
2012-10-30 13:31 ` [PATCH 20/25] xfs: Add verifiers to dir2 data readahead Phil White
2012-10-25 6:34 ` [PATCH 21/25] xfs: add buffer pre-write callback Dave Chinner
2012-10-26 8:50 ` Christoph Hellwig
2012-10-30 22:30 ` Dave Chinner
2012-10-31 10:20 ` Christoph Hellwig
2012-10-30 13:32 ` Phil White
2012-10-25 6:34 ` [PATCH 22/25] xfs: add pre-write metadata buffer verifier callbacks Dave Chinner
2012-10-30 13:34 ` Phil White
2012-10-25 6:34 ` [PATCH 23/25] xfs: connect up write verifiers to new buffers Dave Chinner
2012-10-30 13:39 ` Phil White
2012-10-30 22:34 ` Dave Chinner
2012-10-25 6:34 ` [PATCH 24/25] xfs: convert buffer verifiers to an ops structure Dave Chinner
2012-10-30 13:41 ` Phil White
2012-10-25 6:34 ` [PATCH 25/25] xfs: add write verifiers to log recovery Dave Chinner
2012-10-26 8:54 ` Christoph Hellwig
2012-10-26 20:31 ` Dave Chinner
2012-10-30 12:23 ` Christoph Hellwig
2012-10-30 22:08 ` Dave Chinner
2012-10-31 10:19 ` Christoph Hellwig
2012-10-30 13:44 ` Phil White
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1351146854-19343-21-git-send-email-david@fromorbit.com \
--to=david@fromorbit.com \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox