aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_rw.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_rw.c')
-rw-r--r--fs/xfs/xfs_rw.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/fs/xfs/xfs_rw.c b/fs/xfs/xfs_rw.c
index 3f816ad7ff19..4c199d18f850 100644
--- a/fs/xfs/xfs_rw.c
+++ b/fs/xfs/xfs_rw.c
@@ -277,10 +277,10 @@ xfs_read_buf(
277 xfs_buf_t *bp; 277 xfs_buf_t *bp;
278 int error; 278 int error;
279 279
280 if (flags) 280 if (!flags)
281 bp = xfs_buf_read_flags(target, blkno, len, flags); 281 flags = XBF_LOCK | XBF_MAPPED;
282 else 282
283 bp = xfs_buf_read(target, blkno, len, flags); 283 bp = xfs_buf_read(target, blkno, len, flags);
284 if (!bp) 284 if (!bp)
285 return XFS_ERROR(EIO); 285 return XFS_ERROR(EIO);
286 error = XFS_BUF_GETERROR(bp); 286 error = XFS_BUF_GETERROR(bp);
@@ -336,3 +336,25 @@ xfs_bwrite(
336 } 336 }
337 return (error); 337 return (error);
338} 338}
339
340/*
341 * helper function to extract extent size hint from inode
342 */
343xfs_extlen_t
344xfs_get_extsz_hint(
345 struct xfs_inode *ip)
346{
347 xfs_extlen_t extsz;
348
349 if (unlikely(XFS_IS_REALTIME_INODE(ip))) {
350 extsz = (ip->i_d.di_flags & XFS_DIFLAG_EXTSIZE)
351 ? ip->i_d.di_extsize
352 : ip->i_mount->m_sb.sb_rextsize;
353 ASSERT(extsz);
354 } else {
355 extsz = (ip->i_d.di_flags & XFS_DIFLAG_EXTSIZE)
356 ? ip->i_d.di_extsize : 0;
357 }
358
359 return extsz;
360}