mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
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 <behlendorf1@llnl.gov>
This commit is contained in:
+34
-26
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user