forked from Minki/linux
xfs: convert mount flags to features
Replace m_flags feature checks with xfs_has_<feature>() calls and rework the setup code to set flags in m_features. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
parent
8970a5b8a4
commit
0560f31a09
@ -224,7 +224,7 @@ xfs_attr_try_sf_addname(
|
||||
if (!error && !(args->op_flags & XFS_DA_OP_NOTIME))
|
||||
xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG);
|
||||
|
||||
if (dp->i_mount->m_flags & XFS_MOUNT_WSYNC)
|
||||
if (xfs_has_wsync(dp->i_mount))
|
||||
xfs_trans_set_sync(args->trans);
|
||||
|
||||
return error;
|
||||
@ -808,7 +808,7 @@ xfs_attr_set(
|
||||
* If this is a synchronous mount, make sure that the
|
||||
* transaction goes to disk before returning to the user.
|
||||
*/
|
||||
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
||||
if (xfs_has_wsync(mp))
|
||||
xfs_trans_set_sync(args->trans);
|
||||
|
||||
if (!(args->op_flags & XFS_DA_OP_NOTIME))
|
||||
|
@ -568,7 +568,7 @@ xfs_attr_shortform_bytesfit(
|
||||
* literal area, but for the old format we are done if there is no
|
||||
* space in the fixed attribute fork.
|
||||
*/
|
||||
if (!(mp->m_flags & XFS_MOUNT_ATTR2))
|
||||
if (!xfs_has_attr2(mp))
|
||||
return 0;
|
||||
|
||||
dsize = dp->i_df.if_bytes;
|
||||
@ -621,21 +621,27 @@ xfs_attr_shortform_bytesfit(
|
||||
}
|
||||
|
||||
/*
|
||||
* Switch on the ATTR2 superblock bit (implies also FEATURES2)
|
||||
* Switch on the ATTR2 superblock bit (implies also FEATURES2) unless:
|
||||
* - noattr2 mount option is set,
|
||||
* - on-disk version bit says it is already set, or
|
||||
* - the attr2 mount option is not set to enable automatic upgrade from attr1.
|
||||
*/
|
||||
STATIC void
|
||||
xfs_sbversion_add_attr2(xfs_mount_t *mp, xfs_trans_t *tp)
|
||||
xfs_sbversion_add_attr2(
|
||||
struct xfs_mount *mp,
|
||||
struct xfs_trans *tp)
|
||||
{
|
||||
if ((mp->m_flags & XFS_MOUNT_ATTR2) &&
|
||||
!(xfs_has_attr2(mp))) {
|
||||
spin_lock(&mp->m_sb_lock);
|
||||
if (!xfs_has_attr2(mp)) {
|
||||
xfs_add_attr2(mp);
|
||||
spin_unlock(&mp->m_sb_lock);
|
||||
xfs_log_sb(tp);
|
||||
} else
|
||||
spin_unlock(&mp->m_sb_lock);
|
||||
}
|
||||
if (xfs_has_noattr2(mp))
|
||||
return;
|
||||
if (mp->m_sb.sb_features2 & XFS_SB_VERSION2_ATTR2BIT)
|
||||
return;
|
||||
if (!xfs_has_attr2(mp))
|
||||
return;
|
||||
|
||||
spin_lock(&mp->m_sb_lock);
|
||||
xfs_add_attr2(mp);
|
||||
spin_unlock(&mp->m_sb_lock);
|
||||
xfs_log_sb(tp);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -810,8 +816,7 @@ xfs_attr_sf_removename(
|
||||
* Fix up the start offset of the attribute fork
|
||||
*/
|
||||
totsize -= size;
|
||||
if (totsize == sizeof(xfs_attr_sf_hdr_t) &&
|
||||
(mp->m_flags & XFS_MOUNT_ATTR2) &&
|
||||
if (totsize == sizeof(xfs_attr_sf_hdr_t) && xfs_has_attr2(mp) &&
|
||||
(dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
|
||||
!(args->op_flags & XFS_DA_OP_ADDNAME)) {
|
||||
xfs_attr_fork_remove(dp, args->trans);
|
||||
@ -821,7 +826,7 @@ xfs_attr_sf_removename(
|
||||
ASSERT(dp->i_forkoff);
|
||||
ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) ||
|
||||
(args->op_flags & XFS_DA_OP_ADDNAME) ||
|
||||
!(mp->m_flags & XFS_MOUNT_ATTR2) ||
|
||||
!xfs_has_attr2(mp) ||
|
||||
dp->i_df.if_format == XFS_DINODE_FMT_BTREE);
|
||||
xfs_trans_log_inode(args->trans, dp,
|
||||
XFS_ILOG_CORE | XFS_ILOG_ADATA);
|
||||
@ -997,7 +1002,7 @@ xfs_attr_shortform_allfit(
|
||||
bytes += xfs_attr_sf_entsize_byname(name_loc->namelen,
|
||||
be16_to_cpu(name_loc->valuelen));
|
||||
}
|
||||
if ((dp->i_mount->m_flags & XFS_MOUNT_ATTR2) &&
|
||||
if (xfs_has_attr2(dp->i_mount) &&
|
||||
(dp->i_df.if_format != XFS_DINODE_FMT_BTREE) &&
|
||||
(bytes == sizeof(struct xfs_attr_sf_hdr)))
|
||||
return -1;
|
||||
@ -1122,7 +1127,7 @@ xfs_attr3_leaf_to_shortform(
|
||||
goto out;
|
||||
|
||||
if (forkoff == -1) {
|
||||
ASSERT(dp->i_mount->m_flags & XFS_MOUNT_ATTR2);
|
||||
ASSERT(xfs_has_attr2(dp->i_mount));
|
||||
ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_BTREE);
|
||||
xfs_attr_fork_remove(dp, args->trans);
|
||||
goto out;
|
||||
|
@ -1047,7 +1047,7 @@ xfs_bmap_set_attrforkoff(
|
||||
ip->i_forkoff = xfs_attr_shortform_bytesfit(ip, size);
|
||||
if (!ip->i_forkoff)
|
||||
ip->i_forkoff = default_size;
|
||||
else if ((ip->i_mount->m_flags & XFS_MOUNT_ATTR2) && version)
|
||||
else if (xfs_has_attr2(ip->i_mount) && version)
|
||||
*version = 2;
|
||||
break;
|
||||
default:
|
||||
@ -3422,7 +3422,7 @@ xfs_bmap_compute_alignments(
|
||||
int stripe_align = 0;
|
||||
|
||||
/* stripe alignment for allocation is determined by mount parameters */
|
||||
if (mp->m_swidth && (mp->m_flags & XFS_MOUNT_SWALLOC))
|
||||
if (mp->m_swidth && xfs_has_swalloc(mp))
|
||||
stripe_align = mp->m_swidth;
|
||||
else if (mp->m_dalign)
|
||||
stripe_align = mp->m_dalign;
|
||||
|
@ -712,7 +712,7 @@ xfs_ialloc_ag_alloc(
|
||||
*/
|
||||
isaligned = 0;
|
||||
if (igeo->ialloc_align) {
|
||||
ASSERT(!(args.mp->m_flags & XFS_MOUNT_NOALIGN));
|
||||
ASSERT(!xfs_has_noalign(args.mp));
|
||||
args.alignment = args.mp->m_dalign;
|
||||
isaligned = 1;
|
||||
} else
|
||||
@ -1953,8 +1953,7 @@ xfs_difree_inobt(
|
||||
* remove the chunk if the block size is large enough for multiple inode
|
||||
* chunks (that might not be free).
|
||||
*/
|
||||
if (!(mp->m_flags & XFS_MOUNT_IKEEP) &&
|
||||
rec.ir_free == XFS_INOBT_ALL_FREE &&
|
||||
if (!xfs_has_ikeep(mp) && rec.ir_free == XFS_INOBT_ALL_FREE &&
|
||||
mp->m_sb.sb_inopblock <= XFS_INODES_PER_CHUNK) {
|
||||
struct xfs_perag *pag = agbp->b_pag;
|
||||
|
||||
@ -2098,9 +2097,8 @@ xfs_difree_finobt(
|
||||
* enough for multiple chunks. Leave the finobt record to remain in sync
|
||||
* with the inobt.
|
||||
*/
|
||||
if (rec.ir_free == XFS_INOBT_ALL_FREE &&
|
||||
mp->m_sb.sb_inopblock <= XFS_INODES_PER_CHUNK &&
|
||||
!(mp->m_flags & XFS_MOUNT_IKEEP)) {
|
||||
if (!xfs_has_ikeep(mp) && rec.ir_free == XFS_INOBT_ALL_FREE &&
|
||||
mp->m_sb.sb_inopblock <= XFS_INODES_PER_CHUNK) {
|
||||
error = xfs_btree_delete(cur, &i);
|
||||
if (error)
|
||||
goto error;
|
||||
|
@ -480,7 +480,7 @@ xfs_scrub_metadata(
|
||||
if (XFS_FORCED_SHUTDOWN(mp))
|
||||
goto out;
|
||||
error = -ENOTRECOVERABLE;
|
||||
if (mp->m_flags & XFS_MOUNT_NORECOVERY)
|
||||
if (xfs_has_norecovery(mp))
|
||||
goto out;
|
||||
|
||||
error = xchk_validate_inputs(mp, sm);
|
||||
|
@ -232,7 +232,7 @@ xfs_acl_set_mode(
|
||||
inode->i_ctime = current_time(inode);
|
||||
xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
||||
if (xfs_has_wsync(mp))
|
||||
xfs_trans_set_sync(tp);
|
||||
return xfs_trans_commit(tp);
|
||||
}
|
||||
|
@ -1822,7 +1822,7 @@ xfs_swap_extents(
|
||||
* If this is a synchronous mount, make sure that the
|
||||
* transaction goes to disk before returning to the user.
|
||||
*/
|
||||
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
||||
if (xfs_has_wsync(mp))
|
||||
xfs_trans_set_sync(tp);
|
||||
|
||||
error = xfs_trans_commit(tp);
|
||||
|
@ -169,7 +169,7 @@ xfs_ioc_trim(
|
||||
* We haven't recovered the log, so we cannot use our bnobt-guided
|
||||
* storage zapping commands.
|
||||
*/
|
||||
if (mp->m_flags & XFS_MOUNT_NORECOVERY)
|
||||
if (xfs_has_norecovery(mp))
|
||||
return -EROFS;
|
||||
|
||||
if (copy_from_user(&range, urange, sizeof(range)))
|
||||
|
@ -63,7 +63,7 @@ xfs_fs_encode_fh(
|
||||
* large enough filesystem may contain them, thus the slightly
|
||||
* confusing looking conditional below.
|
||||
*/
|
||||
if (!(XFS_M(inode->i_sb)->m_flags & XFS_MOUNT_SMALL_INUMS) ||
|
||||
if (!xfs_has_small_inums(XFS_M(inode->i_sb)) ||
|
||||
(XFS_M(inode->i_sb)->m_flags & XFS_MOUNT_32BITINODES))
|
||||
fileid_type |= XFS_FILEID_TYPE_64FLAG;
|
||||
|
||||
|
@ -1122,7 +1122,7 @@ static inline bool xfs_file_sync_writes(struct file *filp)
|
||||
{
|
||||
struct xfs_inode *ip = XFS_I(file_inode(filp));
|
||||
|
||||
if (ip->i_mount->m_flags & XFS_MOUNT_WSYNC)
|
||||
if (xfs_has_wsync(ip->i_mount))
|
||||
return true;
|
||||
if (filp->f_flags & (__O_SYNC | O_DSYNC))
|
||||
return true;
|
||||
|
@ -21,7 +21,7 @@ static inline int
|
||||
xfs_inode_is_filestream(
|
||||
struct xfs_inode *ip)
|
||||
{
|
||||
return (ip->i_mount->m_flags & XFS_MOUNT_FILESTREAMS) ||
|
||||
return xfs_has_filestreams(ip->i_mount) ||
|
||||
(ip->i_diflags & XFS_DIFLAG_FILESTREAM);
|
||||
}
|
||||
|
||||
|
@ -602,7 +602,7 @@ xfs_iget_cache_miss(
|
||||
|
||||
/*
|
||||
* For version 5 superblocks, if we are initialising a new inode and we
|
||||
* are not utilising the XFS_MOUNT_IKEEP inode cluster mode, we can
|
||||
* are not utilising the XFS_FEAT_IKEEP inode cluster mode, we can
|
||||
* simply build the new inode core with a random generation number.
|
||||
*
|
||||
* For version 4 (and older) superblocks, log recovery is dependent on
|
||||
@ -611,7 +611,7 @@ xfs_iget_cache_miss(
|
||||
* initializing new inodes.
|
||||
*/
|
||||
if (xfs_has_v3inodes(mp) &&
|
||||
(flags & XFS_IGET_CREATE) && !(mp->m_flags & XFS_MOUNT_IKEEP)) {
|
||||
(flags & XFS_IGET_CREATE) && !xfs_has_ikeep(mp)) {
|
||||
VFS_I(ip)->i_generation = prandom_u32();
|
||||
} else {
|
||||
struct xfs_buf *bp;
|
||||
@ -967,8 +967,7 @@ static inline bool
|
||||
xfs_want_reclaim_sick(
|
||||
struct xfs_mount *mp)
|
||||
{
|
||||
return (mp->m_flags & XFS_MOUNT_UNMOUNTING) ||
|
||||
(mp->m_flags & XFS_MOUNT_NORECOVERY) ||
|
||||
return (mp->m_flags & XFS_MOUNT_UNMOUNTING) || xfs_has_norecovery(mp) ||
|
||||
XFS_FORCED_SHUTDOWN(mp);
|
||||
}
|
||||
|
||||
|
@ -826,8 +826,7 @@ xfs_init_new_inode(
|
||||
inode->i_rdev = rdev;
|
||||
ip->i_projid = prid;
|
||||
|
||||
if (dir && !(dir->i_mode & S_ISGID) &&
|
||||
(mp->m_flags & XFS_MOUNT_GRPID)) {
|
||||
if (dir && !(dir->i_mode & S_ISGID) && xfs_has_grpid(mp)) {
|
||||
inode_fsuid_set(inode, mnt_userns);
|
||||
inode->i_gid = dir->i_gid;
|
||||
inode->i_mode = mode;
|
||||
@ -1068,7 +1067,7 @@ xfs_create(
|
||||
* create transaction goes to disk before returning to
|
||||
* the user.
|
||||
*/
|
||||
if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC))
|
||||
if (xfs_has_wsync(mp) || xfs_has_dirsync(mp))
|
||||
xfs_trans_set_sync(tp);
|
||||
|
||||
/*
|
||||
@ -1160,7 +1159,7 @@ xfs_create_tmpfile(
|
||||
if (error)
|
||||
goto out_trans_cancel;
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
||||
if (xfs_has_wsync(mp))
|
||||
xfs_trans_set_sync(tp);
|
||||
|
||||
/*
|
||||
@ -1294,7 +1293,7 @@ xfs_link(
|
||||
* link transaction goes to disk before returning to
|
||||
* the user.
|
||||
*/
|
||||
if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC))
|
||||
if (xfs_has_wsync(mp) || xfs_has_dirsync(mp))
|
||||
xfs_trans_set_sync(tp);
|
||||
|
||||
return xfs_trans_commit(tp);
|
||||
@ -1679,7 +1678,7 @@ xfs_inode_needs_inactive(
|
||||
return false;
|
||||
|
||||
/* If the log isn't running, push inodes straight to reclaim. */
|
||||
if (XFS_FORCED_SHUTDOWN(mp) || (mp->m_flags & XFS_MOUNT_NORECOVERY))
|
||||
if (XFS_FORCED_SHUTDOWN(mp) || xfs_has_norecovery(mp))
|
||||
return false;
|
||||
|
||||
/* Metadata inodes require explicit resource cleanup. */
|
||||
@ -2855,7 +2854,7 @@ xfs_remove(
|
||||
* remove transaction goes to disk before returning to
|
||||
* the user.
|
||||
*/
|
||||
if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC))
|
||||
if (xfs_has_wsync(mp) || xfs_has_dirsync(mp))
|
||||
xfs_trans_set_sync(tp);
|
||||
|
||||
error = xfs_trans_commit(tp);
|
||||
@ -2932,7 +2931,7 @@ xfs_finish_rename(
|
||||
* If this is a synchronous mount, make sure that the rename transaction
|
||||
* goes to disk before returning to the user.
|
||||
*/
|
||||
if (tp->t_mountp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC))
|
||||
if (xfs_has_wsync(tp->t_mountp) || xfs_has_dirsync(tp->t_mountp))
|
||||
xfs_trans_set_sync(tp);
|
||||
|
||||
return xfs_trans_commit(tp);
|
||||
|
@ -400,8 +400,7 @@ enum layout_break_reason {
|
||||
* new subdirectory gets S_ISGID bit from parent.
|
||||
*/
|
||||
#define XFS_INHERIT_GID(pip) \
|
||||
(((pip)->i_mount->m_flags & XFS_MOUNT_GRPID) || \
|
||||
(VFS_I(pip)->i_mode & S_ISGID))
|
||||
(xfs_has_grpid((pip)->i_mount) || (VFS_I(pip)->i_mode & S_ISGID))
|
||||
|
||||
int xfs_release(struct xfs_inode *ip);
|
||||
void xfs_inactive(struct xfs_inode *ip);
|
||||
|
@ -1237,8 +1237,7 @@ xfs_ioctl_setattr_prepare_dax(
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
return;
|
||||
|
||||
if ((mp->m_flags & XFS_MOUNT_DAX_ALWAYS) ||
|
||||
(mp->m_flags & XFS_MOUNT_DAX_NEVER))
|
||||
if (xfs_has_dax_always(mp) || xfs_has_dax_never(mp))
|
||||
return;
|
||||
|
||||
if (((fa->fsx_xflags & FS_XFLAG_DAX) &&
|
||||
@ -1274,7 +1273,7 @@ xfs_ioctl_setattr_get_trans(
|
||||
if (error)
|
||||
goto out_error;
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
||||
if (xfs_has_wsync(mp))
|
||||
xfs_trans_set_sync(tp);
|
||||
|
||||
return tp;
|
||||
|
@ -132,7 +132,7 @@ xfs_eof_alignment(
|
||||
* If mounted with the "-o swalloc" option the alignment is
|
||||
* increased from the strip unit size to the stripe width.
|
||||
*/
|
||||
if (mp->m_swidth && (mp->m_flags & XFS_MOUNT_SWALLOC))
|
||||
if (mp->m_swidth && xfs_has_swalloc(mp))
|
||||
align = mp->m_swidth;
|
||||
else if (mp->m_dalign)
|
||||
align = mp->m_dalign;
|
||||
@ -994,7 +994,7 @@ xfs_buffered_write_iomap_begin(
|
||||
* Determine the initial size of the preallocation.
|
||||
* We clean up any extra preallocation when the file is closed.
|
||||
*/
|
||||
if (mp->m_flags & XFS_MOUNT_ALLOCSIZE)
|
||||
if (xfs_has_allocsize(mp))
|
||||
prealloc_blocks = mp->m_allocsize_blocks;
|
||||
else
|
||||
prealloc_blocks = xfs_iomap_prealloc_size(ip, allocfork,
|
||||
|
@ -558,10 +558,10 @@ xfs_stat_blksize(
|
||||
* default buffered I/O size, return that, otherwise return the compat
|
||||
* default.
|
||||
*/
|
||||
if (mp->m_flags & XFS_MOUNT_LARGEIO) {
|
||||
if (xfs_has_large_iosize(mp)) {
|
||||
if (mp->m_swidth)
|
||||
return XFS_FSB_TO_B(mp, mp->m_swidth);
|
||||
if (mp->m_flags & XFS_MOUNT_ALLOCSIZE)
|
||||
if (xfs_has_allocsize(mp))
|
||||
return 1U << mp->m_allocsize_log;
|
||||
}
|
||||
|
||||
@ -808,7 +808,7 @@ xfs_setattr_nonsize(
|
||||
|
||||
XFS_STATS_INC(mp, xs_ig_attrchg);
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
||||
if (xfs_has_wsync(mp))
|
||||
xfs_trans_set_sync(tp);
|
||||
error = xfs_trans_commit(tp);
|
||||
|
||||
@ -1037,7 +1037,7 @@ xfs_setattr_size(
|
||||
|
||||
XFS_STATS_INC(mp, xs_ig_attrchg);
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
||||
if (xfs_has_wsync(mp))
|
||||
xfs_trans_set_sync(tp);
|
||||
|
||||
error = xfs_trans_commit(tp);
|
||||
@ -1287,11 +1287,11 @@ xfs_inode_should_enable_dax(
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_FS_DAX))
|
||||
return false;
|
||||
if (ip->i_mount->m_flags & XFS_MOUNT_DAX_NEVER)
|
||||
if (xfs_has_dax_never(ip->i_mount))
|
||||
return false;
|
||||
if (!xfs_inode_supports_dax(ip))
|
||||
return false;
|
||||
if (ip->i_mount->m_flags & XFS_MOUNT_DAX_ALWAYS)
|
||||
if (xfs_has_dax_always(ip->i_mount))
|
||||
return true;
|
||||
if (ip->i_diflags2 & XFS_DIFLAG2_DAX)
|
||||
return true;
|
||||
|
@ -356,7 +356,7 @@ xfs_log_writable(
|
||||
* mounts allow internal writes for log recovery and unmount purposes,
|
||||
* so don't restrict that case.
|
||||
*/
|
||||
if (mp->m_flags & XFS_MOUNT_NORECOVERY)
|
||||
if (xfs_has_norecovery(mp))
|
||||
return false;
|
||||
if (xfs_readonly_buftarg(mp->m_ddev_targp))
|
||||
return false;
|
||||
@ -633,7 +633,7 @@ xfs_log_mount(
|
||||
int error = 0;
|
||||
int min_logfsbs;
|
||||
|
||||
if (!(mp->m_flags & XFS_MOUNT_NORECOVERY)) {
|
||||
if (!xfs_has_norecovery(mp)) {
|
||||
xfs_notice(mp, "Mounting V%d Filesystem",
|
||||
XFS_SB_VERSION_NUM(&mp->m_sb));
|
||||
} else {
|
||||
@ -719,8 +719,8 @@ xfs_log_mount(
|
||||
* skip log recovery on a norecovery mount. pretend it all
|
||||
* just worked.
|
||||
*/
|
||||
if (!(mp->m_flags & XFS_MOUNT_NORECOVERY)) {
|
||||
int readonly = (mp->m_flags & XFS_MOUNT_RDONLY);
|
||||
if (!xfs_has_norecovery(mp)) {
|
||||
bool readonly = (mp->m_flags & XFS_MOUNT_RDONLY);
|
||||
|
||||
if (readonly)
|
||||
mp->m_flags &= ~XFS_MOUNT_RDONLY;
|
||||
@ -780,8 +780,8 @@ xfs_log_mount_finish(
|
||||
bool readonly = (mp->m_flags & XFS_MOUNT_RDONLY);
|
||||
int error = 0;
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_NORECOVERY) {
|
||||
ASSERT(mp->m_flags & XFS_MOUNT_RDONLY);
|
||||
if (xfs_has_norecovery(mp)) {
|
||||
ASSERT(readonly);
|
||||
return 0;
|
||||
} else if (readonly) {
|
||||
/* Allow unlinked processing to proceed */
|
||||
@ -3941,7 +3941,7 @@ xfs_log_check_lsn(
|
||||
* resets the in-core LSN. We can't validate in this mode, but
|
||||
* modifications are not allowed anyways so just return true.
|
||||
*/
|
||||
if (mp->m_flags & XFS_MOUNT_NORECOVERY)
|
||||
if (xfs_has_norecovery(mp))
|
||||
return true;
|
||||
|
||||
/*
|
||||
|
@ -571,7 +571,7 @@ xlog_discard_busy_extents(
|
||||
struct blk_plug plug;
|
||||
int error = 0;
|
||||
|
||||
ASSERT(mp->m_flags & XFS_MOUNT_DISCARD);
|
||||
ASSERT(xfs_has_discard(mp));
|
||||
|
||||
blk_start_plug(&plug);
|
||||
list_for_each_entry(busyp, list, list) {
|
||||
@ -633,7 +633,7 @@ xlog_cil_committed(
|
||||
|
||||
xfs_extent_busy_sort(&ctx->busy_extents);
|
||||
xfs_extent_busy_clear(mp, &ctx->busy_extents,
|
||||
(mp->m_flags & XFS_MOUNT_DISCARD) && !abort);
|
||||
xfs_has_discard(mp) && !abort);
|
||||
|
||||
spin_lock(&ctx->cil->xc_push_lock);
|
||||
list_del(&ctx->committing);
|
||||
|
@ -62,7 +62,7 @@ xfs_uuid_mount(
|
||||
/* Publish UUID in struct super_block */
|
||||
uuid_copy(&mp->m_super->s_uuid, uuid);
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_NOUUID)
|
||||
if (xfs_has_nouuid(mp))
|
||||
return 0;
|
||||
|
||||
if (uuid_is_null(uuid)) {
|
||||
@ -104,7 +104,7 @@ xfs_uuid_unmount(
|
||||
uuid_t *uuid = &mp->m_sb.sb_uuid;
|
||||
int i;
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_NOUUID)
|
||||
if (xfs_has_nouuid(mp))
|
||||
return;
|
||||
|
||||
mutex_lock(&xfs_uuid_table_mutex);
|
||||
@ -350,8 +350,7 @@ xfs_update_alignment(
|
||||
sbp->sb_unit = mp->m_dalign;
|
||||
sbp->sb_width = mp->m_swidth;
|
||||
mp->m_update_sb = true;
|
||||
} else if ((mp->m_flags & XFS_MOUNT_NOALIGN) != XFS_MOUNT_NOALIGN &&
|
||||
xfs_has_dalign(mp)) {
|
||||
} else if (!xfs_has_noalign(mp) && xfs_has_dalign(mp)) {
|
||||
mp->m_dalign = sbp->sb_unit;
|
||||
mp->m_swidth = sbp->sb_width;
|
||||
}
|
||||
@ -783,12 +782,15 @@ xfs_mountfs(
|
||||
/*
|
||||
* Now that we've recovered any pending superblock feature bit
|
||||
* additions, we can finish setting up the attr2 behaviour for the
|
||||
* mount. If no attr2 mount options were specified, the we use the
|
||||
* behaviour specified by the superblock feature bit.
|
||||
* mount. The noattr2 option overrides the superblock flag, so only
|
||||
* check the superblock feature flag if the mount option is not set.
|
||||
*/
|
||||
if (!(mp->m_flags & (XFS_MOUNT_ATTR2|XFS_MOUNT_NOATTR2)) &&
|
||||
xfs_has_attr2(mp))
|
||||
mp->m_flags |= XFS_MOUNT_ATTR2;
|
||||
if (xfs_has_noattr2(mp)) {
|
||||
mp->m_features &= ~XFS_FEAT_ATTR2;
|
||||
} else if (!xfs_has_attr2(mp) &&
|
||||
(mp->m_sb.sb_features2 & XFS_SB_VERSION2_ATTR2BIT)) {
|
||||
mp->m_features |= XFS_FEAT_ATTR2;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get and sanity-check the root inode.
|
||||
@ -890,10 +892,8 @@ xfs_mountfs(
|
||||
* We use the same quiesce mechanism as the rw->ro remount, as they are
|
||||
* semantically identical operations.
|
||||
*/
|
||||
if ((mp->m_flags & (XFS_MOUNT_RDONLY|XFS_MOUNT_NORECOVERY)) ==
|
||||
XFS_MOUNT_RDONLY) {
|
||||
if ((mp->m_flags & XFS_MOUNT_RDONLY) && !xfs_has_norecovery(mp))
|
||||
xfs_log_clean(mp);
|
||||
}
|
||||
|
||||
/*
|
||||
* Complete the quota initialisation, post-log-replay component.
|
||||
|
@ -370,32 +370,12 @@ __XFS_HAS_FEAT(nouuid, NOUUID)
|
||||
must be synchronous except
|
||||
for space allocations */
|
||||
#define XFS_MOUNT_UNMOUNTING (1ULL << 1) /* filesystem is unmounting */
|
||||
#define XFS_MOUNT_WAS_CLEAN (1ULL << 3)
|
||||
#define XFS_MOUNT_FS_SHUTDOWN (1ULL << 4) /* atomic stop of all filesystem
|
||||
#define XFS_MOUNT_WAS_CLEAN (1ULL << 2)
|
||||
#define XFS_MOUNT_FS_SHUTDOWN (1ULL << 3) /* atomic stop of all filesystem
|
||||
operations, typically for
|
||||
disk errors in metadata */
|
||||
#define XFS_MOUNT_DISCARD (1ULL << 5) /* discard unused blocks */
|
||||
#define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment
|
||||
allocations */
|
||||
#define XFS_MOUNT_ATTR2 (1ULL << 8) /* allow use of attr2 format */
|
||||
#define XFS_MOUNT_GRPID (1ULL << 9) /* group-ID assigned from directory */
|
||||
#define XFS_MOUNT_NORECOVERY (1ULL << 10) /* no recovery - dirty fs */
|
||||
#define XFS_MOUNT_ALLOCSIZE (1ULL << 12) /* specified allocation size */
|
||||
#define XFS_MOUNT_SMALL_INUMS (1ULL << 14) /* user wants 32bit inodes */
|
||||
#define XFS_MOUNT_32BITINODES (1ULL << 15) /* inode32 allocator active */
|
||||
#define XFS_MOUNT_NOUUID (1ULL << 16) /* ignore uuid during mount */
|
||||
#define XFS_MOUNT_IKEEP (1ULL << 18) /* keep empty inode clusters*/
|
||||
#define XFS_MOUNT_SWALLOC (1ULL << 19) /* turn on stripe width
|
||||
* allocation */
|
||||
#define XFS_MOUNT_RDONLY (1ULL << 20) /* read-only fs */
|
||||
#define XFS_MOUNT_DIRSYNC (1ULL << 21) /* synchronous directory ops */
|
||||
#define XFS_MOUNT_LARGEIO (1ULL << 22) /* report large preferred
|
||||
* I/O size in stat() */
|
||||
#define XFS_MOUNT_FILESTREAMS (1ULL << 24) /* enable the filestreams
|
||||
allocator */
|
||||
#define XFS_MOUNT_NOATTR2 (1ULL << 25) /* disable use of attr2 format */
|
||||
#define XFS_MOUNT_DAX_ALWAYS (1ULL << 26)
|
||||
#define XFS_MOUNT_DAX_NEVER (1ULL << 27)
|
||||
#define XFS_MOUNT_RDONLY (1ULL << 4) /* read-only fs */
|
||||
|
||||
/*
|
||||
* If set, inactivation worker threads will be scheduled to process queued
|
||||
|
@ -84,15 +84,15 @@ xfs_mount_set_dax_mode(
|
||||
{
|
||||
switch (mode) {
|
||||
case XFS_DAX_INODE:
|
||||
mp->m_flags &= ~(XFS_MOUNT_DAX_ALWAYS | XFS_MOUNT_DAX_NEVER);
|
||||
mp->m_features &= ~(XFS_FEAT_DAX_ALWAYS | XFS_FEAT_DAX_NEVER);
|
||||
break;
|
||||
case XFS_DAX_ALWAYS:
|
||||
mp->m_flags |= XFS_MOUNT_DAX_ALWAYS;
|
||||
mp->m_flags &= ~XFS_MOUNT_DAX_NEVER;
|
||||
mp->m_features |= XFS_FEAT_DAX_ALWAYS;
|
||||
mp->m_features &= ~XFS_FEAT_DAX_NEVER;
|
||||
break;
|
||||
case XFS_DAX_NEVER:
|
||||
mp->m_flags |= XFS_MOUNT_DAX_NEVER;
|
||||
mp->m_flags &= ~XFS_MOUNT_DAX_ALWAYS;
|
||||
mp->m_features |= XFS_FEAT_DAX_NEVER;
|
||||
mp->m_features &= ~XFS_FEAT_DAX_ALWAYS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -176,33 +176,32 @@ xfs_fs_show_options(
|
||||
{
|
||||
static struct proc_xfs_info xfs_info_set[] = {
|
||||
/* the few simple ones we can get from the mount struct */
|
||||
{ XFS_MOUNT_IKEEP, ",ikeep" },
|
||||
{ XFS_MOUNT_WSYNC, ",wsync" },
|
||||
{ XFS_MOUNT_NOALIGN, ",noalign" },
|
||||
{ XFS_MOUNT_SWALLOC, ",swalloc" },
|
||||
{ XFS_MOUNT_NOUUID, ",nouuid" },
|
||||
{ XFS_MOUNT_NORECOVERY, ",norecovery" },
|
||||
{ XFS_MOUNT_ATTR2, ",attr2" },
|
||||
{ XFS_MOUNT_FILESTREAMS, ",filestreams" },
|
||||
{ XFS_MOUNT_GRPID, ",grpid" },
|
||||
{ XFS_MOUNT_DISCARD, ",discard" },
|
||||
{ XFS_MOUNT_LARGEIO, ",largeio" },
|
||||
{ XFS_MOUNT_DAX_ALWAYS, ",dax=always" },
|
||||
{ XFS_MOUNT_DAX_NEVER, ",dax=never" },
|
||||
{ XFS_FEAT_IKEEP, ",ikeep" },
|
||||
{ XFS_FEAT_WSYNC, ",wsync" },
|
||||
{ XFS_FEAT_NOALIGN, ",noalign" },
|
||||
{ XFS_FEAT_SWALLOC, ",swalloc" },
|
||||
{ XFS_FEAT_NOUUID, ",nouuid" },
|
||||
{ XFS_FEAT_NORECOVERY, ",norecovery" },
|
||||
{ XFS_FEAT_ATTR2, ",attr2" },
|
||||
{ XFS_FEAT_FILESTREAMS, ",filestreams" },
|
||||
{ XFS_FEAT_GRPID, ",grpid" },
|
||||
{ XFS_FEAT_DISCARD, ",discard" },
|
||||
{ XFS_FEAT_LARGE_IOSIZE, ",largeio" },
|
||||
{ XFS_FEAT_DAX_ALWAYS, ",dax=always" },
|
||||
{ XFS_FEAT_DAX_NEVER, ",dax=never" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
struct xfs_mount *mp = XFS_M(root->d_sb);
|
||||
struct proc_xfs_info *xfs_infop;
|
||||
|
||||
for (xfs_infop = xfs_info_set; xfs_infop->flag; xfs_infop++) {
|
||||
if (mp->m_flags & xfs_infop->flag)
|
||||
if (mp->m_features & xfs_infop->flag)
|
||||
seq_puts(m, xfs_infop->str);
|
||||
}
|
||||
|
||||
seq_printf(m, ",inode%d",
|
||||
(mp->m_flags & XFS_MOUNT_SMALL_INUMS) ? 32 : 64);
|
||||
seq_printf(m, ",inode%d", xfs_has_small_inums(mp) ? 32 : 64);
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_ALLOCSIZE)
|
||||
if (xfs_has_allocsize(mp))
|
||||
seq_printf(m, ",allocsize=%dk",
|
||||
(1 << mp->m_allocsize_log) >> 10);
|
||||
|
||||
@ -247,10 +246,10 @@ xfs_fs_show_options(
|
||||
/*
|
||||
* Set parameters for inode allocation heuristics, taking into account
|
||||
* filesystem size and inode32/inode64 mount options; i.e. specifically
|
||||
* whether or not XFS_MOUNT_SMALL_INUMS is set.
|
||||
* whether or not XFS_FEAT_SMALL_INUMS is set.
|
||||
*
|
||||
* Inode allocation patterns are altered only if inode32 is requested
|
||||
* (XFS_MOUNT_SMALL_INUMS), and the filesystem is sufficiently large.
|
||||
* (XFS_FEAT_SMALL_INUMS), and the filesystem is sufficiently large.
|
||||
* If altered, XFS_MOUNT_32BITINODES is set as well.
|
||||
*
|
||||
* An agcount independent of that in the mount structure is provided
|
||||
@ -296,7 +295,7 @@ xfs_set_inode_alloc(
|
||||
* sufficiently large, set XFS_MOUNT_32BITINODES if we must alter
|
||||
* the allocator to accommodate the request.
|
||||
*/
|
||||
if ((mp->m_flags & XFS_MOUNT_SMALL_INUMS) && ino > XFS_MAXINUMBER_32)
|
||||
if (xfs_has_small_inums(mp) && ino > XFS_MAXINUMBER_32)
|
||||
mp->m_flags |= XFS_MOUNT_32BITINODES;
|
||||
else
|
||||
mp->m_flags &= ~XFS_MOUNT_32BITINODES;
|
||||
@ -952,8 +951,7 @@ xfs_finish_flags(
|
||||
/*
|
||||
* V5 filesystems always use attr2 format for attributes.
|
||||
*/
|
||||
if (xfs_has_crc(mp) &&
|
||||
(mp->m_flags & XFS_MOUNT_NOATTR2)) {
|
||||
if (xfs_has_crc(mp) && xfs_has_noattr2(mp)) {
|
||||
xfs_warn(mp, "Cannot mount a V5 filesystem as noattr2. "
|
||||
"attr2 is always enabled for V5 filesystems.");
|
||||
return -EINVAL;
|
||||
@ -1168,7 +1166,7 @@ xfs_fs_warn_deprecated(
|
||||
* already had the flag set
|
||||
*/
|
||||
if ((fc->purpose & FS_CONTEXT_FOR_RECONFIGURE) &&
|
||||
!!(XFS_M(fc->root->d_sb)->m_flags & flag) == value)
|
||||
!!(XFS_M(fc->root->d_sb)->m_features & flag) == value)
|
||||
return;
|
||||
xfs_warn(fc->s_fs_info, "%s mount option is deprecated.", param->key);
|
||||
}
|
||||
@ -1216,27 +1214,27 @@ xfs_fs_parse_param(
|
||||
if (suffix_kstrtoint(param->string, 10, &size))
|
||||
return -EINVAL;
|
||||
parsing_mp->m_allocsize_log = ffs(size) - 1;
|
||||
parsing_mp->m_flags |= XFS_MOUNT_ALLOCSIZE;
|
||||
parsing_mp->m_features |= XFS_FEAT_ALLOCSIZE;
|
||||
return 0;
|
||||
case Opt_grpid:
|
||||
case Opt_bsdgroups:
|
||||
parsing_mp->m_flags |= XFS_MOUNT_GRPID;
|
||||
parsing_mp->m_features |= XFS_FEAT_GRPID;
|
||||
return 0;
|
||||
case Opt_nogrpid:
|
||||
case Opt_sysvgroups:
|
||||
parsing_mp->m_flags &= ~XFS_MOUNT_GRPID;
|
||||
parsing_mp->m_features &= ~XFS_FEAT_GRPID;
|
||||
return 0;
|
||||
case Opt_wsync:
|
||||
parsing_mp->m_flags |= XFS_MOUNT_WSYNC;
|
||||
parsing_mp->m_features |= XFS_FEAT_WSYNC;
|
||||
return 0;
|
||||
case Opt_norecovery:
|
||||
parsing_mp->m_flags |= XFS_MOUNT_NORECOVERY;
|
||||
parsing_mp->m_features |= XFS_FEAT_NORECOVERY;
|
||||
return 0;
|
||||
case Opt_noalign:
|
||||
parsing_mp->m_flags |= XFS_MOUNT_NOALIGN;
|
||||
parsing_mp->m_features |= XFS_FEAT_NOALIGN;
|
||||
return 0;
|
||||
case Opt_swalloc:
|
||||
parsing_mp->m_flags |= XFS_MOUNT_SWALLOC;
|
||||
parsing_mp->m_features |= XFS_FEAT_SWALLOC;
|
||||
return 0;
|
||||
case Opt_sunit:
|
||||
parsing_mp->m_dalign = result.uint_32;
|
||||
@ -1245,22 +1243,22 @@ xfs_fs_parse_param(
|
||||
parsing_mp->m_swidth = result.uint_32;
|
||||
return 0;
|
||||
case Opt_inode32:
|
||||
parsing_mp->m_flags |= XFS_MOUNT_SMALL_INUMS;
|
||||
parsing_mp->m_features |= XFS_FEAT_SMALL_INUMS;
|
||||
return 0;
|
||||
case Opt_inode64:
|
||||
parsing_mp->m_flags &= ~XFS_MOUNT_SMALL_INUMS;
|
||||
parsing_mp->m_features &= ~XFS_FEAT_SMALL_INUMS;
|
||||
return 0;
|
||||
case Opt_nouuid:
|
||||
parsing_mp->m_flags |= XFS_MOUNT_NOUUID;
|
||||
parsing_mp->m_features |= XFS_FEAT_NOUUID;
|
||||
return 0;
|
||||
case Opt_largeio:
|
||||
parsing_mp->m_flags |= XFS_MOUNT_LARGEIO;
|
||||
parsing_mp->m_features |= XFS_FEAT_LARGE_IOSIZE;
|
||||
return 0;
|
||||
case Opt_nolargeio:
|
||||
parsing_mp->m_flags &= ~XFS_MOUNT_LARGEIO;
|
||||
parsing_mp->m_features &= ~XFS_FEAT_LARGE_IOSIZE;
|
||||
return 0;
|
||||
case Opt_filestreams:
|
||||
parsing_mp->m_flags |= XFS_MOUNT_FILESTREAMS;
|
||||
parsing_mp->m_features |= XFS_FEAT_FILESTREAMS;
|
||||
return 0;
|
||||
case Opt_noquota:
|
||||
parsing_mp->m_qflags &= ~XFS_ALL_QUOTA_ACCT;
|
||||
@ -1293,10 +1291,10 @@ xfs_fs_parse_param(
|
||||
parsing_mp->m_qflags &= ~XFS_GQUOTA_ENFD;
|
||||
return 0;
|
||||
case Opt_discard:
|
||||
parsing_mp->m_flags |= XFS_MOUNT_DISCARD;
|
||||
parsing_mp->m_features |= XFS_FEAT_DISCARD;
|
||||
return 0;
|
||||
case Opt_nodiscard:
|
||||
parsing_mp->m_flags &= ~XFS_MOUNT_DISCARD;
|
||||
parsing_mp->m_features &= ~XFS_FEAT_DISCARD;
|
||||
return 0;
|
||||
#ifdef CONFIG_FS_DAX
|
||||
case Opt_dax:
|
||||
@ -1308,20 +1306,20 @@ xfs_fs_parse_param(
|
||||
#endif
|
||||
/* Following mount options will be removed in September 2025 */
|
||||
case Opt_ikeep:
|
||||
xfs_fs_warn_deprecated(fc, param, XFS_MOUNT_IKEEP, true);
|
||||
parsing_mp->m_flags |= XFS_MOUNT_IKEEP;
|
||||
xfs_fs_warn_deprecated(fc, param, XFS_FEAT_IKEEP, true);
|
||||
parsing_mp->m_features |= XFS_FEAT_IKEEP;
|
||||
return 0;
|
||||
case Opt_noikeep:
|
||||
xfs_fs_warn_deprecated(fc, param, XFS_MOUNT_IKEEP, false);
|
||||
parsing_mp->m_flags &= ~XFS_MOUNT_IKEEP;
|
||||
xfs_fs_warn_deprecated(fc, param, XFS_FEAT_IKEEP, false);
|
||||
parsing_mp->m_features &= ~XFS_FEAT_IKEEP;
|
||||
return 0;
|
||||
case Opt_attr2:
|
||||
xfs_fs_warn_deprecated(fc, param, XFS_MOUNT_ATTR2, true);
|
||||
parsing_mp->m_flags |= XFS_MOUNT_ATTR2;
|
||||
xfs_fs_warn_deprecated(fc, param, XFS_FEAT_ATTR2, true);
|
||||
parsing_mp->m_features |= XFS_FEAT_ATTR2;
|
||||
return 0;
|
||||
case Opt_noattr2:
|
||||
xfs_fs_warn_deprecated(fc, param, XFS_MOUNT_NOATTR2, true);
|
||||
parsing_mp->m_flags |= XFS_MOUNT_NOATTR2;
|
||||
xfs_fs_warn_deprecated(fc, param, XFS_FEAT_NOATTR2, true);
|
||||
parsing_mp->m_features |= XFS_FEAT_NOATTR2;
|
||||
return 0;
|
||||
default:
|
||||
xfs_warn(parsing_mp, "unknown mount option [%s].", param->key);
|
||||
@ -1335,24 +1333,23 @@ static int
|
||||
xfs_fs_validate_params(
|
||||
struct xfs_mount *mp)
|
||||
{
|
||||
/*
|
||||
* no recovery flag requires a read-only mount
|
||||
*/
|
||||
if ((mp->m_flags & XFS_MOUNT_NORECOVERY) &&
|
||||
!(mp->m_flags & XFS_MOUNT_RDONLY)) {
|
||||
/* No recovery flag requires a read-only mount */
|
||||
if (xfs_has_norecovery(mp) && !(mp->m_flags & XFS_MOUNT_RDONLY)) {
|
||||
xfs_warn(mp, "no-recovery mounts must be read-only.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((mp->m_flags & (XFS_MOUNT_ATTR2|XFS_MOUNT_NOATTR2)) ==
|
||||
(XFS_MOUNT_ATTR2|XFS_MOUNT_NOATTR2)) {
|
||||
/*
|
||||
* We have not read the superblock at this point, so only the attr2
|
||||
* mount option can set the attr2 feature by this stage.
|
||||
*/
|
||||
if (xfs_has_attr2(mp) && xfs_has_noattr2(mp)) {
|
||||
xfs_warn(mp, "attr2 and noattr2 cannot both be specified.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
if ((mp->m_flags & XFS_MOUNT_NOALIGN) &&
|
||||
(mp->m_dalign || mp->m_swidth)) {
|
||||
if (xfs_has_noalign(mp) && (mp->m_dalign || mp->m_swidth)) {
|
||||
xfs_warn(mp,
|
||||
"sunit and swidth options incompatible with the noalign option");
|
||||
return -EINVAL;
|
||||
@ -1396,7 +1393,7 @@ xfs_fs_validate_params(
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((mp->m_flags & XFS_MOUNT_ALLOCSIZE) &&
|
||||
if (xfs_has_allocsize(mp) &&
|
||||
(mp->m_allocsize_log > XFS_MAX_IO_LOG ||
|
||||
mp->m_allocsize_log < XFS_MIN_IO_LOG)) {
|
||||
xfs_warn(mp, "invalid log iosize: %d [not %d-%d]",
|
||||
@ -1589,7 +1586,7 @@ xfs_fs_fill_super(
|
||||
if (XFS_SB_VERSION_NUM(&mp->m_sb) == XFS_SB_VERSION_5)
|
||||
sb->s_flags |= SB_I_VERSION;
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_DAX_ALWAYS) {
|
||||
if (xfs_has_dax_always(mp)) {
|
||||
bool rtdev_is_dax = false, datadev_is_dax;
|
||||
|
||||
xfs_warn(mp,
|
||||
@ -1613,13 +1610,13 @@ xfs_fs_fill_super(
|
||||
}
|
||||
}
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_DISCARD) {
|
||||
if (xfs_has_discard(mp)) {
|
||||
struct request_queue *q = bdev_get_queue(sb->s_bdev);
|
||||
|
||||
if (!blk_queue_discard(q)) {
|
||||
xfs_warn(mp, "mounting with \"discard\" option, but "
|
||||
"the device does not support discard");
|
||||
mp->m_flags &= ~XFS_MOUNT_DISCARD;
|
||||
mp->m_features &= ~XFS_FEAT_DISCARD;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1701,7 +1698,7 @@ xfs_remount_rw(
|
||||
struct xfs_sb *sbp = &mp->m_sb;
|
||||
int error;
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_NORECOVERY) {
|
||||
if (xfs_has_norecovery(mp)) {
|
||||
xfs_warn(mp,
|
||||
"ro->rw transition prohibited on norecovery mount");
|
||||
return -EINVAL;
|
||||
@ -1842,16 +1839,14 @@ xfs_fs_reconfigure(
|
||||
sync_filesystem(mp->m_super);
|
||||
|
||||
/* inode32 -> inode64 */
|
||||
if ((mp->m_flags & XFS_MOUNT_SMALL_INUMS) &&
|
||||
!(new_mp->m_flags & XFS_MOUNT_SMALL_INUMS)) {
|
||||
mp->m_flags &= ~XFS_MOUNT_SMALL_INUMS;
|
||||
if (xfs_has_small_inums(mp) && !xfs_has_small_inums(new_mp)) {
|
||||
mp->m_features &= ~XFS_FEAT_SMALL_INUMS;
|
||||
mp->m_maxagi = xfs_set_inode_alloc(mp, sbp->sb_agcount);
|
||||
}
|
||||
|
||||
/* inode64 -> inode32 */
|
||||
if (!(mp->m_flags & XFS_MOUNT_SMALL_INUMS) &&
|
||||
(new_mp->m_flags & XFS_MOUNT_SMALL_INUMS)) {
|
||||
mp->m_flags |= XFS_MOUNT_SMALL_INUMS;
|
||||
if (!xfs_has_small_inums(mp) && xfs_has_small_inums(new_mp)) {
|
||||
mp->m_features |= XFS_FEAT_SMALL_INUMS;
|
||||
mp->m_maxagi = xfs_set_inode_alloc(mp, sbp->sb_agcount);
|
||||
}
|
||||
|
||||
@ -1932,9 +1927,9 @@ static int xfs_init_fs_context(
|
||||
if (fc->sb_flags & SB_RDONLY)
|
||||
mp->m_flags |= XFS_MOUNT_RDONLY;
|
||||
if (fc->sb_flags & SB_DIRSYNC)
|
||||
mp->m_flags |= XFS_MOUNT_DIRSYNC;
|
||||
mp->m_features |= XFS_FEAT_DIRSYNC;
|
||||
if (fc->sb_flags & SB_SYNCHRONOUS)
|
||||
mp->m_flags |= XFS_MOUNT_WSYNC;
|
||||
mp->m_features |= XFS_FEAT_WSYNC;
|
||||
|
||||
fc->s_fs_info = mp;
|
||||
fc->ops = &xfs_context_ops;
|
||||
|
@ -321,9 +321,8 @@ xfs_symlink(
|
||||
* symlink transaction goes to disk before returning to
|
||||
* the user.
|
||||
*/
|
||||
if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) {
|
||||
if (xfs_has_wsync(mp) || xfs_has_dirsync(mp))
|
||||
xfs_trans_set_sync(tp);
|
||||
}
|
||||
|
||||
error = xfs_trans_commit(tp);
|
||||
if (error)
|
||||
|
Loading…
Reference in New Issue
Block a user