提交 00ea2df4 编写于 作者: A Aneesh Kumar K.V 提交者: Eric Van Hensbergen

fs/9p: Implement syncfs call back for 9Pfs

FIXME!! what about dotu ?
Signed-off-by: NAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: NVenkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
Signed-off-by: NEric Van Hensbergen <ericvh@gmail.com>
上级 c0aa4caf
...@@ -113,6 +113,7 @@ struct v9fs_session_info { ...@@ -113,6 +113,7 @@ struct v9fs_session_info {
struct list_head slist; /* list of sessions registered with v9fs */ struct list_head slist; /* list of sessions registered with v9fs */
struct backing_dev_info bdi; struct backing_dev_info bdi;
struct rw_semaphore rename_sem; 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 *, struct p9_fid *v9fs_session_init(struct v9fs_session_info *, const char *,
......
...@@ -152,7 +152,6 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, ...@@ -152,7 +152,6 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
retval = PTR_ERR(inode); retval = PTR_ERR(inode);
goto release_sb; goto release_sb;
} }
root = d_alloc_root(inode); root = d_alloc_root(inode);
if (!root) { if (!root) {
iput(inode); iput(inode);
...@@ -184,10 +183,21 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, ...@@ -184,10 +183,21 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
p9stat_free(st); p9stat_free(st);
kfree(st); kfree(st);
} }
v9fs_fid_add(root, fid);
retval = v9fs_get_acl(inode, fid); retval = v9fs_get_acl(inode, fid);
if (retval) if (retval)
goto release_sb; 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"); P9_DPRINTK(P9_DEBUG_VFS, " simple set mount, return 0\n");
return dget(sb->s_root); return dget(sb->s_root);
...@@ -198,15 +208,11 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags, ...@@ -198,15 +208,11 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
v9fs_session_close(v9ses); v9fs_session_close(v9ses);
kfree(v9ses); kfree(v9ses);
return ERR_PTR(retval); return ERR_PTR(retval);
release_sb: release_sb:
/* /*
* we will do the session_close and root dentry release * we will do the session_close and root dentry
* in the below call. But we need to clunk fid, because we haven't * release in the below call.
* attached the fid to dentry so it won't get clunked
* automatically.
*/ */
p9_client_clunk(fid);
deactivate_locked_super(sb); deactivate_locked_super(sb);
return ERR_PTR(retval); return ERR_PTR(retval);
} }
...@@ -224,7 +230,7 @@ static void v9fs_kill_super(struct super_block *s) ...@@ -224,7 +230,7 @@ static void v9fs_kill_super(struct super_block *s)
P9_DPRINTK(P9_DEBUG_VFS, " %p\n", s); P9_DPRINTK(P9_DEBUG_VFS, " %p\n", s);
kill_anon_super(s); kill_anon_super(s);
p9_client_clunk(v9ses->root_fid);
v9fs_session_cancel(v9ses); v9fs_session_cancel(v9ses);
v9fs_session_close(v9ses); v9fs_session_close(v9ses);
kfree(v9ses); kfree(v9ses);
...@@ -277,6 +283,14 @@ static int v9fs_statfs(struct dentry *dentry, struct kstatfs *buf) ...@@ -277,6 +283,14 @@ static int v9fs_statfs(struct dentry *dentry, struct kstatfs *buf)
return res; 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 = { static const struct super_operations v9fs_super_ops = {
#ifdef CONFIG_9P_FSCACHE #ifdef CONFIG_9P_FSCACHE
.alloc_inode = v9fs_alloc_inode, .alloc_inode = v9fs_alloc_inode,
...@@ -293,6 +307,7 @@ static const struct super_operations v9fs_super_ops_dotl = { ...@@ -293,6 +307,7 @@ static const struct super_operations v9fs_super_ops_dotl = {
.alloc_inode = v9fs_alloc_inode, .alloc_inode = v9fs_alloc_inode,
.destroy_inode = v9fs_destroy_inode, .destroy_inode = v9fs_destroy_inode,
#endif #endif
.sync_fs = v9fs_sync_fs,
.statfs = v9fs_statfs, .statfs = v9fs_statfs,
.evict_inode = v9fs_evict_inode, .evict_inode = v9fs_evict_inode,
.show_options = generic_show_options, .show_options = generic_show_options,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册