X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fzpl_super.c;h=650e9c0d3791639851c5a29e47f87af43f226227;hb=2cf7f52bc42f215d4ef27d0fd75fc1b1417cb841;hp=73e5268f5107421b52fd8841673472b659561a59;hpb=03f9ba9d990efb911026ebee0902671915db01a3;p=zfs.git diff --git a/module/zfs/zpl_super.c b/module/zfs/zpl_super.c index 73e5268..650e9c0 100644 --- a/module/zfs/zpl_super.c +++ b/module/zfs/zpl_super.c @@ -73,7 +73,7 @@ zpl_inode_destroy(struct inode *ip) static void zpl_evict_inode(struct inode *ip) { - truncate_inode_pages(&ip->i_data, 0); + truncate_setsize(ip, 0); end_writeback(ip); zfs_inactive(ip); } @@ -89,7 +89,7 @@ zpl_clear_inode(struct inode *ip) static void zpl_inode_delete(struct inode *ip) { - truncate_inode_pages(&ip->i_data, 0); + truncate_setsize(ip, 0); clear_inode(ip); } @@ -107,12 +107,12 @@ zpl_put_super(struct super_block *sb) static int zpl_sync_fs(struct super_block *sb, int wait) { - cred_t *cr; + cred_t *cr = CRED(); int error; - cr = (cred_t *)get_current_cred(); + crhold(cr); error = -zfs_sync(sb, wait, cr); - put_cred(cr); + crfree(cr); ASSERT3S(error, <=, 0); return (error); @@ -130,6 +130,16 @@ zpl_statfs(struct dentry *dentry, struct kstatfs *statp) } static int +zpl_remount_fs(struct super_block *sb, int *flags, char *data) +{ + int error; + error = -zfs_remount(sb, flags, data); + ASSERT3S(error, <=, 0); + + return (error); +} + +static int zpl_show_options(struct seq_file *seq, struct vfsmount *vfsp) { struct super_block *sb = vfsp->mnt_sb; @@ -140,8 +150,7 @@ zpl_show_options(struct seq_file *seq, struct vfsmount *vfsp) * MNT_NOSUID, MNT_NODEV, MNT_NOEXEC, MNT_NOATIME, MNT_READONLY */ - if (zsb->z_flags & ZSB_XATTR_USER) - seq_printf(seq, ",%s", "xattr"); + seq_printf(seq, ",%s", zsb->z_flags & ZSB_XATTR ? "xattr" : "noxattr"); return (0); } @@ -157,14 +166,25 @@ zpl_fill_super(struct super_block *sb, void *data, int silent) return (error); } +#ifdef HAVE_MOUNT_NODEV +static struct dentry * +zpl_mount(struct file_system_type *fs_type, int flags, + const char *osname, void *data) +{ + zpl_mount_data_t zmd = { osname, data }; + + return mount_nodev(fs_type, flags, &zmd, zpl_fill_super); +} +#else static int zpl_get_sb(struct file_system_type *fs_type, int flags, const char *osname, void *data, struct vfsmount *mnt) { - zpl_mount_data_t zmd = { osname, data, mnt }; + zpl_mount_data_t zmd = { osname, data }; return get_sb_nodev(fs_type, flags, &zmd, zpl_fill_super, mnt); } +#endif /* HAVE_MOUNT_NODEV */ static void zpl_kill_sb(struct super_block *sb) @@ -194,25 +214,19 @@ const struct super_operations zpl_super_operations = { .put_super = zpl_put_super, .write_super = NULL, .sync_fs = zpl_sync_fs, - .freeze_fs = NULL, - .unfreeze_fs = NULL, .statfs = zpl_statfs, - .remount_fs = NULL, + .remount_fs = zpl_remount_fs, .show_options = zpl_show_options, .show_stats = NULL, }; -#if 0 -const struct export_operations zpl_export_operations = { - .fh_to_dentry = NULL, - .fh_to_parent = NULL, - .get_parent = NULL, -}; -#endif - struct file_system_type zpl_fs_type = { .owner = THIS_MODULE, .name = ZFS_DRIVER, +#ifdef HAVE_MOUNT_NODEV + .mount = zpl_mount, +#else .get_sb = zpl_get_sb, +#endif /* HAVE_MOUNT_NODEV */ .kill_sb = zpl_kill_sb, };