+++ /dev/null
-From: Joel Becker <joel.becker@oracle.com>
-Subject: ocfs2: Make cached block reads the common case.
-Patch-mainline: 2.6.28
-
-ocfs2_read_blocks() currently requires the CACHED flag for cached I/O.
-However, that's the common case. Let's flip it around and provide an
-IGNORE_CACHE flag for the special users. This has the added benefit of
-cleaning up the code some (ignore_cache takes on its special meaning
-earlier in the loop).
-
-Signed-off-by: Joel Becker <joel.becker@oracle.com>
-Signed-off-by: Mark Fasheh <mfasheh@suse.com>
----
- fs/ocfs2/buffer_head_io.c | 19 +++++++++++--------
- fs/ocfs2/buffer_head_io.h | 4 ++--
- fs/ocfs2/dir.c | 2 +-
- fs/ocfs2/inode.c | 3 ++-
- fs/ocfs2/journal.c | 3 ++-
- fs/ocfs2/localalloc.c | 4 ++--
- fs/ocfs2/slot_map.c | 6 ++++--
- 7 files changed, 24 insertions(+), 17 deletions(-)
-
-Index: linux-2.6.27/fs/ocfs2/buffer_head_io.c
-===================================================================
---- linux-2.6.27.orig/fs/ocfs2/buffer_head_io.c
-+++ linux-2.6.27/fs/ocfs2/buffer_head_io.c
-@@ -181,7 +181,8 @@ int ocfs2_read_blocks(struct inode *inod
- inode, (unsigned long long)block, nr, flags);
-
- BUG_ON(!inode);
-- BUG_ON((flags & OCFS2_BH_READAHEAD) && !(flags & OCFS2_BH_CACHED));
-+ BUG_ON((flags & OCFS2_BH_READAHEAD) &&
-+ (flags & OCFS2_BH_IGNORE_CACHE));
-
- if (bhs == NULL) {
- status = -EINVAL;
-@@ -214,7 +215,7 @@ int ocfs2_read_blocks(struct inode *inod
- }
- }
- bh = bhs[i];
-- ignore_cache = 0;
-+ ignore_cache = (flags & OCFS2_BH_IGNORE_CACHE);
-
- /* There are three read-ahead cases here which we need to
- * be concerned with. All three assume a buffer has
-@@ -240,26 +241,27 @@ int ocfs2_read_blocks(struct inode *inod
- * before our is-it-in-flight check.
- */
-
-- if (flags & OCFS2_BH_CACHED &&
-- !ocfs2_buffer_uptodate(inode, bh)) {
-+ if (!ignore_cache && !ocfs2_buffer_uptodate(inode, bh)) {
- mlog(ML_UPTODATE,
- "bh (%llu), inode %llu not uptodate\n",
- (unsigned long long)bh->b_blocknr,
- (unsigned long long)OCFS2_I(inode)->ip_blkno);
-+ /* We're using ignore_cache here to say
-+ * "go to disk" */
- ignore_cache = 1;
- }
-
- /* XXX: Can we ever get this and *not* have the cached
- * flag set? */
- if (buffer_jbd(bh)) {
-- if (!(flags & OCFS2_BH_CACHED) || ignore_cache)
-+ if (ignore_cache)
- mlog(ML_BH_IO, "trying to sync read a jbd "
- "managed bh (blocknr = %llu)\n",
- (unsigned long long)bh->b_blocknr);
- continue;
- }
-
-- if (!(flags & OCFS2_BH_CACHED) || ignore_cache) {
-+ if (ignore_cache) {
- if (buffer_dirty(bh)) {
- /* This should probably be a BUG, or
- * at least return an error. */
-@@ -294,7 +296,7 @@ int ocfs2_read_blocks(struct inode *inod
- * previously read-ahead buffer may have
- * completed I/O while we were waiting for the
- * buffer lock. */
-- if ((flags & OCFS2_BH_CACHED)
-+ if (!(flags & OCFS2_BH_IGNORE_CACHE)
- && !(flags & OCFS2_BH_READAHEAD)
- && ocfs2_buffer_uptodate(inode, bh)) {
- unlock_buffer(bh);
-@@ -344,7 +346,8 @@ int ocfs2_read_blocks(struct inode *inod
-
- mlog(ML_BH_IO, "block=(%llu), nr=(%d), cached=%s, flags=0x%x\n",
- (unsigned long long)block, nr,
-- (!(flags & OCFS2_BH_CACHED) || ignore_cache) ? "no" : "yes", flags);
-+ ((flags & OCFS2_BH_IGNORE_CACHE) || ignore_cache) ? "no" : "yes",
-+ flags);
-
- bail:
-
-Index: linux-2.6.27/fs/ocfs2/buffer_head_io.h
-===================================================================
---- linux-2.6.27.orig/fs/ocfs2/buffer_head_io.h
-+++ linux-2.6.27/fs/ocfs2/buffer_head_io.h
-@@ -49,7 +49,7 @@ int ocfs2_read_blocks_sync(struct ocfs2_
- int ocfs2_write_super_or_backup(struct ocfs2_super *osb,
- struct buffer_head *bh);
-
--#define OCFS2_BH_CACHED 1
-+#define OCFS2_BH_IGNORE_CACHE 1
- #define OCFS2_BH_READAHEAD 8
-
- static inline int ocfs2_read_block(struct inode *inode, u64 off,
-@@ -63,7 +63,7 @@ static inline int ocfs2_read_block(struc
- goto bail;
- }
-
-- status = ocfs2_read_blocks(inode, off, 1, bh, OCFS2_BH_CACHED);
-+ status = ocfs2_read_blocks(inode, off, 1, bh, 0);
-
- bail:
- return status;
-Index: linux-2.6.27/fs/ocfs2/dir.c
-===================================================================
---- linux-2.6.27.orig/fs/ocfs2/dir.c
-+++ linux-2.6.27/fs/ocfs2/dir.c
-@@ -88,7 +88,7 @@ static struct buffer_head *ocfs2_bread(s
- struct buffer_head *bh = NULL;
- int tmperr;
- u64 p_blkno;
-- int readflags = OCFS2_BH_CACHED;
-+ int readflags = 0;
-
- if (reada)
- readflags |= OCFS2_BH_READAHEAD;
-Index: linux-2.6.27/fs/ocfs2/inode.c
-===================================================================
---- linux-2.6.27.orig/fs/ocfs2/inode.c
-+++ linux-2.6.27/fs/ocfs2/inode.c
-@@ -461,7 +461,8 @@ static int ocfs2_read_locked_inode(struc
- }
-
- if (can_lock)
-- status = ocfs2_read_blocks(inode, args->fi_blkno, 1, &bh, 0);
-+ status = ocfs2_read_blocks(inode, args->fi_blkno, 1, &bh,
-+ OCFS2_BH_IGNORE_CACHE);
- else
- status = ocfs2_read_blocks_sync(osb, args->fi_blkno, 1, &bh);
- if (status < 0) {
-Index: linux-2.6.27/fs/ocfs2/journal.c
-===================================================================
---- linux-2.6.27.orig/fs/ocfs2/journal.c
-+++ linux-2.6.27/fs/ocfs2/journal.c
-@@ -1134,7 +1134,8 @@ static int ocfs2_read_journal_inode(stru
- }
- SET_INODE_JOURNAL(inode);
-
-- status = ocfs2_read_blocks(inode, OCFS2_I(inode)->ip_blkno, 1, bh, 0);
-+ status = ocfs2_read_blocks(inode, OCFS2_I(inode)->ip_blkno, 1, bh,
-+ OCFS2_BH_IGNORE_CACHE);
- if (status < 0) {
- mlog_errno(status);
- goto bail;
-Index: linux-2.6.27/fs/ocfs2/localalloc.c
-===================================================================
---- linux-2.6.27.orig/fs/ocfs2/localalloc.c
-+++ linux-2.6.27/fs/ocfs2/localalloc.c
-@@ -249,7 +249,7 @@ int ocfs2_load_local_alloc(struct ocfs2_
- }
-
- status = ocfs2_read_blocks(inode, OCFS2_I(inode)->ip_blkno, 1,
-- &alloc_bh, 0);
-+ &alloc_bh, OCFS2_BH_IGNORE_CACHE);
- if (status < 0) {
- mlog_errno(status);
- goto bail;
-@@ -460,7 +460,7 @@ int ocfs2_begin_local_alloc_recovery(str
- mutex_lock(&inode->i_mutex);
-
- status = ocfs2_read_blocks(inode, OCFS2_I(inode)->ip_blkno, 1,
-- &alloc_bh, 0);
-+ &alloc_bh, OCFS2_BH_IGNORE_CACHE);
- if (status < 0) {
- mlog_errno(status);
- goto bail;
-Index: linux-2.6.27/fs/ocfs2/slot_map.c
-===================================================================
---- linux-2.6.27.orig/fs/ocfs2/slot_map.c
-+++ linux-2.6.27/fs/ocfs2/slot_map.c
-@@ -150,7 +150,8 @@ int ocfs2_refresh_slot_info(struct ocfs2
- * be !NULL. Thus, ocfs2_read_blocks() will ignore blocknr. If
- * this is not true, the read of -1 (UINT64_MAX) will fail.
- */
-- ret = ocfs2_read_blocks(si->si_inode, -1, si->si_blocks, si->si_bh, 0);
-+ ret = ocfs2_read_blocks(si->si_inode, -1, si->si_blocks, si->si_bh,
-+ OCFS2_BH_IGNORE_CACHE);
- if (ret == 0) {
- spin_lock(&osb->osb_lock);
- ocfs2_update_slot_info(si);
-@@ -403,7 +404,8 @@ static int ocfs2_map_slot_buffers(struct
- (unsigned long long)blkno);
-
- bh = NULL; /* Acquire a fresh bh */
-- status = ocfs2_read_blocks(si->si_inode, blkno, 1, &bh, 0);
-+ status = ocfs2_read_blocks(si->si_inode, blkno, 1, &bh,
-+ OCFS2_BH_IGNORE_CACHE);
- if (status < 0) {
- mlog_errno(status);
- goto bail;