Loading fs/9p/v9fs.h +1 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,7 @@ struct v9fs_session_info { struct list_head slist; /* list of sessions registered with v9fs */ struct backing_dev_info bdi; struct rw_semaphore rename_sem; struct p9_fid *root_fid; /* Used for file system sync */ }; struct p9_fid *v9fs_session_init(struct v9fs_session_info *, const char *, Loading fs/9p/vfs_super.c +24 −9 Original line number Diff line number Diff line Loading @@ -152,7 +152,6 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, retval = PTR_ERR(inode); goto release_sb; } root = d_alloc_root(inode); if (!root) { iput(inode); Loading Loading @@ -184,10 +183,21 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, p9stat_free(st); kfree(st); } v9fs_fid_add(root, fid); retval = v9fs_get_acl(inode, fid); if (retval) goto release_sb; v9fs_fid_add(root, fid); /* * Add the root fid to session info. This is used * for file system sync. We want a cloned fid here * so that we can do a sync_filesystem after a * shrink_dcache_for_umount */ v9ses->root_fid = v9fs_fid_clone(root); if (IS_ERR(v9ses->root_fid)) { retval = PTR_ERR(v9ses->root_fid); goto release_sb; } P9_DPRINTK(P9_DEBUG_VFS, " simple set mount, return 0\n"); return dget(sb->s_root); Loading @@ -198,15 +208,11 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, v9fs_session_close(v9ses); kfree(v9ses); return ERR_PTR(retval); release_sb: /* * we will do the session_close and root dentry release * in the below call. But we need to clunk fid, because we haven't * attached the fid to dentry so it won't get clunked * automatically. * we will do the session_close and root dentry * release in the below call. */ p9_client_clunk(fid); deactivate_locked_super(sb); return ERR_PTR(retval); } Loading @@ -224,7 +230,7 @@ static void v9fs_kill_super(struct super_block *s) P9_DPRINTK(P9_DEBUG_VFS, " %p\n", s); kill_anon_super(s); p9_client_clunk(v9ses->root_fid); v9fs_session_cancel(v9ses); v9fs_session_close(v9ses); kfree(v9ses); Loading Loading @@ -277,6 +283,14 @@ static int v9fs_statfs(struct dentry *dentry, struct kstatfs *buf) return res; } static int v9fs_sync_fs(struct super_block *sb, int wait) { struct v9fs_session_info *v9ses = sb->s_fs_info; P9_DPRINTK(P9_DEBUG_VFS, "v9fs_sync_fs: super_block %p\n", sb); return p9_client_sync_fs(v9ses->root_fid); } static const struct super_operations v9fs_super_ops = { #ifdef CONFIG_9P_FSCACHE .alloc_inode = v9fs_alloc_inode, Loading @@ -293,6 +307,7 @@ static const struct super_operations v9fs_super_ops_dotl = { .alloc_inode = v9fs_alloc_inode, .destroy_inode = v9fs_destroy_inode, #endif .sync_fs = v9fs_sync_fs, .statfs = v9fs_statfs, .evict_inode = v9fs_evict_inode, .show_options = generic_show_options, Loading Loading
fs/9p/v9fs.h +1 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,7 @@ struct v9fs_session_info { struct list_head slist; /* list of sessions registered with v9fs */ struct backing_dev_info bdi; struct rw_semaphore rename_sem; struct p9_fid *root_fid; /* Used for file system sync */ }; struct p9_fid *v9fs_session_init(struct v9fs_session_info *, const char *, Loading
fs/9p/vfs_super.c +24 −9 Original line number Diff line number Diff line Loading @@ -152,7 +152,6 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, retval = PTR_ERR(inode); goto release_sb; } root = d_alloc_root(inode); if (!root) { iput(inode); Loading Loading @@ -184,10 +183,21 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, p9stat_free(st); kfree(st); } v9fs_fid_add(root, fid); retval = v9fs_get_acl(inode, fid); if (retval) goto release_sb; v9fs_fid_add(root, fid); /* * Add the root fid to session info. This is used * for file system sync. We want a cloned fid here * so that we can do a sync_filesystem after a * shrink_dcache_for_umount */ v9ses->root_fid = v9fs_fid_clone(root); if (IS_ERR(v9ses->root_fid)) { retval = PTR_ERR(v9ses->root_fid); goto release_sb; } P9_DPRINTK(P9_DEBUG_VFS, " simple set mount, return 0\n"); return dget(sb->s_root); Loading @@ -198,15 +208,11 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, v9fs_session_close(v9ses); kfree(v9ses); return ERR_PTR(retval); release_sb: /* * we will do the session_close and root dentry release * in the below call. But we need to clunk fid, because we haven't * attached the fid to dentry so it won't get clunked * automatically. * we will do the session_close and root dentry * release in the below call. */ p9_client_clunk(fid); deactivate_locked_super(sb); return ERR_PTR(retval); } Loading @@ -224,7 +230,7 @@ static void v9fs_kill_super(struct super_block *s) P9_DPRINTK(P9_DEBUG_VFS, " %p\n", s); kill_anon_super(s); p9_client_clunk(v9ses->root_fid); v9fs_session_cancel(v9ses); v9fs_session_close(v9ses); kfree(v9ses); Loading Loading @@ -277,6 +283,14 @@ static int v9fs_statfs(struct dentry *dentry, struct kstatfs *buf) return res; } static int v9fs_sync_fs(struct super_block *sb, int wait) { struct v9fs_session_info *v9ses = sb->s_fs_info; P9_DPRINTK(P9_DEBUG_VFS, "v9fs_sync_fs: super_block %p\n", sb); return p9_client_sync_fs(v9ses->root_fid); } static const struct super_operations v9fs_super_ops = { #ifdef CONFIG_9P_FSCACHE .alloc_inode = v9fs_alloc_inode, Loading @@ -293,6 +307,7 @@ static const struct super_operations v9fs_super_ops_dotl = { .alloc_inode = v9fs_alloc_inode, .destroy_inode = v9fs_destroy_inode, #endif .sync_fs = v9fs_sync_fs, .statfs = v9fs_statfs, .evict_inode = v9fs_evict_inode, .show_options = generic_show_options, Loading