X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2F9p%2Fvfs_file.c;h=6e7678e4852ffa53b2e84fdd06dbf4ae8ce66b5a;hb=ecd27b92fbb41f779d857632a69bd45dbaf0f915;hp=6c78343cf69023e5220c6a50127b33325c0f1c97;hpb=d9bc125caf592b7d081021f32ce5b717efdf70c8;p=linux-2.6 diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c index 6c78343cf6..6e7678e485 100644 --- a/fs/9p/vfs_file.c +++ b/fs/9p/vfs_file.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -42,6 +41,8 @@ #include "v9fs_vfs.h" #include "fid.h" +static const struct file_operations v9fs_cached_file_operations; + /** * v9fs_file_open - open a file (or directory) * @inode: inode to be opened @@ -79,6 +80,13 @@ int v9fs_file_open(struct inode *inode, struct file *file) vfid->filp = file; kfree(fcall); + if((vfid->qid.version) && (v9ses->cache)) { + dprintk(DEBUG_VFS, "cached"); + /* enable cached file options */ + if(file->f_op == &v9fs_file_operations) + file->f_op = &v9fs_cached_file_operations; + } + return 0; Clunk_Fid: @@ -238,6 +246,17 @@ v9fs_file_write(struct file *filp, const char __user * data, return total; } +static const struct file_operations v9fs_cached_file_operations = { + .llseek = generic_file_llseek, + .read = do_sync_read, + .aio_read = generic_file_aio_read, + .write = v9fs_file_write, + .open = v9fs_file_open, + .release = v9fs_dir_release, + .lock = v9fs_file_lock, + .mmap = generic_file_mmap, +}; + const struct file_operations v9fs_file_operations = { .llseek = generic_file_llseek, .read = v9fs_file_read,