X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fzpl_super.c;h=eee4a50e03a569932e22c270e7c492e4d8ec158a;hb=refs%2Fheads%2Frertzinger%2Ffeature-zpool-get--p;hp=29d7f7dfbbecc921efbb2138aae7e5c213bd263b;hpb=739a1a82e0f366923e8d9bc8f9ad4b1c680a780b;p=zfs.git diff --git a/module/zfs/zpl_super.c b/module/zfs/zpl_super.c index 29d7f7d..eee4a50 100644 --- a/module/zfs/zpl_super.c +++ b/module/zfs/zpl_super.c @@ -49,6 +49,25 @@ zpl_inode_destroy(struct inode *ip) } /* + * Called from __mark_inode_dirty() to reflect that something in the + * inode has changed. We use it to ensure the znode system attributes + * are always strictly update to date with respect to the inode. + */ +#ifdef HAVE_DIRTY_INODE_WITH_FLAGS +static void +zpl_dirty_inode(struct inode *ip, int flags) +{ + zfs_dirty_inode(ip, flags); +} +#else +static void +zpl_dirty_inode(struct inode *ip) +{ + zfs_dirty_inode(ip, 0); +} +#endif /* HAVE_DIRTY_INODE_WITH_FLAGS */ + +/* * When ->drop_inode() is called its return value indicates if the * inode should be evicted from the inode cache. If the inode is * unhashed and has no links the default policy is to evict it @@ -221,6 +240,10 @@ zpl_kill_sb(struct super_block *sb) { zfs_preumount(sb); kill_anon_super(sb); + +#ifdef HAVE_S_INSTANCES_LIST_HEAD + sb->s_instances.next = &(zpl_fs_type.fs_supers); +#endif /* HAVE_S_INSTANCES_LIST_HEAD */ } #ifdef HAVE_SHRINK @@ -306,7 +329,7 @@ zpl_free_cached_objects(struct super_block *sb, int nr_to_scan) const struct super_operations zpl_super_operations = { .alloc_inode = zpl_inode_alloc, .destroy_inode = zpl_inode_destroy, - .dirty_inode = NULL, + .dirty_inode = zpl_dirty_inode, .write_inode = NULL, .drop_inode = NULL, #ifdef HAVE_EVICT_INODE @@ -316,7 +339,6 @@ const struct super_operations zpl_super_operations = { .delete_inode = zpl_inode_delete, #endif /* HAVE_EVICT_INODE */ .put_super = zpl_put_super, - .write_super = NULL, .sync_fs = zpl_sync_fs, .statfs = zpl_statfs, .remount_fs = zpl_remount_fs,