|
@@ -1159,10 +1159,8 @@ static int ocfs2_force_read_journal(struct inode *inode)
|
|
|
int status = 0;
|
|
|
int i;
|
|
|
u64 v_blkno, p_blkno, p_blocks, num_blocks;
|
|
|
-#define CONCURRENT_JOURNAL_FILL 32ULL
|
|
|
- struct buffer_head *bhs[CONCURRENT_JOURNAL_FILL];
|
|
|
-
|
|
|
- memset(bhs, 0, sizeof(struct buffer_head *) * CONCURRENT_JOURNAL_FILL);
|
|
|
+ struct buffer_head *bh = NULL;
|
|
|
+ struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
|
|
|
|
|
|
num_blocks = ocfs2_blocks_for_bytes(inode->i_sb, i_size_read(inode));
|
|
|
v_blkno = 0;
|
|
@@ -1174,29 +1172,32 @@ static int ocfs2_force_read_journal(struct inode *inode)
|
|
|
goto bail;
|
|
|
}
|
|
|
|
|
|
- if (p_blocks > CONCURRENT_JOURNAL_FILL)
|
|
|
- p_blocks = CONCURRENT_JOURNAL_FILL;
|
|
|
-
|
|
|
- /* We are reading journal data which should not
|
|
|
- * be put in the uptodate cache */
|
|
|
- status = ocfs2_read_blocks_sync(OCFS2_SB(inode->i_sb),
|
|
|
- p_blkno, p_blocks, bhs);
|
|
|
- if (status < 0) {
|
|
|
- mlog_errno(status);
|
|
|
- goto bail;
|
|
|
- }
|
|
|
+ for (i = 0; i < p_blocks; i++, p_blkno++) {
|
|
|
+ bh = __find_get_block(osb->sb->s_bdev, p_blkno,
|
|
|
+ osb->sb->s_blocksize);
|
|
|
+ /* block not cached. */
|
|
|
+ if (!bh)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ brelse(bh);
|
|
|
+ bh = NULL;
|
|
|
+ /* We are reading journal data which should not
|
|
|
+ * be put in the uptodate cache.
|
|
|
+ */
|
|
|
+ status = ocfs2_read_blocks_sync(osb, p_blkno, 1, &bh);
|
|
|
+ if (status < 0) {
|
|
|
+ mlog_errno(status);
|
|
|
+ goto bail;
|
|
|
+ }
|
|
|
|
|
|
- for(i = 0; i < p_blocks; i++) {
|
|
|
- brelse(bhs[i]);
|
|
|
- bhs[i] = NULL;
|
|
|
+ brelse(bh);
|
|
|
+ bh = NULL;
|
|
|
}
|
|
|
|
|
|
v_blkno += p_blocks;
|
|
|
}
|
|
|
|
|
|
bail:
|
|
|
- for(i = 0; i < CONCURRENT_JOURNAL_FILL; i++)
|
|
|
- brelse(bhs[i]);
|
|
|
return status;
|
|
|
}
|
|
|
|