fix
authorMiklos Szeredi <miklos@szeredi.hu>
Sat, 23 Apr 2005 10:59:44 +0000 (10:59 +0000)
committerMiklos Szeredi <miklos@szeredi.hu>
Sat, 23 Apr 2005 10:59:44 +0000 (10:59 +0000)
ChangeLog
kernel/file.c

index 541580319a572e6ff9aaf31f0ce6e120a0f86608..6b130114611e4a6423433606999b3ad12f20b015 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -12,6 +12,9 @@
        * Fix Oops caused by premature release of fuse_conn.  Clean up
        related code, to be more readable
 
+       * Sendfile should not use page cache if "direct_io" mount option
+       is given
+
 2005-04-08  Miklos Szeredi <miklos@szeredi.hu>
 
        * Fix Oops in case of nfs export.  Spotted by David Shaw
index cf8e855af9b71cae33bbf9f118401d5f6ee2d67a..6fee83eb5233e0ecada255a8d029bedbd0b9dcca 100644 (file)
@@ -654,6 +654,17 @@ static int fuse_file_mmap(struct file *file, struct vm_area_struct *vma)
 }
 
 #ifdef KERNEL_2_6
+static ssize_t fuse_file_sendfile(struct file *file, loff_t *ppos,
+                                 size_t count, read_actor_t actor,
+                                 void *target)
+{
+       struct fuse_conn *fc = get_fuse_conn(file->f_dentry->d_inode);
+       if (fc->flags & FUSE_DIRECT_IO)
+               return -EINVAL;
+       else
+               return generic_file_sendfile(file, ppos, count, actor, target);
+}
+
 static int fuse_set_page_dirty(struct page *page)
 {
        printk("fuse_set_page_dirty: should not happen\n");
@@ -672,7 +683,7 @@ static struct file_operations fuse_file_operations = {
        .release        = fuse_release,
        .fsync          = fuse_fsync,
 #ifdef KERNEL_2_6
-       .sendfile       = generic_file_sendfile,
+       .sendfile       = fuse_file_sendfile,
 #endif
 };