linux/vfsops: remove zfs_mnt_t, pass directly

A cleanup of opportunity. Since we already are modifying the contents of
zfs_mnt_t, we've broken any API guarantee, so we might as well go the
rest of the way and get rid of it, and just pass the osname and/or the
vfs_t directly.

It seems like zfs_mnt_t was never really needed anyway; it was added in
1c2555ef92 (March 2017) to minimise the difference to illumos, but
zfs_vfsops was made platform-specific anyway in 7b4e27232d.

We also remove setting SB_RDONLY on the caller's flags when failing a
read-write remount on a read-only snapshot or pool. Since 0f608aa6ca
the caller's flags have been a pointer back to fc->sb_flags, which are
discarded without further ceremony when the operation fails, so the
change is unnecessary and we can simplify the call further.

Sponsored-by: TrueNAS
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rob Norris <rob.norris@truenas.com>
Closes #18377
This commit is contained in:
Rob Norris
2026-03-26 14:19:05 +11:00
committed by Tony Hutter
parent a8942fdb89
commit fc285caa84
3 changed files with 11 additions and 27 deletions
+5 -12
View File
@@ -1316,20 +1316,16 @@ zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting)
static atomic_long_t zfs_bdi_seq = ATOMIC_LONG_INIT(0);
int
zfs_domount(struct super_block *sb, zfs_mnt_t *zm, int silent)
zfs_domount(struct super_block *sb, const char *osname,
vfs_t *vfs, int silent)
{
const char *osname = zm->mnt_osname;
struct inode *root_inode = NULL;
uint64_t recordsize;
int error = 0;
zfsvfs_t *zfsvfs = NULL;
vfs_t *vfs = zm->mnt_opts;
int canwrite;
int dataset_visible_zone;
ASSERT(zm);
ASSERT(osname);
dataset_visible_zone = zone_dataset_visible(osname, &canwrite);
/*
@@ -1533,19 +1529,16 @@ zfs_umount(struct super_block *sb)
}
int
zfs_remount(struct super_block *sb, int *flags, zfs_mnt_t *zm)
zfs_remount(struct super_block *sb, vfs_t *vfsp, int flags)
{
zfsvfs_t *zfsvfs = sb->s_fs_info;
vfs_t *vfsp = zm->mnt_opts;
boolean_t issnap = dmu_objset_is_snapshot(zfsvfs->z_os);
if ((issnap || !spa_writeable(dmu_objset_spa(zfsvfs->z_os))) &&
!(*flags & SB_RDONLY)) {
*flags |= SB_RDONLY;
!(flags & SB_RDONLY))
return (EROFS);
}
if (!zfs_is_readonly(zfsvfs) && (*flags & SB_RDONLY))
if (!zfs_is_readonly(zfsvfs) && (flags & SB_RDONLY))
txg_wait_synced(dmu_objset_pool(zfsvfs->z_os), 0);
zfs_unregister_callbacks(zfsvfs);