aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_log_recover.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_log_recover.c')
-rw-r--r--fs/xfs/xfs_log_recover.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index f1220ec1896..0de08e36631 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -121,6 +121,10 @@ xlog_put_bp(
121 xfs_buf_free(bp); 121 xfs_buf_free(bp);
122} 122}
123 123
124/*
125 * Return the address of the start of the given block number's data
126 * in a log buffer. The buffer covers a log sector-aligned region.
127 */
124STATIC xfs_caddr_t 128STATIC xfs_caddr_t
125xlog_align( 129xlog_align(
126 xlog_t *log, 130 xlog_t *log,
@@ -128,14 +132,14 @@ xlog_align(
128 int nbblks, 132 int nbblks,
129 xfs_buf_t *bp) 133 xfs_buf_t *bp)
130{ 134{
135 xfs_daddr_t offset;
131 xfs_caddr_t ptr; 136 xfs_caddr_t ptr;
132 137
133 if (log->l_sectBBsize == 1) 138 offset = blk_no & ((xfs_daddr_t) log->l_sectBBsize - 1);
134 return XFS_BUF_PTR(bp); 139 ptr = XFS_BUF_PTR(bp) + BBTOB(offset);
140
141 ASSERT(ptr + BBTOB(nbblks) <= XFS_BUF_PTR(bp) + XFS_BUF_SIZE(bp));
135 142
136 ptr = XFS_BUF_PTR(bp) + BBTOB((int)blk_no & log->l_sectbb_mask);
137 ASSERT(XFS_BUF_SIZE(bp) >=
138 BBTOB(nbblks + (blk_no & log->l_sectbb_mask)));
139 return ptr; 143 return ptr;
140} 144}
141 145