[Darrick Cc'd]
On Sat, Dec 17, 2016 at 06:49:55PM -0800, Linus Torvalds wrote:
> On Fri, Dec 16, 2016 at 2:12 PM, Al Viro <v...@zeniv.linux.org.uk> wrote:
> > In this pile:
> >         * autofs-namespace series
> >         * dedupe stuff
> >         * more struct path constification
> 
> When looking at the conflict, I looked at that part of
> vfs_clone_file_prep_inodes(), and reacted to the insanity.
> 
> WTF?
> 
>         /* Zero length dedupe exits immediately; reflink goes to EOF. */
>         if (*len == 0) {
>                 if (is_dedupe) {
>                         *len = 0;
>                         return 0;
>                 }
>                 *len = isize - pos_in;
>         }
> 
> I'll just leave you to read through that part a bit more. Because
> there are two completely insane things going on in that code sequence.

One, AFAICS - pointless *len = 0 in case of is_dedupe.  That's a counterpart of
        /* Zero length dedupe exits immediately; reflink goes to EOF. */
        if (len == 0) {
                if (is_dedupe) {
                        ret = 0;
                        goto out_unlock;
                }
                len = isize - pos_in;
        }
in mainline xfs_reflink_remap_range().  What else am I missing there?
I'm not thrilled with the calling conventions they'd used, and that
*len = 0; shouldn't have been slapped there (at a guess, by inertia from
the conversion of the chunk right before that one -
        /* Are we going all the way to the end? */
        isize = i_size_read(inode_in);
        if (isize == 0) {
                ret = 0;
                goto out_unlock;
        }
in mainline, needing *len = 0; after conversion), but I don't see what else
are you refering to in that snippet...

Reply via email to