Laszlo Bako-Szabo wrote:
> Package: aufs-modules-2.6.24-1-amd64
> Severity: important
> 
> 
> The aufs module no longer has the sendfile capability, the function 
> returns with 'Invalid argument' if I try to use it on a aufs filesystem.
> The previous release (2.6.22-3-amd64) works correctly.
> 
> Tests were made with lighttpd and a small test program (attached).
aufs has to use splice, but this would need the following patch in the kernel.
Therefore, I think the bug should be reassigned to linux-2.6.



The kernel patch:
--------------------

Actually, these systemcalls or inode operations were introduced in linux-2.6.17.
But I don't think there exists an application issuces such new systemcalls,
and aufs decided not to support them in linux-2.6.17.
In linux-2.6.23, sendfile inode operation was removed and aufs becomes having to
support splice oprations.

In other words, this patch is for linux-2.6.23 and later. Aufs doesn't support
splice related systemcalls before 2.6.23.

Index: include/linux/splice.h
===================================================================
RCS file: 
/ext1/sysadm/transparent/repository/linux-2.6.23-rc6/include/linux/splice.h,v
retrieving revision 1.1
retrieving revision 1.3
diff -u -p -r1.1 -r1.3
--- include/linux/splice.h      12 Sep 2007 16:27:22 -0000      1.1
+++ include/linux/splice.h      14 Sep 2007 03:42:28 -0000      1.3
@@ -70,4 +70,10 @@ extern ssize_t splice_to_pipe(struct pip
 extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *,
                                      splice_direct_actor *);

+extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+                          loff_t *ppos, size_t len, unsigned int flags);
+extern long do_splice_to(struct file *in, loff_t *ppos,
+                        struct pipe_inode_info *pipe, size_t len,
+                        unsigned int flags);
+
 #endif
Index: fs/splice.c
===================================================================
RCS file: /ext1/sysadm/transparent/repository/linux-2.6.23-rc6/fs/splice.c,v
retrieving revision 1.1
retrieving revision 1.3
diff -u -p -r1.1 -r1.3
--- fs/splice.c 12 Sep 2007 16:25:07 -0000      1.1
+++ fs/splice.c 14 Sep 2007 03:42:27 -0000      1.3
@@ -943,8 +943,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
 /*
  * Attempt to initiate a splice from pipe to file.
  */
-static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
-                          loff_t *ppos, size_t len, unsigned int flags)
+long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+                   loff_t *ppos, size_t len, unsigned int flags)
 {
        int ret;

@@ -964,13 +964,14 @@ static long do_splice_from(struct pipe_i

        return out->f_op->splice_write(pipe, out, ppos, len, flags);
 }
+EXPORT_SYMBOL(do_splice_from);

 /*
  * Attempt to initiate a splice from a file to a pipe.
  */
-static long do_splice_to(struct file *in, loff_t *ppos,
-                        struct pipe_inode_info *pipe, size_t len,
-                        unsigned int flags)
+long do_splice_to(struct file *in, loff_t *ppos,
+                 struct pipe_inode_info *pipe, size_t len,
+                 unsigned int flags)
 {
        int ret;

@@ -990,6 +991,7 @@ static long do_splice_to(struct file *in

        return in->f_op->splice_read(in, ppos, pipe, len, flags);
 }
+EXPORT_SYMBOL(do_splice_to);

 /**
  * splice_direct_to_actor - splices data directly between two non-pipes

-- 
Julian Andres Klode, Fellow of the Free Software Foundation Europe
                     Debian Maintainer | Developer | Ubuntu Member

try Debian: http://www.debian.org/ | my site: http://jak-linux.org/
        jabber: [EMAIL PROTECTED] | IRC: juliank (FreeNode, OFTC)
            languages:     German  | English

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to