linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Anna Schumaker <Anna.Schumaker@netapp.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: "Darrick J. Wong" <darrick.wong@oracle.com>,
	<linux-nfs@vger.kernel.org>, <linux-btrfs@vger.kernel.org>,
	<linux-fsdevel@vger.kernel.org>, <linux-api@vger.kernel.org>,
	<zab@zabbo.net>, <viro@zeniv.linux.org.uk>, <clm@fb.com>,
	<mtk.manpages@gmail.com>, <andros@netapp.com>
Subject: Re: [PATCH v5 8/9] vfs: Add vfs_copy_file_range() support for pagecache copies
Date: Wed, 14 Oct 2015 13:59:40 -0400	[thread overview]
Message-ID: <561E980C.9010509@Netapp.com> (raw)
In-Reply-To: <20151012231749.GC11398@birch.djwong.org>

On 10/12/2015 07:17 PM, Darrick J. Wong wrote:
> On Sun, Oct 11, 2015 at 07:22:03AM -0700, Christoph Hellwig wrote:
>> On Wed, Sep 30, 2015 at 01:26:52PM -0400, Anna Schumaker wrote:
>>> This allows us to have an in-kernel copy mechanism that avoids frequent
>>> switches between kernel and user space.  This is especially useful so
>>> NFSD can support server-side copies.
>>>
>>> I make pagecache copies configurable by adding three new (exclusive)
>>> flags:
>>> - COPY_FR_REFLINK tells vfs_copy_file_range() to only create a reflink.
>>> - COPY_FR_COPY does a full data copy, but may be filesystem accelerated.
>>> - COPY_FR_DEDUP creates a reflink, but only if the contents of both
>>>   ranges are identical.
>>
>> All but FR_COPY really should be a separate system call.  Clones (an
>> dedup as a special case of clones) are really a separate beast from file
>> copies.
>>
>> If I want to clone a file I either want it clone fully or fail, not copy
>> a certain amount.  That means that a) we need to return an error not
>> short "write", and b) locking impementations are important - we need to
>> prevent other applications from racing with our clone even if it is
>> large, while to get these semantics for the possible short returning
>> file copy will require a proper userland locking protocol. Last but not
>> least file copies need to be interruptible while clones should be not.
>> All this is already important for local file systems and even more
>> important for NFS exporting.
>>
>> So I'd suggest to drop this patch and just let your syscall handle
>> actualy copies with all their horrors.  We can go with Peng's patches
>> to generalize the btrfs ioctls for clones for now which is what everyone
>> already uses anyway, and then add a separate sys_file_clone later.

So what I'm hearing is that I should drop the reflink and dedup flags and change this system call only perform a full copy (with preserving of sparseness), correct?  I can make those changes, but only if everybody is in agreement that it's the best way forward.

The only reason I haven't done anything to make this system call interruptible is because I haven't been able to find any documentation or examples for making system calls interruptible.  How do I do this?

Anna

> 
> Hm.  Peng's patches only generalize the CLONE and CLONE_RANGE ioctls from
> btrfs, however they don't port over the (vastly different) EXTENT_SAME ioctl.
> 
> What does everyone think about generalizing EXTENT_SAME?  The interface enables
> one to ask the kernel to dedupe multiple file ranges in a single call.  That's
> more complex than what I was proposing with COPY_FR_DEDUP(E), but I'm assuming
> that the extra complexity buys us the ability to ... multi-dedupe at the same
> time, with locks held on the source file?
> 
> I'm happy to generalize the existing EXTENT_SAME, but please yell if you really
> hate the interface.
> 
> --D
> 
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-api" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html


  parent reply	other threads:[~2015-10-14 17:59 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-30 17:26 [PATCH v5 0/9] VFS: In-kernel copy system call Anna Schumaker
2015-09-30 17:26 ` [PATCH v5 1/9] vfs: add copy_file_range syscall and vfs helper Anna Schumaker
2015-09-30 17:26 ` [PATCH v5 2/9] x86: add sys_copy_file_range to syscall tables Anna Schumaker
2015-09-30 17:26 ` [PATCH v5 3/9] btrfs: add .copy_file_range file operation Anna Schumaker
2015-09-30 17:26 ` [PATCH v5 4/9] vfs: Copy should check len after file open mode Anna Schumaker
2015-10-11 14:22   ` Christoph Hellwig
2015-09-30 17:26 ` [PATCH v5 5/9] vfs: Copy shouldn't forbid ranges inside the same file Anna Schumaker
2015-10-11 14:22   ` Christoph Hellwig
2015-10-14 17:37     ` Anna Schumaker
2015-10-14 18:25       ` Christoph Hellwig
2015-10-14 18:27         ` Anna Schumaker
2015-09-30 17:26 ` [PATCH v5 6/9] vfs: Copy should use file_out rather than file_in Anna Schumaker
2015-10-11 14:24   ` Christoph Hellwig
2015-09-30 17:26 ` [PATCH v5 7/9] vfs: Remove copy_file_range mountpoint checks Anna Schumaker
2015-10-11 14:23   ` Christoph Hellwig
2015-10-14 17:41     ` Anna Schumaker
2015-10-14 18:25       ` Christoph Hellwig
2015-09-30 17:26 ` [PATCH v5 8/9] vfs: Add vfs_copy_file_range() support for pagecache copies Anna Schumaker
2015-10-08  1:40   ` Neil Brown
2015-10-09 11:15     ` Pádraig Brady
2015-10-13 20:25       ` Anna Schumaker
2015-10-14  7:41         ` Christoph Hellwig
2015-10-13 19:45     ` Anna Schumaker
2015-10-11 14:22   ` Christoph Hellwig
2015-10-12 23:17     ` Darrick J. Wong
2015-10-13  3:36       ` Trond Myklebust
2015-10-13  7:19         ` Darrick J. Wong
2015-10-13  7:30         ` Christoph Hellwig
2015-10-13  7:27       ` Christoph Hellwig
2015-11-10  6:24         ` Darrick J. Wong
2015-10-14 17:59       ` Anna Schumaker [this message]
2015-10-14 18:08         ` Andy Lutomirski
2015-10-14 18:27           ` Christoph Hellwig
2015-10-14 18:38             ` Andy Lutomirski
2015-10-14 18:49               ` Christoph Hellwig
2015-10-14 18:53                 ` Andy Lutomirski
2015-10-14 19:14                   ` Austin S Hemmelgarn
2015-10-14 19:39                     ` Pádraig Brady
2015-10-15  5:56                   ` Christoph Hellwig
2015-10-14 19:08             ` Austin S Hemmelgarn
2015-10-15  6:36               ` Christoph Hellwig
2015-10-15 12:24                 ` Austin S Hemmelgarn
2015-10-16  5:38                   ` Christoph Hellwig
2015-10-16 11:46                     ` Austin S Hemmelgarn
2015-10-16 12:02                       ` Pádraig Brady
2015-10-16 12:24                         ` Christoph Hellwig
2015-10-16 12:46                           ` Austin S Hemmelgarn
2015-10-16 12:21                       ` Christoph Hellwig
2015-10-16 12:50                         ` Austin S Hemmelgarn
2015-10-16 13:12                           ` Christoph Hellwig
2015-10-16 14:11                             ` Austin S Hemmelgarn
2015-10-14 18:11         ` Darrick J. Wong
2015-10-14 18:26           ` Andy Lutomirski
2015-09-30 17:26 ` [PATCH v5 9/9] btrfs: btrfs_copy_file_range() only supports reflinks Anna Schumaker
2015-10-11 14:29   ` Christoph Hellwig
2015-10-12 10:23     ` Pádraig Brady
2015-10-12 14:34       ` Christoph Hellwig
2015-10-12 23:41         ` Darrick J. Wong
2015-10-13  7:29           ` Christoph Hellwig
2015-10-14 18:46             ` Darrick J. Wong
2015-10-15  6:00               ` Christoph Hellwig
2015-10-16 11:49                 ` Chris Mason
2015-10-16 12:25                   ` Christoph Hellwig
2015-10-16 13:19                     ` Chris Mason
2015-10-16 21:44                       ` Dave Chinner
2015-10-17 13:44                         ` Chris Mason
2015-10-15  8:35               ` Dave Chinner
2015-09-30 17:26 ` [PATCH v5 10/9] copy_file_range.2: New page documenting copy_file_range() Anna Schumaker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=561E980C.9010509@Netapp.com \
    --to=anna.schumaker@netapp.com \
    --cc=andros@netapp.com \
    --cc=clm@fb.com \
    --cc=darrick.wong@oracle.com \
    --cc=hch@infradead.org \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=mtk.manpages@gmail.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=zab@zabbo.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).