Merge tag 'iommu-updates-v4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/joro...
[cascardo/linux.git] / fs / ocfs2 / journal.c
index e607419..a244f14 100644 (file)
@@ -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;
 }