fs/9p: Implement syncfs call back for 9Pfs
FIXME!! what about dotu ? Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com> Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
This commit is contained in:
parent
c0aa4caf4c
commit
00ea2df43e
@ -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,
|
|||||||
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,
|
|||||||
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 @@ close_session:
|
|||||||
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)
|
|||||||
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 @@ done:
|
|||||||
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 = {
|
|||||||
.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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user