diff options
author | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2011-02-28 06:33:57 -0500 |
---|---|---|
committer | Eric Van Hensbergen <ericvh@gmail.com> | 2011-03-15 10:57:37 -0400 |
commit | 3cf387d780944305839f5b27c51f225444ba4d27 (patch) | |
tree | ed4ef1d723ed3c7c280aadfcf397218004e49252 /fs/9p/vfs_file.c | |
parent | 17311779ac3dcd06f8ef727a06969c439e116a20 (diff) |
fs/9p: Add fid to inode in cached mode
The fid attached to inode will be opened O_RDWR mode and is used
for dirty page writeback only.
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>
Diffstat (limited to 'fs/9p/vfs_file.c')
-rw-r--r-- | fs/9p/vfs_file.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c index 6e1e8f43edac..e966f15f92ec 100644 --- a/fs/9p/vfs_file.c +++ b/fs/9p/vfs_file.c | |||
@@ -86,11 +86,30 @@ int v9fs_file_open(struct inode *inode, struct file *file) | |||
86 | } | 86 | } |
87 | 87 | ||
88 | file->private_data = fid; | 88 | file->private_data = fid; |
89 | if (v9ses->cache && !inode->i_private) { | ||
90 | /* | ||
91 | * clone a fid and add it to inode->i_private | ||
92 | * we do it during open time instead of | ||
93 | * page dirty time via write_begin/page_mkwrite | ||
94 | * because we want write after unlink usecase | ||
95 | * to work. | ||
96 | */ | ||
97 | fid = v9fs_writeback_fid(file->f_path.dentry); | ||
98 | if (IS_ERR(fid)) { | ||
99 | err = PTR_ERR(fid); | ||
100 | goto out_error; | ||
101 | } | ||
102 | inode->i_private = (void *) fid; | ||
103 | } | ||
89 | #ifdef CONFIG_9P_FSCACHE | 104 | #ifdef CONFIG_9P_FSCACHE |
90 | if (v9ses->cache) | 105 | if (v9ses->cache) |
91 | v9fs_cache_inode_set_cookie(inode, file); | 106 | v9fs_cache_inode_set_cookie(inode, file); |
92 | #endif | 107 | #endif |
93 | return 0; | 108 | return 0; |
109 | out_error: | ||
110 | p9_client_clunk(file->private_data); | ||
111 | file->private_data = NULL; | ||
112 | return err; | ||
94 | } | 113 | } |
95 | 114 | ||
96 | /** | 115 | /** |