Merge branch 'for-linus' of git://oss.sgi.com:8090/xfs/xfs-2.6

* 'for-linus' of git://oss.sgi.com:8090/xfs/xfs-2.6:
[XFS] Ensure "both" features2 slots are consistent
[XFS] Fix superblock features2 field alignment problem
[XFS] remove shouting-indirection macros from xfs_sb.h

+153 -148
+1 -1
fs/xfs/linux-2.6/xfs_ioctl.c
··· 732 732 * Only allow the sys admin to reserve space unless 733 733 * unwritten extents are enabled. 734 734 */ 735 - if (!XFS_SB_VERSION_HASEXTFLGBIT(&mp->m_sb) && 735 + if (!xfs_sb_version_hasextflgbit(&mp->m_sb) && 736 736 !capable(CAP_SYS_ADMIN)) 737 737 return -EPERM; 738 738
+3 -3
fs/xfs/quota/xfs_qm.c
··· 1405 1405 #if defined(DEBUG) && defined(XFS_LOUD_RECOVERY) 1406 1406 unsigned oldv = mp->m_sb.sb_versionnum; 1407 1407 #endif 1408 - ASSERT(!XFS_SB_VERSION_HASQUOTA(&mp->m_sb)); 1408 + ASSERT(!xfs_sb_version_hasquota(&mp->m_sb)); 1409 1409 ASSERT((sbfields & (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | 1410 1410 XFS_SB_GQUOTINO | XFS_SB_QFLAGS)) == 1411 1411 (XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | 1412 1412 XFS_SB_GQUOTINO | XFS_SB_QFLAGS)); 1413 1413 1414 - XFS_SB_VERSION_ADDQUOTA(&mp->m_sb); 1414 + xfs_sb_version_addquota(&mp->m_sb); 1415 1415 mp->m_sb.sb_uquotino = NULLFSINO; 1416 1416 mp->m_sb.sb_gquotino = NULLFSINO; 1417 1417 ··· 1954 1954 /* 1955 1955 * Get the uquota and gquota inodes 1956 1956 */ 1957 - if (XFS_SB_VERSION_HASQUOTA(&mp->m_sb)) { 1957 + if (xfs_sb_version_hasquota(&mp->m_sb)) { 1958 1958 if (XFS_IS_UQUOTA_ON(mp) && 1959 1959 mp->m_sb.sb_uquotino != NULLFSINO) { 1960 1960 ASSERT(mp->m_sb.sb_uquotino > 0);
+1 -1
fs/xfs/quota/xfs_qm_bhv.c
··· 118 118 *quotaflags = 0; 119 119 *needquotamount = B_FALSE; 120 120 121 - quotaondisk = XFS_SB_VERSION_HASQUOTA(&mp->m_sb) && 121 + quotaondisk = xfs_sb_version_hasquota(&mp->m_sb) && 122 122 (mp->m_sb.sb_qflags & XFS_ALL_QUOTA_ACCT); 123 123 124 124 if (quotaondisk) {
+2 -2
fs/xfs/quota/xfs_qm_syscalls.c
··· 377 377 if (!capable(CAP_SYS_ADMIN)) 378 378 return XFS_ERROR(EPERM); 379 379 error = 0; 380 - if (!XFS_SB_VERSION_HASQUOTA(&mp->m_sb) || flags == 0) { 380 + if (!xfs_sb_version_hasquota(&mp->m_sb) || flags == 0) { 381 381 qdprintk("qtrunc flags=%x m_qflags=%x\n", flags, mp->m_qflags); 382 382 return XFS_ERROR(EINVAL); 383 383 } ··· 522 522 memset(out, 0, sizeof(fs_quota_stat_t)); 523 523 524 524 out->qs_version = FS_QSTAT_VERSION; 525 - if (! XFS_SB_VERSION_HASQUOTA(&mp->m_sb)) { 525 + if (!xfs_sb_version_hasquota(&mp->m_sb)) { 526 526 out->qs_uquota.qfs_ino = NULLFSINO; 527 527 out->qs_gquota.qfs_ino = NULLFSINO; 528 528 return (0);
+3 -3
fs/xfs/xfs_attr_leaf.c
··· 227 227 xfs_sbversion_add_attr2(xfs_mount_t *mp, xfs_trans_t *tp) 228 228 { 229 229 if ((mp->m_flags & XFS_MOUNT_ATTR2) && 230 - !(XFS_SB_VERSION_HASATTR2(&mp->m_sb))) { 230 + !(xfs_sb_version_hasattr2(&mp->m_sb))) { 231 231 spin_lock(&mp->m_sb_lock); 232 - if (!XFS_SB_VERSION_HASATTR2(&mp->m_sb)) { 233 - XFS_SB_VERSION_ADDATTR2(&mp->m_sb); 232 + if (!xfs_sb_version_hasattr2(&mp->m_sb)) { 233 + xfs_sb_version_addattr2(&mp->m_sb); 234 234 spin_unlock(&mp->m_sb_lock); 235 235 xfs_mod_sb(tp, XFS_SB_VERSIONNUM | XFS_SB_FEATURES2); 236 236 } else
+9 -9
fs/xfs/xfs_bmap.c
··· 4047 4047 xfs_trans_log_inode(tp, ip, logflags); 4048 4048 if (error) 4049 4049 goto error2; 4050 - if (!XFS_SB_VERSION_HASATTR(&mp->m_sb) || 4051 - (!XFS_SB_VERSION_HASATTR2(&mp->m_sb) && version == 2)) { 4050 + if (!xfs_sb_version_hasattr(&mp->m_sb) || 4051 + (!xfs_sb_version_hasattr2(&mp->m_sb) && version == 2)) { 4052 4052 __int64_t sbfields = 0; 4053 4053 4054 4054 spin_lock(&mp->m_sb_lock); 4055 - if (!XFS_SB_VERSION_HASATTR(&mp->m_sb)) { 4056 - XFS_SB_VERSION_ADDATTR(&mp->m_sb); 4055 + if (!xfs_sb_version_hasattr(&mp->m_sb)) { 4056 + xfs_sb_version_addattr(&mp->m_sb); 4057 4057 sbfields |= XFS_SB_VERSIONNUM; 4058 4058 } 4059 - if (!XFS_SB_VERSION_HASATTR2(&mp->m_sb) && version == 2) { 4060 - XFS_SB_VERSION_ADDATTR2(&mp->m_sb); 4059 + if (!xfs_sb_version_hasattr2(&mp->m_sb) && version == 2) { 4060 + xfs_sb_version_addattr2(&mp->m_sb); 4061 4061 sbfields |= (XFS_SB_VERSIONNUM | XFS_SB_FEATURES2); 4062 4062 } 4063 4063 if (sbfields) { ··· 5043 5043 * A wasdelay extent has been initialized, so 5044 5044 * shouldn't be flagged as unwritten. 5045 5045 */ 5046 - if (wr && XFS_SB_VERSION_HASEXTFLGBIT(&mp->m_sb)) { 5046 + if (wr && xfs_sb_version_hasextflgbit(&mp->m_sb)) { 5047 5047 if (!wasdelay && (flags & XFS_BMAPI_PREALLOC)) 5048 5048 got.br_state = XFS_EXT_UNWRITTEN; 5049 5049 } ··· 5483 5483 * get rid of part of a realtime extent. 5484 5484 */ 5485 5485 if (del.br_state == XFS_EXT_UNWRITTEN || 5486 - !XFS_SB_VERSION_HASEXTFLGBIT(&mp->m_sb)) { 5486 + !xfs_sb_version_hasextflgbit(&mp->m_sb)) { 5487 5487 /* 5488 5488 * This piece is unwritten, or we're not 5489 5489 * using unwritten extents. Skip over it. ··· 5535 5535 } else if ((del.br_startoff == start && 5536 5536 (del.br_state == XFS_EXT_UNWRITTEN || 5537 5537 xfs_trans_get_block_res(tp) == 0)) || 5538 - !XFS_SB_VERSION_HASEXTFLGBIT(&mp->m_sb)) { 5538 + !xfs_sb_version_hasextflgbit(&mp->m_sb)) { 5539 5539 /* 5540 5540 * Can't make it unwritten. There isn't 5541 5541 * a full extent here so just skip it.
+1 -1
fs/xfs/xfs_bmap_btree.h
··· 120 120 * Extent state and extent format macros. 121 121 */ 122 122 #define XFS_EXTFMT_INODE(x) \ 123 - (XFS_SB_VERSION_HASEXTFLGBIT(&((x)->i_mount->m_sb)) ? \ 123 + (xfs_sb_version_hasextflgbit(&((x)->i_mount->m_sb)) ? \ 124 124 XFS_EXTFMT_HASSTATE : XFS_EXTFMT_NOSTATE) 125 125 #define ISUNWRITTEN(x) ((x)->br_state == XFS_EXT_UNWRITTEN) 126 126
+1 -1
fs/xfs/xfs_dir2.c
··· 49 49 xfs_dir_mount( 50 50 xfs_mount_t *mp) 51 51 { 52 - ASSERT(XFS_SB_VERSION_HASDIRV2(&mp->m_sb)); 52 + ASSERT(xfs_sb_version_hasdirv2(&mp->m_sb)); 53 53 ASSERT((1 << (mp->m_sb.sb_blocklog + mp->m_sb.sb_dirblklog)) <= 54 54 XFS_MAX_BLOCKSIZE); 55 55 mp->m_dirblksize = 1 << (mp->m_sb.sb_blocklog + mp->m_sb.sb_dirblklog);
+12 -12
fs/xfs/xfs_fsops.c
··· 77 77 if (new_version >= 3) { 78 78 geo->version = XFS_FSOP_GEOM_VERSION; 79 79 geo->flags = 80 - (XFS_SB_VERSION_HASATTR(&mp->m_sb) ? 80 + (xfs_sb_version_hasattr(&mp->m_sb) ? 81 81 XFS_FSOP_GEOM_FLAGS_ATTR : 0) | 82 - (XFS_SB_VERSION_HASNLINK(&mp->m_sb) ? 82 + (xfs_sb_version_hasnlink(&mp->m_sb) ? 83 83 XFS_FSOP_GEOM_FLAGS_NLINK : 0) | 84 - (XFS_SB_VERSION_HASQUOTA(&mp->m_sb) ? 84 + (xfs_sb_version_hasquota(&mp->m_sb) ? 85 85 XFS_FSOP_GEOM_FLAGS_QUOTA : 0) | 86 - (XFS_SB_VERSION_HASALIGN(&mp->m_sb) ? 86 + (xfs_sb_version_hasalign(&mp->m_sb) ? 87 87 XFS_FSOP_GEOM_FLAGS_IALIGN : 0) | 88 - (XFS_SB_VERSION_HASDALIGN(&mp->m_sb) ? 88 + (xfs_sb_version_hasdalign(&mp->m_sb) ? 89 89 XFS_FSOP_GEOM_FLAGS_DALIGN : 0) | 90 - (XFS_SB_VERSION_HASSHARED(&mp->m_sb) ? 90 + (xfs_sb_version_hasshared(&mp->m_sb) ? 91 91 XFS_FSOP_GEOM_FLAGS_SHARED : 0) | 92 - (XFS_SB_VERSION_HASEXTFLGBIT(&mp->m_sb) ? 92 + (xfs_sb_version_hasextflgbit(&mp->m_sb) ? 93 93 XFS_FSOP_GEOM_FLAGS_EXTFLG : 0) | 94 - (XFS_SB_VERSION_HASDIRV2(&mp->m_sb) ? 94 + (xfs_sb_version_hasdirv2(&mp->m_sb) ? 95 95 XFS_FSOP_GEOM_FLAGS_DIRV2 : 0) | 96 - (XFS_SB_VERSION_HASSECTOR(&mp->m_sb) ? 96 + (xfs_sb_version_hassector(&mp->m_sb) ? 97 97 XFS_FSOP_GEOM_FLAGS_SECTOR : 0) | 98 98 (xfs_sb_version_haslazysbcount(&mp->m_sb) ? 99 99 XFS_FSOP_GEOM_FLAGS_LAZYSB : 0) | 100 - (XFS_SB_VERSION_HASATTR2(&mp->m_sb) ? 100 + (xfs_sb_version_hasattr2(&mp->m_sb) ? 101 101 XFS_FSOP_GEOM_FLAGS_ATTR2 : 0); 102 - geo->logsectsize = XFS_SB_VERSION_HASSECTOR(&mp->m_sb) ? 102 + geo->logsectsize = xfs_sb_version_hassector(&mp->m_sb) ? 103 103 mp->m_sb.sb_logsectsize : BBSIZE; 104 104 geo->rtsectsize = mp->m_sb.sb_blocksize; 105 105 geo->dirblocksize = mp->m_dirblksize; 106 106 } 107 107 if (new_version >= 4) { 108 108 geo->flags |= 109 - (XFS_SB_VERSION_HASLOGV2(&mp->m_sb) ? 109 + (xfs_sb_version_haslogv2(&mp->m_sb) ? 110 110 XFS_FSOP_GEOM_FLAGS_LOGV2 : 0); 111 111 geo->logsunit = mp->m_sb.sb_logsunit; 112 112 }
+3 -3
fs/xfs/xfs_ialloc.c
··· 191 191 ASSERT(!(args.mp->m_flags & XFS_MOUNT_NOALIGN)); 192 192 args.alignment = args.mp->m_dalign; 193 193 isaligned = 1; 194 - } else if (XFS_SB_VERSION_HASALIGN(&args.mp->m_sb) && 194 + } else if (xfs_sb_version_hasalign(&args.mp->m_sb) && 195 195 args.mp->m_sb.sb_inoalignmt >= 196 196 XFS_B_TO_FSBT(args.mp, 197 197 XFS_INODE_CLUSTER_SIZE(args.mp))) ··· 230 230 args.agbno = be32_to_cpu(agi->agi_root); 231 231 args.fsbno = XFS_AGB_TO_FSB(args.mp, 232 232 be32_to_cpu(agi->agi_seqno), args.agbno); 233 - if (XFS_SB_VERSION_HASALIGN(&args.mp->m_sb) && 233 + if (xfs_sb_version_hasalign(&args.mp->m_sb) && 234 234 args.mp->m_sb.sb_inoalignmt >= 235 235 XFS_B_TO_FSBT(args.mp, XFS_INODE_CLUSTER_SIZE(args.mp))) 236 236 args.alignment = args.mp->m_sb.sb_inoalignmt; ··· 271 271 * use the old version so that old kernels will continue to be 272 272 * able to use the file system. 273 273 */ 274 - if (XFS_SB_VERSION_HASNLINK(&args.mp->m_sb)) 274 + if (xfs_sb_version_hasnlink(&args.mp->m_sb)) 275 275 version = XFS_DINODE_VERSION_2; 276 276 else 277 277 version = XFS_DINODE_VERSION_1;
+3 -3
fs/xfs/xfs_inode.c
··· 1147 1147 * the inode version number now. This way we only do the conversion 1148 1148 * here rather than here and in the flush/logging code. 1149 1149 */ 1150 - if (XFS_SB_VERSION_HASNLINK(&tp->t_mountp->m_sb) && 1150 + if (xfs_sb_version_hasnlink(&tp->t_mountp->m_sb) && 1151 1151 ip->i_d.di_version == XFS_DINODE_VERSION_1) { 1152 1152 ip->i_d.di_version = XFS_DINODE_VERSION_2; 1153 1153 /* ··· 3434 3434 * has been updated, then make the conversion permanent. 3435 3435 */ 3436 3436 ASSERT(ip->i_d.di_version == XFS_DINODE_VERSION_1 || 3437 - XFS_SB_VERSION_HASNLINK(&mp->m_sb)); 3437 + xfs_sb_version_hasnlink(&mp->m_sb)); 3438 3438 if (ip->i_d.di_version == XFS_DINODE_VERSION_1) { 3439 - if (!XFS_SB_VERSION_HASNLINK(&mp->m_sb)) { 3439 + if (!xfs_sb_version_hasnlink(&mp->m_sb)) { 3440 3440 /* 3441 3441 * Convert it back. 3442 3442 */
+2 -2
fs/xfs/xfs_inode_item.c
··· 296 296 */ 297 297 mp = ip->i_mount; 298 298 ASSERT(ip->i_d.di_version == XFS_DINODE_VERSION_1 || 299 - XFS_SB_VERSION_HASNLINK(&mp->m_sb)); 299 + xfs_sb_version_hasnlink(&mp->m_sb)); 300 300 if (ip->i_d.di_version == XFS_DINODE_VERSION_1) { 301 - if (!XFS_SB_VERSION_HASNLINK(&mp->m_sb)) { 301 + if (!xfs_sb_version_hasnlink(&mp->m_sb)) { 302 302 /* 303 303 * Convert it back. 304 304 */
+1 -1
fs/xfs/xfs_itable.c
··· 45 45 xfs_ino_t ino) 46 46 { 47 47 return (ino == mp->m_sb.sb_rbmino || ino == mp->m_sb.sb_rsumino || 48 - (XFS_SB_VERSION_HASQUOTA(&mp->m_sb) && 48 + (xfs_sb_version_hasquota(&mp->m_sb) && 49 49 (ino == mp->m_sb.sb_uquotino || ino == mp->m_sb.sb_gquotino))); 50 50 } 51 51
+7 -7
fs/xfs/xfs_log.c
··· 1090 1090 size >>= 1; 1091 1091 } 1092 1092 1093 - if (XFS_SB_VERSION_HASLOGV2(&mp->m_sb)) { 1093 + if (xfs_sb_version_haslogv2(&mp->m_sb)) { 1094 1094 /* # headers = size / 32K 1095 1095 * one header holds cycles from 32K of data 1096 1096 */ ··· 1186 1186 log->l_grant_reserve_cycle = 1; 1187 1187 log->l_grant_write_cycle = 1; 1188 1188 1189 - if (XFS_SB_VERSION_HASSECTOR(&mp->m_sb)) { 1189 + if (xfs_sb_version_hassector(&mp->m_sb)) { 1190 1190 log->l_sectbb_log = mp->m_sb.sb_logsectlog - BBSHIFT; 1191 1191 ASSERT(log->l_sectbb_log <= mp->m_sectbb_log); 1192 1192 /* for larger sector sizes, must have v2 or external log */ 1193 1193 ASSERT(log->l_sectbb_log == 0 || 1194 1194 log->l_logBBstart == 0 || 1195 - XFS_SB_VERSION_HASLOGV2(&mp->m_sb)); 1195 + xfs_sb_version_haslogv2(&mp->m_sb)); 1196 1196 ASSERT(mp->m_sb.sb_logsectlog >= BBSHIFT); 1197 1197 } 1198 1198 log->l_sectbb_mask = (1 << log->l_sectbb_log) - 1; ··· 1247 1247 memset(head, 0, sizeof(xlog_rec_header_t)); 1248 1248 head->h_magicno = cpu_to_be32(XLOG_HEADER_MAGIC_NUM); 1249 1249 head->h_version = cpu_to_be32( 1250 - XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb) ? 2 : 1); 1250 + xfs_sb_version_haslogv2(&log->l_mp->m_sb) ? 2 : 1); 1251 1251 head->h_size = cpu_to_be32(log->l_iclog_size); 1252 1252 /* new fields */ 1253 1253 head->h_fmt = cpu_to_be32(XLOG_FMT); ··· 1402 1402 int roundoff; /* roundoff to BB or stripe */ 1403 1403 int split = 0; /* split write into two regions */ 1404 1404 int error; 1405 - int v2 = XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb); 1405 + int v2 = xfs_sb_version_haslogv2(&log->l_mp->m_sb); 1406 1406 1407 1407 XFS_STATS_INC(xs_log_writes); 1408 1408 ASSERT(iclog->ic_refcnt == 0); ··· 2881 2881 log->l_curr_block += BTOBB(eventual_size)+BTOBB(log->l_iclog_hsize); 2882 2882 2883 2883 /* Round up to next log-sunit */ 2884 - if (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb) && 2884 + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb) && 2885 2885 log->l_mp->m_sb.sb_logsunit > 1) { 2886 2886 __uint32_t sunit_bb = BTOBB(log->l_mp->m_sb.sb_logsunit); 2887 2887 log->l_curr_block = roundup(log->l_curr_block, sunit_bb); ··· 3334 3334 unit_bytes += sizeof(xlog_op_header_t) * num_headers; 3335 3335 3336 3336 /* for roundoff padding for transaction data and one for commit record */ 3337 - if (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb) && 3337 + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb) && 3338 3338 log->l_mp->m_sb.sb_logsunit > 1) { 3339 3339 /* log su roundoff */ 3340 3340 unit_bytes += 2*log->l_mp->m_sb.sb_logsunit;
+2 -2
fs/xfs/xfs_log_priv.h
··· 49 49 #define XLOG_HEADER_SIZE 512 50 50 51 51 #define XLOG_REC_SHIFT(log) \ 52 - BTOBB(1 << (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb) ? \ 52 + BTOBB(1 << (xfs_sb_version_haslogv2(&log->l_mp->m_sb) ? \ 53 53 XLOG_MAX_RECORD_BSHIFT : XLOG_BIG_RECORD_BSHIFT)) 54 54 #define XLOG_TOTAL_REC_SHIFT(log) \ 55 - BTOBB(XLOG_MAX_ICLOGS << (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb) ? \ 55 + BTOBB(XLOG_MAX_ICLOGS << (xfs_sb_version_haslogv2(&log->l_mp->m_sb) ? \ 56 56 XLOG_MAX_RECORD_BSHIFT : XLOG_BIG_RECORD_BSHIFT)) 57 57 58 58
+8 -8
fs/xfs/xfs_log_recover.c
··· 478 478 * reset last_blk. Only when last_blk points in the middle of a log 479 479 * record do we update last_blk. 480 480 */ 481 - if (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb)) { 481 + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { 482 482 uint h_size = be32_to_cpu(head->h_size); 483 483 484 484 xhdrs = h_size / XLOG_HEADER_CYCLE_SIZE; ··· 888 888 * unmount record if there is one, so we pass the lsn of the 889 889 * unmount record rather than the block after it. 890 890 */ 891 - if (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb)) { 891 + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { 892 892 int h_size = be32_to_cpu(rhead->h_size); 893 893 int h_version = be32_to_cpu(rhead->h_version); 894 894 ··· 1101 1101 recp->h_magicno = cpu_to_be32(XLOG_HEADER_MAGIC_NUM); 1102 1102 recp->h_cycle = cpu_to_be32(cycle); 1103 1103 recp->h_version = cpu_to_be32( 1104 - XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb) ? 2 : 1); 1104 + xfs_sb_version_haslogv2(&log->l_mp->m_sb) ? 2 : 1); 1105 1105 recp->h_lsn = cpu_to_be64(xlog_assign_lsn(cycle, block)); 1106 1106 recp->h_tail_lsn = cpu_to_be64(xlog_assign_lsn(tail_cycle, tail_block)); 1107 1107 recp->h_fmt = cpu_to_be32(XLOG_FMT); ··· 3348 3348 dp += BBSIZE; 3349 3349 } 3350 3350 3351 - if (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb)) { 3351 + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { 3352 3352 xhdr = (xlog_in_core_2_t *)&iclog->ic_header; 3353 3353 for ( ; i < BTOBB(size); i++) { 3354 3354 j = i / (XLOG_HEADER_CYCLE_SIZE / BBSIZE); ··· 3388 3388 be32_to_cpu(rhead->h_chksum), chksum); 3389 3389 cmn_err(CE_DEBUG, 3390 3390 "XFS: Disregard message if filesystem was created with non-DEBUG kernel"); 3391 - if (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb)) { 3391 + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { 3392 3392 cmn_err(CE_DEBUG, 3393 3393 "XFS: LogR this is a LogV2 filesystem\n"); 3394 3394 } ··· 3415 3415 dp += BBSIZE; 3416 3416 } 3417 3417 3418 - if (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb)) { 3418 + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { 3419 3419 xhdr = (xlog_in_core_2_t *)rhead; 3420 3420 for ( ; i < BTOBB(be32_to_cpu(rhead->h_len)); i++) { 3421 3421 j = i / (XLOG_HEADER_CYCLE_SIZE / BBSIZE); ··· 3494 3494 * Read the header of the tail block and get the iclog buffer size from 3495 3495 * h_size. Use this to tell how many sectors make up the log header. 3496 3496 */ 3497 - if (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb)) { 3497 + if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { 3498 3498 /* 3499 3499 * When using variable length iclogs, read first sector of 3500 3500 * iclog header and extract the header size from it. Get a ··· 3838 3838 sbp = &log->l_mp->m_sb; 3839 3839 xfs_sb_from_disk(sbp, XFS_BUF_TO_SBP(bp)); 3840 3840 ASSERT(sbp->sb_magicnum == XFS_SB_MAGIC); 3841 - ASSERT(XFS_SB_GOOD_VERSION(sbp)); 3841 + ASSERT(xfs_sb_good_version(sbp)); 3842 3842 xfs_buf_relse(bp); 3843 3843 3844 3844 /* We've re-read the superblock so re-initialize per-cpu counters */
+47 -12
fs/xfs/xfs_mount.c
··· 44 44 #include "xfs_quota.h" 45 45 #include "xfs_fsops.h" 46 46 47 - STATIC void xfs_mount_log_sbunit(xfs_mount_t *, __int64_t); 47 + STATIC void xfs_mount_log_sb(xfs_mount_t *, __int64_t); 48 48 STATIC int xfs_uuid_mount(xfs_mount_t *); 49 49 STATIC void xfs_uuid_unmount(xfs_mount_t *mp); 50 50 STATIC void xfs_unmountfs_wait(xfs_mount_t *); ··· 119 119 { offsetof(xfs_sb_t, sb_logsectsize),0 }, 120 120 { offsetof(xfs_sb_t, sb_logsunit), 0 }, 121 121 { offsetof(xfs_sb_t, sb_features2), 0 }, 122 + { offsetof(xfs_sb_t, sb_bad_features2), 0 }, 122 123 { sizeof(xfs_sb_t), 0 } 123 124 }; 124 125 ··· 226 225 return XFS_ERROR(EWRONGFS); 227 226 } 228 227 229 - if (!XFS_SB_GOOD_VERSION(sbp)) { 228 + if (!xfs_sb_good_version(sbp)) { 230 229 xfs_fs_mount_cmn_err(flags, "bad version"); 231 230 return XFS_ERROR(EWRONGFS); 232 231 } ··· 301 300 /* 302 301 * Version 1 directory format has never worked on Linux. 303 302 */ 304 - if (unlikely(!XFS_SB_VERSION_HASDIRV2(sbp))) { 303 + if (unlikely(!xfs_sb_version_hasdirv2(sbp))) { 305 304 xfs_fs_mount_cmn_err(flags, 306 305 "file system using version 1 directory format"); 307 306 return XFS_ERROR(ENOSYS); ··· 450 449 to->sb_logsectsize = be16_to_cpu(from->sb_logsectsize); 451 450 to->sb_logsunit = be32_to_cpu(from->sb_logsunit); 452 451 to->sb_features2 = be32_to_cpu(from->sb_features2); 452 + to->sb_bad_features2 = be32_to_cpu(from->sb_bad_features2); 453 453 } 454 454 455 455 /* ··· 783 781 * Update superblock with new values 784 782 * and log changes 785 783 */ 786 - if (XFS_SB_VERSION_HASDALIGN(sbp)) { 784 + if (xfs_sb_version_hasdalign(sbp)) { 787 785 if (sbp->sb_unit != mp->m_dalign) { 788 786 sbp->sb_unit = mp->m_dalign; 789 787 *update_flags |= XFS_SB_UNIT; ··· 794 792 } 795 793 } 796 794 } else if ((mp->m_flags & XFS_MOUNT_NOALIGN) != XFS_MOUNT_NOALIGN && 797 - XFS_SB_VERSION_HASDALIGN(&mp->m_sb)) { 795 + xfs_sb_version_hasdalign(&mp->m_sb)) { 798 796 mp->m_dalign = sbp->sb_unit; 799 797 mp->m_swidth = sbp->sb_width; 800 798 } ··· 871 869 STATIC void 872 870 xfs_set_inoalignment(xfs_mount_t *mp) 873 871 { 874 - if (XFS_SB_VERSION_HASALIGN(&mp->m_sb) && 872 + if (xfs_sb_version_hasalign(&mp->m_sb) && 875 873 mp->m_sb.sb_inoalignmt >= 876 874 XFS_B_TO_FSBT(mp, mp->m_inode_cluster_size)) 877 875 mp->m_inoalign_mask = mp->m_sb.sb_inoalignmt - 1; ··· 970 968 return error; 971 969 } 972 970 xfs_mount_common(mp, sbp); 971 + 972 + /* 973 + * Check for a mismatched features2 values. Older kernels 974 + * read & wrote into the wrong sb offset for sb_features2 975 + * on some platforms due to xfs_sb_t not being 64bit size aligned 976 + * when sb_features2 was added, which made older superblock 977 + * reading/writing routines swap it as a 64-bit value. 978 + * 979 + * For backwards compatibility, we make both slots equal. 980 + * 981 + * If we detect a mismatched field, we OR the set bits into the 982 + * existing features2 field in case it has already been modified; we 983 + * don't want to lose any features. We then update the bad location 984 + * with the ORed value so that older kernels will see any features2 985 + * flags, and mark the two fields as needing updates once the 986 + * transaction subsystem is online. 987 + */ 988 + if (xfs_sb_has_mismatched_features2(sbp)) { 989 + cmn_err(CE_WARN, 990 + "XFS: correcting sb_features alignment problem"); 991 + sbp->sb_features2 |= sbp->sb_bad_features2; 992 + sbp->sb_bad_features2 = sbp->sb_features2; 993 + update_flags |= XFS_SB_FEATURES2 | XFS_SB_BAD_FEATURES2; 994 + 995 + /* 996 + * Re-check for ATTR2 in case it was found in bad_features2 997 + * slot. 998 + */ 999 + if (xfs_sb_version_hasattr2(&mp->m_sb)) 1000 + mp->m_flags |= XFS_MOUNT_ATTR2; 1001 + 1002 + } 973 1003 974 1004 /* 975 1005 * Check if sb_agblocks is aligned at stripe boundary ··· 1193 1159 } 1194 1160 1195 1161 /* 1196 - * If fs is not mounted readonly, then update the superblock 1197 - * unit and width changes. 1162 + * If fs is not mounted readonly, then update the superblock changes. 1198 1163 */ 1199 1164 if (update_flags && !(mp->m_flags & XFS_MOUNT_RDONLY)) 1200 - xfs_mount_log_sbunit(mp, update_flags); 1165 + xfs_mount_log_sb(mp, update_flags); 1201 1166 1202 1167 /* 1203 1168 * Initialise the XFS quota management subsystem for this mount ··· 1908 1875 1909 1876 /* 1910 1877 * Used to log changes to the superblock unit and width fields which could 1911 - * be altered by the mount options. Only the first superblock is updated. 1878 + * be altered by the mount options, as well as any potential sb_features2 1879 + * fixup. Only the first superblock is updated. 1912 1880 */ 1913 1881 STATIC void 1914 - xfs_mount_log_sbunit( 1882 + xfs_mount_log_sb( 1915 1883 xfs_mount_t *mp, 1916 1884 __int64_t fields) 1917 1885 { 1918 1886 xfs_trans_t *tp; 1919 1887 1920 - ASSERT(fields & (XFS_SB_UNIT|XFS_SB_WIDTH|XFS_SB_UUID)); 1888 + ASSERT(fields & (XFS_SB_UNIT | XFS_SB_WIDTH | XFS_SB_UUID | 1889 + XFS_SB_FEATURES2 | XFS_SB_BAD_FEATURES2)); 1921 1890 1922 1891 tp = xfs_trans_alloc(mp, XFS_TRANS_SB_UNIT); 1923 1892 if (xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0,
+39 -68
fs/xfs/xfs_sb.h
··· 89 89 90 90 /* 91 91 * Superblock - in core version. Must match the ondisk version below. 92 + * Must be padded to 64 bit alignment. 92 93 */ 93 94 typedef struct xfs_sb { 94 95 __uint32_t sb_magicnum; /* magic number == XFS_SB_MAGIC */ ··· 146 145 __uint16_t sb_logsectsize; /* sector size for the log, bytes */ 147 146 __uint32_t sb_logsunit; /* stripe unit size for the log */ 148 147 __uint32_t sb_features2; /* additional feature bits */ 148 + 149 + /* 150 + * bad features2 field as a result of failing to pad the sb 151 + * structure to 64 bits. Some machines will be using this field 152 + * for features2 bits. Easiest just to mark it bad and not use 153 + * it for anything else. 154 + */ 155 + __uint32_t sb_bad_features2; 156 + 157 + /* must be padded to 64 bit alignment */ 149 158 } xfs_sb_t; 150 159 151 160 /* 152 - * Superblock - on disk version. Must match the in core version below. 161 + * Superblock - on disk version. Must match the in core version above. 162 + * Must be padded to 64 bit alignment. 153 163 */ 154 164 typedef struct xfs_dsb { 155 165 __be32 sb_magicnum; /* magic number == XFS_SB_MAGIC */ ··· 217 205 __be16 sb_logsectsize; /* sector size for the log, bytes */ 218 206 __be32 sb_logsunit; /* stripe unit size for the log */ 219 207 __be32 sb_features2; /* additional feature bits */ 208 + /* 209 + * bad features2 field as a result of failing to pad the sb 210 + * structure to 64 bits. Some machines will be using this field 211 + * for features2 bits. Easiest just to mark it bad and not use 212 + * it for anything else. 213 + */ 214 + __be32 sb_bad_features2; 215 + 216 + /* must be padded to 64 bit alignment */ 220 217 } xfs_dsb_t; 221 218 222 219 /* ··· 244 223 XFS_SBS_GQUOTINO, XFS_SBS_QFLAGS, XFS_SBS_FLAGS, XFS_SBS_SHARED_VN, 245 224 XFS_SBS_INOALIGNMT, XFS_SBS_UNIT, XFS_SBS_WIDTH, XFS_SBS_DIRBLKLOG, 246 225 XFS_SBS_LOGSECTLOG, XFS_SBS_LOGSECTSIZE, XFS_SBS_LOGSUNIT, 247 - XFS_SBS_FEATURES2, 226 + XFS_SBS_FEATURES2, XFS_SBS_BAD_FEATURES2, 248 227 XFS_SBS_FIELDCOUNT 249 228 } xfs_sb_field_t; 250 229 ··· 269 248 #define XFS_SB_IFREE XFS_SB_MVAL(IFREE) 270 249 #define XFS_SB_FDBLOCKS XFS_SB_MVAL(FDBLOCKS) 271 250 #define XFS_SB_FEATURES2 XFS_SB_MVAL(FEATURES2) 251 + #define XFS_SB_BAD_FEATURES2 XFS_SB_MVAL(BAD_FEATURES2) 272 252 #define XFS_SB_NUM_BITS ((int)XFS_SBS_FIELDCOUNT) 273 253 #define XFS_SB_ALL_BITS ((1LL << XFS_SB_NUM_BITS) - 1) 274 254 #define XFS_SB_MOD_BITS \ 275 255 (XFS_SB_UUID | XFS_SB_ROOTINO | XFS_SB_RBMINO | XFS_SB_RSUMINO | \ 276 256 XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | \ 277 257 XFS_SB_QFLAGS | XFS_SB_SHARED_VN | XFS_SB_UNIT | XFS_SB_WIDTH | \ 278 - XFS_SB_ICOUNT | XFS_SB_IFREE | XFS_SB_FDBLOCKS | XFS_SB_FEATURES2) 258 + XFS_SB_ICOUNT | XFS_SB_IFREE | XFS_SB_FDBLOCKS | XFS_SB_FEATURES2 | \ 259 + XFS_SB_BAD_FEATURES2) 279 260 280 261 281 262 /* ··· 294 271 295 272 #define XFS_SB_VERSION_NUM(sbp) ((sbp)->sb_versionnum & XFS_SB_VERSION_NUMBITS) 296 273 297 - #define XFS_SB_GOOD_VERSION(sbp) xfs_sb_good_version(sbp) 298 274 #ifdef __KERNEL__ 299 275 static inline int xfs_sb_good_version(xfs_sb_t *sbp) 300 276 { ··· 319 297 } 320 298 #endif /* __KERNEL__ */ 321 299 322 - #define XFS_SB_VERSION_TONEW(v) xfs_sb_version_tonew(v) 300 + /* 301 + * Detect a mismatched features2 field. Older kernels read/wrote 302 + * this into the wrong slot, so to be safe we keep them in sync. 303 + */ 304 + static inline int xfs_sb_has_mismatched_features2(xfs_sb_t *sbp) 305 + { 306 + return (sbp->sb_bad_features2 != sbp->sb_features2); 307 + } 308 + 323 309 static inline unsigned xfs_sb_version_tonew(unsigned v) 324 310 { 325 311 return ((((v) == XFS_SB_VERSION_1) ? \ ··· 338 308 XFS_SB_VERSION_4); 339 309 } 340 310 341 - #define XFS_SB_VERSION_TOOLD(v) xfs_sb_version_toold(v) 342 311 static inline unsigned xfs_sb_version_toold(unsigned v) 343 312 { 344 313 return (((v) & (XFS_SB_VERSION_QUOTABIT | XFS_SB_VERSION_ALIGNBIT)) ? \ ··· 349 320 XFS_SB_VERSION_1))); 350 321 } 351 322 352 - #define XFS_SB_VERSION_HASATTR(sbp) xfs_sb_version_hasattr(sbp) 353 323 static inline int xfs_sb_version_hasattr(xfs_sb_t *sbp) 354 324 { 355 325 return ((sbp)->sb_versionnum == XFS_SB_VERSION_2) || \ ··· 357 329 ((sbp)->sb_versionnum & XFS_SB_VERSION_ATTRBIT)); 358 330 } 359 331 360 - #define XFS_SB_VERSION_ADDATTR(sbp) xfs_sb_version_addattr(sbp) 361 332 static inline void xfs_sb_version_addattr(xfs_sb_t *sbp) 362 333 { 363 334 (sbp)->sb_versionnum = (((sbp)->sb_versionnum == XFS_SB_VERSION_1) ? \ ··· 366 339 (XFS_SB_VERSION_4 | XFS_SB_VERSION_ATTRBIT))); 367 340 } 368 341 369 - #define XFS_SB_VERSION_HASNLINK(sbp) xfs_sb_version_hasnlink(sbp) 370 342 static inline int xfs_sb_version_hasnlink(xfs_sb_t *sbp) 371 343 { 372 344 return ((sbp)->sb_versionnum == XFS_SB_VERSION_3) || \ ··· 373 347 ((sbp)->sb_versionnum & XFS_SB_VERSION_NLINKBIT)); 374 348 } 375 349 376 - #define XFS_SB_VERSION_ADDNLINK(sbp) xfs_sb_version_addnlink(sbp) 377 350 static inline void xfs_sb_version_addnlink(xfs_sb_t *sbp) 378 351 { 379 352 (sbp)->sb_versionnum = ((sbp)->sb_versionnum <= XFS_SB_VERSION_2 ? \ ··· 380 355 ((sbp)->sb_versionnum | XFS_SB_VERSION_NLINKBIT)); 381 356 } 382 357 383 - #define XFS_SB_VERSION_HASQUOTA(sbp) xfs_sb_version_hasquota(sbp) 384 358 static inline int xfs_sb_version_hasquota(xfs_sb_t *sbp) 385 359 { 386 360 return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ 387 361 ((sbp)->sb_versionnum & XFS_SB_VERSION_QUOTABIT); 388 362 } 389 363 390 - #define XFS_SB_VERSION_ADDQUOTA(sbp) xfs_sb_version_addquota(sbp) 391 364 static inline void xfs_sb_version_addquota(xfs_sb_t *sbp) 392 365 { 393 366 (sbp)->sb_versionnum = \ 394 367 (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 ? \ 395 368 ((sbp)->sb_versionnum | XFS_SB_VERSION_QUOTABIT) : \ 396 - (XFS_SB_VERSION_TONEW((sbp)->sb_versionnum) | \ 369 + (xfs_sb_version_tonew((sbp)->sb_versionnum) | \ 397 370 XFS_SB_VERSION_QUOTABIT)); 398 371 } 399 372 400 - #define XFS_SB_VERSION_HASALIGN(sbp) xfs_sb_version_hasalign(sbp) 401 373 static inline int xfs_sb_version_hasalign(xfs_sb_t *sbp) 402 374 { 403 375 return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ 404 376 ((sbp)->sb_versionnum & XFS_SB_VERSION_ALIGNBIT); 405 377 } 406 378 407 - #define XFS_SB_VERSION_SUBALIGN(sbp) xfs_sb_version_subalign(sbp) 408 - static inline void xfs_sb_version_subalign(xfs_sb_t *sbp) 409 - { 410 - (sbp)->sb_versionnum = \ 411 - XFS_SB_VERSION_TOOLD((sbp)->sb_versionnum & ~XFS_SB_VERSION_ALIGNBIT); 412 - } 413 - 414 - #define XFS_SB_VERSION_HASDALIGN(sbp) xfs_sb_version_hasdalign(sbp) 415 379 static inline int xfs_sb_version_hasdalign(xfs_sb_t *sbp) 416 380 { 417 381 return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ 418 382 ((sbp)->sb_versionnum & XFS_SB_VERSION_DALIGNBIT); 419 383 } 420 384 421 - #define XFS_SB_VERSION_ADDDALIGN(sbp) xfs_sb_version_adddalign(sbp) 422 - static inline int xfs_sb_version_adddalign(xfs_sb_t *sbp) 423 - { 424 - return (sbp)->sb_versionnum = \ 425 - ((sbp)->sb_versionnum | XFS_SB_VERSION_DALIGNBIT); 426 - } 427 - 428 - #define XFS_SB_VERSION_HASSHARED(sbp) xfs_sb_version_hasshared(sbp) 429 385 static inline int xfs_sb_version_hasshared(xfs_sb_t *sbp) 430 386 { 431 387 return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ 432 388 ((sbp)->sb_versionnum & XFS_SB_VERSION_SHAREDBIT); 433 389 } 434 390 435 - #define XFS_SB_VERSION_ADDSHARED(sbp) xfs_sb_version_addshared(sbp) 436 - static inline int xfs_sb_version_addshared(xfs_sb_t *sbp) 437 - { 438 - return (sbp)->sb_versionnum = \ 439 - ((sbp)->sb_versionnum | XFS_SB_VERSION_SHAREDBIT); 440 - } 441 - 442 - #define XFS_SB_VERSION_SUBSHARED(sbp) xfs_sb_version_subshared(sbp) 443 - static inline int xfs_sb_version_subshared(xfs_sb_t *sbp) 444 - { 445 - return (sbp)->sb_versionnum = \ 446 - ((sbp)->sb_versionnum & ~XFS_SB_VERSION_SHAREDBIT); 447 - } 448 - 449 - #define XFS_SB_VERSION_HASDIRV2(sbp) xfs_sb_version_hasdirv2(sbp) 450 391 static inline int xfs_sb_version_hasdirv2(xfs_sb_t *sbp) 451 392 { 452 393 return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ 453 394 ((sbp)->sb_versionnum & XFS_SB_VERSION_DIRV2BIT); 454 395 } 455 396 456 - #define XFS_SB_VERSION_HASLOGV2(sbp) xfs_sb_version_haslogv2(sbp) 457 397 static inline int xfs_sb_version_haslogv2(xfs_sb_t *sbp) 458 398 { 459 399 return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ 460 400 ((sbp)->sb_versionnum & XFS_SB_VERSION_LOGV2BIT); 461 401 } 462 402 463 - #define XFS_SB_VERSION_HASEXTFLGBIT(sbp) xfs_sb_version_hasextflgbit(sbp) 464 403 static inline int xfs_sb_version_hasextflgbit(xfs_sb_t *sbp) 465 404 { 466 405 return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ 467 406 ((sbp)->sb_versionnum & XFS_SB_VERSION_EXTFLGBIT); 468 407 } 469 408 470 - #define XFS_SB_VERSION_ADDEXTFLGBIT(sbp) xfs_sb_version_addextflgbit(sbp) 471 - static inline int xfs_sb_version_addextflgbit(xfs_sb_t *sbp) 472 - { 473 - return (sbp)->sb_versionnum = \ 474 - ((sbp)->sb_versionnum | XFS_SB_VERSION_EXTFLGBIT); 475 - } 476 - 477 - #define XFS_SB_VERSION_SUBEXTFLGBIT(sbp) xfs_sb_version_subextflgbit(sbp) 478 - static inline int xfs_sb_version_subextflgbit(xfs_sb_t *sbp) 479 - { 480 - return (sbp)->sb_versionnum = \ 481 - ((sbp)->sb_versionnum & ~XFS_SB_VERSION_EXTFLGBIT); 482 - } 483 - 484 - #define XFS_SB_VERSION_HASSECTOR(sbp) xfs_sb_version_hassector(sbp) 485 409 static inline int xfs_sb_version_hassector(xfs_sb_t *sbp) 486 410 { 487 411 return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ 488 412 ((sbp)->sb_versionnum & XFS_SB_VERSION_SECTORBIT); 489 413 } 490 414 491 - #define XFS_SB_VERSION_HASMOREBITS(sbp) xfs_sb_version_hasmorebits(sbp) 492 415 static inline int xfs_sb_version_hasmorebits(xfs_sb_t *sbp) 493 416 { 494 417 return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ ··· 449 476 * For example, for a bit defined as XFS_SB_VERSION2_FUNBIT, has a macro: 450 477 * 451 478 * SB_VERSION_HASFUNBIT(xfs_sb_t *sbp) 452 - * ((XFS_SB_VERSION_HASMOREBITS(sbp) && 479 + * ((xfs_sb_version_hasmorebits(sbp) && 453 480 * ((sbp)->sb_features2 & XFS_SB_VERSION2_FUNBIT) 454 481 */ 455 482 456 483 static inline int xfs_sb_version_haslazysbcount(xfs_sb_t *sbp) 457 484 { 458 - return (XFS_SB_VERSION_HASMOREBITS(sbp) && \ 485 + return (xfs_sb_version_hasmorebits(sbp) && \ 459 486 ((sbp)->sb_features2 & XFS_SB_VERSION2_LAZYSBCOUNTBIT)); 460 487 } 461 488 462 - #define XFS_SB_VERSION_HASATTR2(sbp) xfs_sb_version_hasattr2(sbp) 463 489 static inline int xfs_sb_version_hasattr2(xfs_sb_t *sbp) 464 490 { 465 - return (XFS_SB_VERSION_HASMOREBITS(sbp)) && \ 491 + return (xfs_sb_version_hasmorebits(sbp)) && \ 466 492 ((sbp)->sb_features2 & XFS_SB_VERSION2_ATTR2BIT); 467 493 } 468 494 469 - #define XFS_SB_VERSION_ADDATTR2(sbp) xfs_sb_version_addattr2(sbp) 470 495 static inline void xfs_sb_version_addattr2(xfs_sb_t *sbp) 471 496 { 472 497 ((sbp)->sb_versionnum = \
+3 -3
fs/xfs/xfs_utils.c
··· 339 339 ip->i_d.di_onlink = 0; 340 340 memset(&(ip->i_d.di_pad[0]), 0, sizeof(ip->i_d.di_pad)); 341 341 mp = tp->t_mountp; 342 - if (!XFS_SB_VERSION_HASNLINK(&mp->m_sb)) { 342 + if (!xfs_sb_version_hasnlink(&mp->m_sb)) { 343 343 spin_lock(&mp->m_sb_lock); 344 - if (!XFS_SB_VERSION_HASNLINK(&mp->m_sb)) { 345 - XFS_SB_VERSION_ADDNLINK(&mp->m_sb); 344 + if (!xfs_sb_version_hasnlink(&mp->m_sb)) { 345 + xfs_sb_version_addnlink(&mp->m_sb); 346 346 spin_unlock(&mp->m_sb_lock); 347 347 xfs_mod_sb(tp, XFS_SB_VERSIONNUM); 348 348 } else {
+4 -5
fs/xfs/xfs_vfsops.c
··· 330 330 int ronly = (mp->m_flags & XFS_MOUNT_RDONLY); 331 331 332 332 /* Fail a mount where the logbuf is smaller then the log stripe */ 333 - if (XFS_SB_VERSION_HASLOGV2(&mp->m_sb)) { 333 + if (xfs_sb_version_haslogv2(&mp->m_sb)) { 334 334 if ((ap->logbufsize <= 0) && 335 335 (mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE)) { 336 336 mp->m_logbsize = mp->m_sb.sb_logsunit; ··· 349 349 } 350 350 } 351 351 352 - if (XFS_SB_VERSION_HASATTR2(&mp->m_sb)) { 352 + if (xfs_sb_version_hasattr2(&mp->m_sb)) 353 353 mp->m_flags |= XFS_MOUNT_ATTR2; 354 - } 355 354 356 355 /* 357 356 * prohibit r/w mounts of read-only filesystems ··· 365 366 * check for shared mount. 366 367 */ 367 368 if (ap->flags & XFSMNT_SHARED) { 368 - if (!XFS_SB_VERSION_HASSHARED(&mp->m_sb)) 369 + if (!xfs_sb_version_hasshared(&mp->m_sb)) 369 370 return XFS_ERROR(EINVAL); 370 371 371 372 /* ··· 511 512 if (!error && logdev && logdev != ddev) { 512 513 unsigned int log_sector_size = BBSIZE; 513 514 514 - if (XFS_SB_VERSION_HASSECTOR(&mp->m_sb)) 515 + if (xfs_sb_version_hassector(&mp->m_sb)) 515 516 log_sector_size = mp->m_sb.sb_logsectsize; 516 517 error = xfs_setsize_buftarg(mp->m_logdev_targp, 517 518 mp->m_sb.sb_blocksize,
+1 -1
fs/xfs/xfs_vnodeops.c
··· 4132 4132 * actually need to zero the extent edges. Otherwise xfs_bunmapi 4133 4133 * will take care of it for us. 4134 4134 */ 4135 - if (rt && !XFS_SB_VERSION_HASEXTFLGBIT(&mp->m_sb)) { 4135 + if (rt && !xfs_sb_version_hasextflgbit(&mp->m_sb)) { 4136 4136 nimap = 1; 4137 4137 error = xfs_bmapi(NULL, ip, startoffset_fsb, 4138 4138 1, 0, NULL, 0, &imap, &nimap, NULL, NULL);