diff options
Diffstat (limited to 'fs/xfs')
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.h | 4 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_super.c | 7 | ||||
| -rw-r--r-- | fs/xfs/quota/xfs_qm_bhv.c | 19 | ||||
| -rw-r--r-- | fs/xfs/xfs_inode.c | 17 | ||||
| -rw-r--r-- | fs/xfs/xfs_log.c | 12 | ||||
| -rw-r--r-- | fs/xfs/xfs_vfsops.c | 2 |
6 files changed, 39 insertions, 22 deletions
diff --git a/fs/xfs/linux-2.6/xfs_buf.h b/fs/xfs/linux-2.6/xfs_buf.h index ceda3a2859d2..7858703ed84c 100644 --- a/fs/xfs/linux-2.6/xfs_buf.h +++ b/fs/xfs/linux-2.6/xfs_buf.h | |||
| @@ -246,8 +246,8 @@ extern void xfs_buf_trace(xfs_buf_t *, char *, void *, void *); | |||
| 246 | #define BUF_BUSY XBF_DONT_BLOCK | 246 | #define BUF_BUSY XBF_DONT_BLOCK |
| 247 | 247 | ||
| 248 | #define XFS_BUF_BFLAGS(bp) ((bp)->b_flags) | 248 | #define XFS_BUF_BFLAGS(bp) ((bp)->b_flags) |
| 249 | #define XFS_BUF_ZEROFLAGS(bp) \ | 249 | #define XFS_BUF_ZEROFLAGS(bp) ((bp)->b_flags &= \ |
| 250 | ((bp)->b_flags &= ~(XBF_READ|XBF_WRITE|XBF_ASYNC|XBF_DELWRI)) | 250 | ~(XBF_READ|XBF_WRITE|XBF_ASYNC|XBF_DELWRI|XBF_ORDERED)) |
| 251 | 251 | ||
| 252 | #define XFS_BUF_STALE(bp) ((bp)->b_flags |= XFS_B_STALE) | 252 | #define XFS_BUF_STALE(bp) ((bp)->b_flags |= XFS_B_STALE) |
| 253 | #define XFS_BUF_UNSTALE(bp) ((bp)->b_flags &= ~XFS_B_STALE) | 253 | #define XFS_BUF_UNSTALE(bp) ((bp)->b_flags &= ~XFS_B_STALE) |
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index 9bdef9d51900..4754f342a5d3 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c | |||
| @@ -314,6 +314,13 @@ xfs_mountfs_check_barriers(xfs_mount_t *mp) | |||
| 314 | return; | 314 | return; |
| 315 | } | 315 | } |
| 316 | 316 | ||
| 317 | if (xfs_readonly_buftarg(mp->m_ddev_targp)) { | ||
| 318 | xfs_fs_cmn_err(CE_NOTE, mp, | ||
| 319 | "Disabling barriers, underlying device is readonly"); | ||
| 320 | mp->m_flags &= ~XFS_MOUNT_BARRIER; | ||
| 321 | return; | ||
| 322 | } | ||
| 323 | |||
| 317 | error = xfs_barrier_test(mp); | 324 | error = xfs_barrier_test(mp); |
| 318 | if (error) { | 325 | if (error) { |
| 319 | xfs_fs_cmn_err(CE_NOTE, mp, | 326 | xfs_fs_cmn_err(CE_NOTE, mp, |
diff --git a/fs/xfs/quota/xfs_qm_bhv.c b/fs/xfs/quota/xfs_qm_bhv.c index e95e99f7168f..f137856c3261 100644 --- a/fs/xfs/quota/xfs_qm_bhv.c +++ b/fs/xfs/quota/xfs_qm_bhv.c | |||
| @@ -217,17 +217,24 @@ xfs_qm_statvfs( | |||
| 217 | return 0; | 217 | return 0; |
| 218 | dp = &dqp->q_core; | 218 | dp = &dqp->q_core; |
| 219 | 219 | ||
| 220 | limit = dp->d_blk_softlimit ? dp->d_blk_softlimit : dp->d_blk_hardlimit; | 220 | limit = dp->d_blk_softlimit ? |
| 221 | be64_to_cpu(dp->d_blk_softlimit) : | ||
| 222 | be64_to_cpu(dp->d_blk_hardlimit); | ||
| 221 | if (limit && statp->f_blocks > limit) { | 223 | if (limit && statp->f_blocks > limit) { |
| 222 | statp->f_blocks = limit; | 224 | statp->f_blocks = limit; |
| 223 | statp->f_bfree = (statp->f_blocks > dp->d_bcount) ? | 225 | statp->f_bfree = |
| 224 | (statp->f_blocks - dp->d_bcount) : 0; | 226 | (statp->f_blocks > be64_to_cpu(dp->d_bcount)) ? |
| 227 | (statp->f_blocks - be64_to_cpu(dp->d_bcount)) : 0; | ||
| 225 | } | 228 | } |
| 226 | limit = dp->d_ino_softlimit ? dp->d_ino_softlimit : dp->d_ino_hardlimit; | 229 | |
| 230 | limit = dp->d_ino_softlimit ? | ||
| 231 | be64_to_cpu(dp->d_ino_softlimit) : | ||
| 232 | be64_to_cpu(dp->d_ino_hardlimit); | ||
| 227 | if (limit && statp->f_files > limit) { | 233 | if (limit && statp->f_files > limit) { |
| 228 | statp->f_files = limit; | 234 | statp->f_files = limit; |
| 229 | statp->f_ffree = (statp->f_files > dp->d_icount) ? | 235 | statp->f_ffree = |
| 230 | (statp->f_ffree - dp->d_icount) : 0; | 236 | (statp->f_files > be64_to_cpu(dp->d_icount)) ? |
| 237 | (statp->f_ffree - be64_to_cpu(dp->d_icount)) : 0; | ||
| 231 | } | 238 | } |
| 232 | 239 | ||
| 233 | xfs_qm_dqput(dqp); | 240 | xfs_qm_dqput(dqp); |
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 86c1bf0bba9e..1f8ecff8553a 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
| @@ -334,10 +334,9 @@ xfs_itobp( | |||
| 334 | #if !defined(__KERNEL__) | 334 | #if !defined(__KERNEL__) |
| 335 | ni = 0; | 335 | ni = 0; |
| 336 | #elif defined(DEBUG) | 336 | #elif defined(DEBUG) |
| 337 | ni = (imap_flags & XFS_IMAP_BULKSTAT) ? 0 : | 337 | ni = BBTOB(imap.im_len) >> mp->m_sb.sb_inodelog; |
| 338 | (BBTOB(imap.im_len) >> mp->m_sb.sb_inodelog); | ||
| 339 | #else /* usual case */ | 338 | #else /* usual case */ |
| 340 | ni = (imap_flags & XFS_IMAP_BULKSTAT) ? 0 : 1; | 339 | ni = 1; |
| 341 | #endif | 340 | #endif |
| 342 | 341 | ||
| 343 | for (i = 0; i < ni; i++) { | 342 | for (i = 0; i < ni; i++) { |
| @@ -348,11 +347,15 @@ xfs_itobp( | |||
| 348 | (i << mp->m_sb.sb_inodelog)); | 347 | (i << mp->m_sb.sb_inodelog)); |
| 349 | di_ok = INT_GET(dip->di_core.di_magic, ARCH_CONVERT) == XFS_DINODE_MAGIC && | 348 | di_ok = INT_GET(dip->di_core.di_magic, ARCH_CONVERT) == XFS_DINODE_MAGIC && |
| 350 | XFS_DINODE_GOOD_VERSION(INT_GET(dip->di_core.di_version, ARCH_CONVERT)); | 349 | XFS_DINODE_GOOD_VERSION(INT_GET(dip->di_core.di_version, ARCH_CONVERT)); |
| 351 | if (unlikely(XFS_TEST_ERROR(!di_ok, mp, XFS_ERRTAG_ITOBP_INOTOBP, | 350 | if (unlikely(XFS_TEST_ERROR(!di_ok, mp, |
| 352 | XFS_RANDOM_ITOBP_INOTOBP))) { | 351 | XFS_ERRTAG_ITOBP_INOTOBP, |
| 352 | XFS_RANDOM_ITOBP_INOTOBP))) { | ||
| 353 | if (imap_flags & XFS_IMAP_BULKSTAT) { | ||
| 354 | xfs_trans_brelse(tp, bp); | ||
| 355 | return XFS_ERROR(EINVAL); | ||
| 356 | } | ||
| 353 | #ifdef DEBUG | 357 | #ifdef DEBUG |
| 354 | if (!(imap_flags & XFS_IMAP_BULKSTAT)) | 358 | cmn_err(CE_ALERT, |
| 355 | cmn_err(CE_ALERT, | ||
| 356 | "Device %s - bad inode magic/vsn " | 359 | "Device %s - bad inode magic/vsn " |
| 357 | "daddr %lld #%d (magic=%x)", | 360 | "daddr %lld #%d (magic=%x)", |
| 358 | XFS_BUFTARG_NAME(mp->m_ddev_targp), | 361 | XFS_BUFTARG_NAME(mp->m_ddev_targp), |
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index e730328636c3..21ac1a67e3e0 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c | |||
| @@ -1413,7 +1413,7 @@ xlog_sync(xlog_t *log, | |||
| 1413 | ops = iclog->ic_header.h_num_logops; | 1413 | ops = iclog->ic_header.h_num_logops; |
| 1414 | INT_SET(iclog->ic_header.h_num_logops, ARCH_CONVERT, ops); | 1414 | INT_SET(iclog->ic_header.h_num_logops, ARCH_CONVERT, ops); |
| 1415 | 1415 | ||
| 1416 | bp = iclog->ic_bp; | 1416 | bp = iclog->ic_bp; |
| 1417 | ASSERT(XFS_BUF_FSPRIVATE2(bp, unsigned long) == (unsigned long)1); | 1417 | ASSERT(XFS_BUF_FSPRIVATE2(bp, unsigned long) == (unsigned long)1); |
| 1418 | XFS_BUF_SET_FSPRIVATE2(bp, (unsigned long)2); | 1418 | XFS_BUF_SET_FSPRIVATE2(bp, (unsigned long)2); |
| 1419 | XFS_BUF_SET_ADDR(bp, BLOCK_LSN(INT_GET(iclog->ic_header.h_lsn, ARCH_CONVERT))); | 1419 | XFS_BUF_SET_ADDR(bp, BLOCK_LSN(INT_GET(iclog->ic_header.h_lsn, ARCH_CONVERT))); |
| @@ -1430,15 +1430,14 @@ xlog_sync(xlog_t *log, | |||
| 1430 | } | 1430 | } |
| 1431 | XFS_BUF_SET_PTR(bp, (xfs_caddr_t) &(iclog->ic_header), count); | 1431 | XFS_BUF_SET_PTR(bp, (xfs_caddr_t) &(iclog->ic_header), count); |
| 1432 | XFS_BUF_SET_FSPRIVATE(bp, iclog); /* save for later */ | 1432 | XFS_BUF_SET_FSPRIVATE(bp, iclog); /* save for later */ |
| 1433 | XFS_BUF_ZEROFLAGS(bp); | ||
| 1433 | XFS_BUF_BUSY(bp); | 1434 | XFS_BUF_BUSY(bp); |
| 1434 | XFS_BUF_ASYNC(bp); | 1435 | XFS_BUF_ASYNC(bp); |
| 1435 | /* | 1436 | /* |
| 1436 | * Do an ordered write for the log block. | 1437 | * Do an ordered write for the log block. |
| 1437 | * | 1438 | * Its unnecessary to flush the first split block in the log wrap case. |
| 1438 | * It may not be needed to flush the first split block in the log wrap | ||
| 1439 | * case, but do it anyways to be safe -AK | ||
| 1440 | */ | 1439 | */ |
| 1441 | if (log->l_mp->m_flags & XFS_MOUNT_BARRIER) | 1440 | if (!split && (log->l_mp->m_flags & XFS_MOUNT_BARRIER)) |
| 1442 | XFS_BUF_ORDERED(bp); | 1441 | XFS_BUF_ORDERED(bp); |
| 1443 | 1442 | ||
| 1444 | ASSERT(XFS_BUF_ADDR(bp) <= log->l_logBBsize-1); | 1443 | ASSERT(XFS_BUF_ADDR(bp) <= log->l_logBBsize-1); |
| @@ -1460,7 +1459,7 @@ xlog_sync(xlog_t *log, | |||
| 1460 | return error; | 1459 | return error; |
| 1461 | } | 1460 | } |
| 1462 | if (split) { | 1461 | if (split) { |
| 1463 | bp = iclog->ic_log->l_xbuf; | 1462 | bp = iclog->ic_log->l_xbuf; |
| 1464 | ASSERT(XFS_BUF_FSPRIVATE2(bp, unsigned long) == | 1463 | ASSERT(XFS_BUF_FSPRIVATE2(bp, unsigned long) == |
| 1465 | (unsigned long)1); | 1464 | (unsigned long)1); |
| 1466 | XFS_BUF_SET_FSPRIVATE2(bp, (unsigned long)2); | 1465 | XFS_BUF_SET_FSPRIVATE2(bp, (unsigned long)2); |
| @@ -1468,6 +1467,7 @@ xlog_sync(xlog_t *log, | |||
| 1468 | XFS_BUF_SET_PTR(bp, (xfs_caddr_t)((__psint_t)&(iclog->ic_header)+ | 1467 | XFS_BUF_SET_PTR(bp, (xfs_caddr_t)((__psint_t)&(iclog->ic_header)+ |
| 1469 | (__psint_t)count), split); | 1468 | (__psint_t)count), split); |
| 1470 | XFS_BUF_SET_FSPRIVATE(bp, iclog); | 1469 | XFS_BUF_SET_FSPRIVATE(bp, iclog); |
| 1470 | XFS_BUF_ZEROFLAGS(bp); | ||
| 1471 | XFS_BUF_BUSY(bp); | 1471 | XFS_BUF_BUSY(bp); |
| 1472 | XFS_BUF_ASYNC(bp); | 1472 | XFS_BUF_ASYNC(bp); |
| 1473 | if (log->l_mp->m_flags & XFS_MOUNT_BARRIER) | 1473 | if (log->l_mp->m_flags & XFS_MOUNT_BARRIER) |
diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c index 6c96391f3f1a..b427d220a169 100644 --- a/fs/xfs/xfs_vfsops.c +++ b/fs/xfs/xfs_vfsops.c | |||
| @@ -515,7 +515,7 @@ xfs_mount( | |||
| 515 | if (error) | 515 | if (error) |
| 516 | goto error2; | 516 | goto error2; |
| 517 | 517 | ||
| 518 | if ((mp->m_flags & XFS_MOUNT_BARRIER) && !(vfsp->vfs_flag & VFS_RDONLY)) | 518 | if (mp->m_flags & XFS_MOUNT_BARRIER) |
| 519 | xfs_mountfs_check_barriers(mp); | 519 | xfs_mountfs_check_barriers(mp); |
| 520 | 520 | ||
| 521 | error = XFS_IOINIT(vfsp, args, flags); | 521 | error = XFS_IOINIT(vfsp, args, flags); |
