Re: [PATCH 4/4] copyfile: copyfile

From: Linus Torvalds
Date: Tue Sep 07 2004 - 09:08:30 EST




On Tue, 7 Sep 2004, Jörn Engel wrote:
>
> Again, the syscall itself may be a stupid idea, but Steve indicated
> interest for cifs. I'll hide behind his back and let him fight for
> it. ;)

Well, this isn't useful for cifs.

For cifs to be able to use it, the "copyfile()" interface needs to
basically just be a pathname operation (ie a "dir->i_op->copy()"), not a
"struct file" operation. It's more like the VFS "->rename()" or "->link"
operations, in other words. And it should return -EXDEV the same way
rename returns EXDEV if the files aren't on the same filesystem.

Then you could (and should) make a "generic_file_copy()" function that
takes that pathname format, and then uses sendfile() to do the copy for
regular disk-based filesystems.

I think you should be able to copy the "sys_link()" code for almost all of
the top-level stuff. The only real difference being

- error = dir->i_op->link(old_dentry, dir, new_dentry);
+ error = dir->i_op->copy(old_dentry, dir, new_dentry);

or something.

And no, I don't know how to handle interruptability. I think the right
answer may be that filesystems that don't support this as a "native op"
and can't do it quickly should just return an error, and then users can
copy their multi-gigabyte files by hand, like they used to.

So if we do this, we do this _right_. We also make sure that we error out
"too much" rather than "too little", so that people don't start depending
on behaviour that we don't want them to depend on.

Linus
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/