diff options
author | Brian Behlendorf <[email protected]> | 2017-03-08 19:56:09 -0500 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2017-03-10 09:51:41 -0800 |
commit | 1c2555ef926521671eaca918f0aaaa97dbef02af (patch) | |
tree | 6491e5bdda80532388091def591f7ee9e59b6271 /include | |
parent | f298b24ddf9695fb74603a257e2a58dd7baf0159 (diff) |
Restructure mount option handling
Restructure the handling of mount options to be consistent with
upstream OpenZFS. This required making the following changes.
- The zfs_mntopts_t was renamed vfs_t and adjusted to provide
the minimal needed functionality. This includes a pointer
back to the associated zfsvfs_t. Plus it made it possible
to revert zfs_register_callbacks() and zfsvfs_create() back
to their original prototypes.
- A zfs_mnt_t structure was added for the sole purpose of
providing a structure to pass the osname and raw mount
pointer to zfs_domount() without having to copy them.
- Mount option parsing was moved down from the zpl_* wrapper
functions in to the zfs_* functions. This allowed for the
code to be simplied and it's where similar functionality
appears on other platforms.
Signed-off-by: Brian Behlendorf <[email protected]>
Diffstat (limited to 'include')
-rw-r--r-- | include/sys/zfs_vfsops.h | 60 |
1 files changed, 34 insertions, 26 deletions
diff --git a/include/sys/zfs_vfsops.h b/include/sys/zfs_vfsops.h index a208bc1f8..aeecc472d 100644 --- a/include/sys/zfs_vfsops.h +++ b/include/sys/zfs_vfsops.h @@ -41,33 +41,43 @@ extern "C" { typedef struct zfsvfs zfsvfs_t; struct znode; -typedef struct zfs_mntopts { - char *z_osname; /* Objset name */ - char *z_mntpoint; /* Primary mount point */ - uint64_t z_xattr; - boolean_t z_readonly; - boolean_t z_do_readonly; - boolean_t z_setuid; - boolean_t z_do_setuid; - boolean_t z_exec; - boolean_t z_do_exec; - boolean_t z_devices; - boolean_t z_do_devices; - boolean_t z_do_xattr; - boolean_t z_atime; - boolean_t z_do_atime; - boolean_t z_relatime; - boolean_t z_do_relatime; - boolean_t z_nbmand; - boolean_t z_do_nbmand; -} zfs_mntopts_t; +/* + * This structure emulates the vfs_t from other platforms. It's purpose + * is to faciliate the handling of mount options and minimize structural + * differences between the platforms. + */ +typedef struct vfs { + struct zfsvfs *vfs_data; + char *vfs_mntpoint; /* Primary mount point */ + uint64_t vfs_xattr; + boolean_t vfs_readonly; + boolean_t vfs_do_readonly; + boolean_t vfs_setuid; + boolean_t vfs_do_setuid; + boolean_t vfs_exec; + boolean_t vfs_do_exec; + boolean_t vfs_devices; + boolean_t vfs_do_devices; + boolean_t vfs_do_xattr; + boolean_t vfs_atime; + boolean_t vfs_do_atime; + boolean_t vfs_relatime; + boolean_t vfs_do_relatime; + boolean_t vfs_nbmand; + boolean_t vfs_do_nbmand; +} vfs_t; + +typedef struct zfs_mnt { + const char *mnt_osname; /* Objset name */ + char *mnt_data; /* Raw mount options */ +} zfs_mnt_t; struct zfsvfs { + vfs_t *z_vfs; /* generic fs struct */ struct super_block *z_sb; /* generic super_block */ struct backing_dev_info z_bdi; /* generic backing dev info */ struct zfsvfs *z_parent; /* parent fs */ objset_t *z_os; /* objset reference */ - zfs_mntopts_t *z_mntopts; /* passed mount options */ uint64_t z_flags; /* super_block flags */ uint64_t z_root; /* id of root znode */ uint64_t z_unlinkedobj; /* id of unlinked zapobj */ @@ -193,17 +203,15 @@ extern boolean_t zfs_fuid_overquota(zfsvfs_t *zfsvfs, boolean_t isgroup, extern boolean_t zfs_fuid_overobjquota(zfsvfs_t *zfsvfs, boolean_t isgroup, uint64_t fuid); extern int zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers); -extern int zfsvfs_create(const char *name, zfs_mntopts_t *zmo, zfsvfs_t **zfvp); +extern int zfsvfs_create(const char *name, zfsvfs_t **zfvp); extern void zfsvfs_free(zfsvfs_t *zfsvfs); extern int zfs_check_global_label(const char *dsname, const char *hexsl); extern boolean_t zfs_is_readonly(zfsvfs_t *zfsvfs); -extern zfs_mntopts_t *zfs_mntopts_alloc(void); -extern void zfs_mntopts_free(zfs_mntopts_t *zmo); -extern int zfs_domount(struct super_block *sb, zfs_mntopts_t *zmo, int silent); +extern int zfs_domount(struct super_block *sb, zfs_mnt_t *zm, int silent); extern void zfs_preumount(struct super_block *sb); extern int zfs_umount(struct super_block *sb); -extern int zfs_remount(struct super_block *sb, int *flags, zfs_mntopts_t *zmo); +extern int zfs_remount(struct super_block *sb, int *flags, zfs_mnt_t *zm); extern int zfs_statvfs(struct dentry *dentry, struct kstatfs *statp); extern int zfs_vget(struct super_block *sb, struct inode **ipp, fid_t *fidp); extern int zfs_prune(struct super_block *sb, unsigned long nr_to_scan, |