diff options
author | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2011-07-06 07:02:31 -0400 |
---|---|---|
committer | Eric Van Hensbergen <ericvh@gmail.com> | 2011-07-23 10:32:50 -0400 |
commit | ed80fcfac2565fa866d93ba14f0e75de17a8223e (patch) | |
tree | 504a4efb5377bc5d8e9ff3a8eb45bb2b00303b93 /fs/9p/v9fs.h | |
parent | 4d63055fa9657aa402da25575045c23f37c3da05 (diff) |
fs/9p: Always ask new inode in create
This make sure we don't end up reusing the unlinked inode object.
The ideal way is to use inode i_generation. But i_generation is
not available in userspace always.
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
Diffstat (limited to 'fs/9p/v9fs.h')
-rw-r--r-- | fs/9p/v9fs.h | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/fs/9p/v9fs.h b/fs/9p/v9fs.h index 5d7392ead24b..e78956cbd702 100644 --- a/fs/9p/v9fs.h +++ b/fs/9p/v9fs.h | |||
@@ -153,13 +153,13 @@ extern void v9fs_vfs_put_link(struct dentry *dentry, struct nameidata *nd, | |||
153 | void *p); | 153 | void *p); |
154 | extern struct inode *v9fs_inode_from_fid(struct v9fs_session_info *v9ses, | 154 | extern struct inode *v9fs_inode_from_fid(struct v9fs_session_info *v9ses, |
155 | struct p9_fid *fid, | 155 | struct p9_fid *fid, |
156 | struct super_block *sb); | 156 | struct super_block *sb, int new); |
157 | extern const struct inode_operations v9fs_dir_inode_operations_dotl; | 157 | extern const struct inode_operations v9fs_dir_inode_operations_dotl; |
158 | extern const struct inode_operations v9fs_file_inode_operations_dotl; | 158 | extern const struct inode_operations v9fs_file_inode_operations_dotl; |
159 | extern const struct inode_operations v9fs_symlink_inode_operations_dotl; | 159 | extern const struct inode_operations v9fs_symlink_inode_operations_dotl; |
160 | extern struct inode *v9fs_inode_from_fid_dotl(struct v9fs_session_info *v9ses, | 160 | extern struct inode *v9fs_inode_from_fid_dotl(struct v9fs_session_info *v9ses, |
161 | struct p9_fid *fid, | 161 | struct p9_fid *fid, |
162 | struct super_block *sb); | 162 | struct super_block *sb, int new); |
163 | 163 | ||
164 | /* other default globals */ | 164 | /* other default globals */ |
165 | #define V9FS_PORT 564 | 165 | #define V9FS_PORT 564 |
@@ -201,8 +201,27 @@ v9fs_get_inode_from_fid(struct v9fs_session_info *v9ses, struct p9_fid *fid, | |||
201 | struct super_block *sb) | 201 | struct super_block *sb) |
202 | { | 202 | { |
203 | if (v9fs_proto_dotl(v9ses)) | 203 | if (v9fs_proto_dotl(v9ses)) |
204 | return v9fs_inode_from_fid_dotl(v9ses, fid, sb); | 204 | return v9fs_inode_from_fid_dotl(v9ses, fid, sb, 0); |
205 | else | 205 | else |
206 | return v9fs_inode_from_fid(v9ses, fid, sb); | 206 | return v9fs_inode_from_fid(v9ses, fid, sb, 0); |
207 | } | 207 | } |
208 | |||
209 | /** | ||
210 | * v9fs_get_new_inode_from_fid - Helper routine to populate an inode by | ||
211 | * issuing a attribute request | ||
212 | * @v9ses: session information | ||
213 | * @fid: fid to issue attribute request for | ||
214 | * @sb: superblock on which to create inode | ||
215 | * | ||
216 | */ | ||
217 | static inline struct inode * | ||
218 | v9fs_get_new_inode_from_fid(struct v9fs_session_info *v9ses, struct p9_fid *fid, | ||
219 | struct super_block *sb) | ||
220 | { | ||
221 | if (v9fs_proto_dotl(v9ses)) | ||
222 | return v9fs_inode_from_fid_dotl(v9ses, fid, sb, 1); | ||
223 | else | ||
224 | return v9fs_inode_from_fid(v9ses, fid, sb, 1); | ||
225 | } | ||
226 | |||
208 | #endif | 227 | #endif |