I just tried to replace the do_splice_* functions with other already exported functions, because the do_* won't be added to the Debian kernel.
I applied the following patch and have no problems:
--- aufs-0+20080317.orig/fs/aufs/vfsub.c
+++ aufs-0+20080317/fs/aufs/vfsub.c
@@ -326,7 +326,7 @@
AuDLNPair(in->f_dentry), *ppos, (unsigned long)len, flags);
lockdep_off();
- err = do_splice_to(in, ppos, pipe, len, flags);
+ err = in->f_op->splice_read(in, ppos, pipe, len, flags);
lockdep_on();
if (err >= 0)
au_update_fuse_h_inode(in->f_vfsmnt, in->f_dentry); /*ignore*/
@@ -342,7 +342,7 @@
AuDLNPair(out->f_dentry), *ppos, (unsigned long)len, flags);
lockdep_off();
- err = do_splice_from(pipe, out, ppos, len, flags);
+ err = out->f_op->splice_write(pipe, out, ppos, len, flags);
lockdep_on();
if (err >= 0)
au_update_fuse_h_inode(out->f_vfsmnt, out->f_dentry); /*ignore*/
Another patch (which copies a bit more code from fs/splice.c)
--- aufs-0+20080317.orig/fs/aufs/vfsub.c
+++ aufs-0+20080317/fs/aufs/vfsub.c
@@ -326,7 +326,12 @@
AuDLNPair(in->f_dentry), *ppos, (unsigned long)len, flags);
lockdep_off();
- err = do_splice_to(in, ppos, pipe, len, flags);
+ if (unlikely(!in->f_op || !in->f_op->splice_read))
+ err = -EINVAL;
+ else if (unlikely(!(in->f_mode & FMODE_READ)))
+ err = -EBADF;
+ else
+ err = in->f_op->splice_read(in, ppos, pipe, len, flags);
lockdep_on();
if (err >= 0)
au_update_fuse_h_inode(in->f_vfsmnt, in->f_dentry); /*ignore*/
@@ -342,7 +347,12 @@
AuDLNPair(out->f_dentry), *ppos, (unsigned long)len, flags);
lockdep_off();
- err = do_splice_from(pipe, out, ppos, len, flags);
+ if (unlikely(!out->f_op || !out->f_op->splice_write))
+ err = -EINVAL;
+ else if (unlikely(!(out->f_mode & FMODE_WRITE)))
+ err = -EBADF;
+ else
+ err = out->f_op->splice_write(pipe, out, ppos, len, flags);
lockdep_on();
if (err >= 0)
au_update_fuse_h_inode(out->f_vfsmnt, out->f_dentry); /*ignore*/
--
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
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
