diff options
Diffstat (limited to 'fs/9p/vfs_file.c')
-rw-r--r-- | fs/9p/vfs_file.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c index 6c78343cf690..653dfa5b2531 100644 --- a/fs/9p/vfs_file.c +++ b/fs/9p/vfs_file.c | |||
@@ -79,6 +79,13 @@ int v9fs_file_open(struct inode *inode, struct file *file) | |||
79 | vfid->filp = file; | 79 | vfid->filp = file; |
80 | kfree(fcall); | 80 | kfree(fcall); |
81 | 81 | ||
82 | if((vfid->qid.version) && (v9ses->cache)) { | ||
83 | dprintk(DEBUG_VFS, "cached"); | ||
84 | /* enable cached file options */ | ||
85 | if(file->f_op == &v9fs_file_operations) | ||
86 | file->f_op = &v9fs_cached_file_operations; | ||
87 | } | ||
88 | |||
82 | return 0; | 89 | return 0; |
83 | 90 | ||
84 | Clunk_Fid: | 91 | Clunk_Fid: |
@@ -238,6 +245,17 @@ v9fs_file_write(struct file *filp, const char __user * data, | |||
238 | return total; | 245 | return total; |
239 | } | 246 | } |
240 | 247 | ||
248 | const struct file_operations v9fs_cached_file_operations = { | ||
249 | .llseek = generic_file_llseek, | ||
250 | .read = do_sync_read, | ||
251 | .aio_read = generic_file_aio_read, | ||
252 | .write = v9fs_file_write, | ||
253 | .open = v9fs_file_open, | ||
254 | .release = v9fs_dir_release, | ||
255 | .lock = v9fs_file_lock, | ||
256 | .mmap = generic_file_mmap, | ||
257 | }; | ||
258 | |||
241 | const struct file_operations v9fs_file_operations = { | 259 | const struct file_operations v9fs_file_operations = { |
242 | .llseek = generic_file_llseek, | 260 | .llseek = generic_file_llseek, |
243 | .read = v9fs_file_read, | 261 | .read = v9fs_file_read, |