diff options
Diffstat (limited to 'fs/xfs/xfs_rw.c')
-rw-r--r-- | fs/xfs/xfs_rw.c | 30 |
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 | */ | ||
343 | xfs_extlen_t | ||
344 | xfs_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 | } | ||