All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eddie Horng <eddiehorng.tw@gmail.com>
To: Trond Myklebust <trondmy@primarydata.com>
Cc: "amir73il@gmail.com" <amir73il@gmail.com>,
	"bfields@fieldses.org" <bfields@fieldses.org>,
	"miklos@szeredi.hu" <miklos@szeredi.hu>,
	"linux-unionfs@vger.kernel.org" <linux-unionfs@vger.kernel.org>,
	"jlayton@kernel.org" <jlayton@kernel.org>
Subject: Re: readdir returns d_type=DT_UNKNOWN to overlay exported dir (NFSv3)
Date: Thu, 15 Mar 2018 22:30:15 +0800	[thread overview]
Message-ID: <CALLuPvooC7jjPRPfGc3MPKN0bX3aiN_51A_9ugs+1Sk3=sshzA@mail.gmail.com> (raw)
In-Reply-To: <1521120161.86246.4.camel@primarydata.com>

Hi Trond,
As previous post I traced nfs3_decode_dirent and found *p==xdr_zero in
decode_post_op_attr so fattr is not actually decoded from xdr. Could
you suggest where to trace the xdr is encoded?

decode_post_op_attr()
    p = xdr_inline_decode(xdr, 4);
    if (*p != xdr_zero)
       return decode_fattr3(xdr, fattr);

nfs3_decode_dirent()
    entry->d_type = DT_UNKNOWN;
    if (entry->fattr->valid & NFS_ATTR_FATTR_V3)
        entry->d_type = nfs_umode_to_dtype(entry->fattr->mode);

thanks,
Eddie

2018-03-15 21:22 GMT+08:00 Trond Myklebust <trondmy@primarydata.com>:
> On Thu, 2018-03-15 at 15:13 +0200, Amir Goldstein wrote:
>> On Thu, Mar 15, 2018 at 11:47 AM, Eddie Horng <eddiehorng.tw@gmail.co
>> m> wrote:
>> > I tried to track the difference between overlay-NFSv3 and ext4-
>> > NFSv3
>> > of encode_post_op_attr.
>> > mount configuration:
>> > none /share overlay
>> > rw,relatime,lowerdir=/base/lower,upperdir=/base/upper,workdir=/base
>> > /work,index=on,nfs_export=on
>> > 0 0
>> > localhost:/share /mnt/n nfs
>> > rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,prot
>> > o=tcp,timeo=600,retrans=2,sec=sys,mountaddr=127.0.0.1,mountvers=3,m
>> > ountport=40931,mountproto=udp,local_lock=none,addr=127.0.0.1
>> > 0 0
>> > /dev/loop0 /share2 ext4 rw,relatime,data=ordered 0 0
>> > localhost:/share2 /mnt/n2 nfs
>> > rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,prot
>> > o=tcp,timeo=600,retrans=2,sec=sys,mountaddr=127.0.0.1,mountvers=3,m
>> > ountport=40931,mountproto=udp,local_lock=none,addr=127.0.0.1
>> > 0 0
>> >
>> > file tree:
>> > /mnt/n
>> > > -- dirA
>> > >   `-- bar
>> > > -- dirL
>> > >   `-- ro-file
>> >
>> > `-- foo
>> >
>> > /mnt/n2
>> > `-- lost+found
>> >
>> > Attached log are dmesg start from "readdir /mnt/n (n2)" with nfs
>> > and
>> > nfsd log are enabled all by sunrpc.nfs(d)_debug. I also add a
>> > dump_stack() in the beginning of encode_post_op_attr.
>> >
>> > It seems overlay and ext4 have different call flow after "nfsd:
>> > READDIR+", there is no failure in overlay's encode_post_op_attr,
>> > nfsd
>> > does fill the attrs, same as ext4 but it has additional readdir
>> > call
>> > to child node of "/". I'm not sure if this is normal to overlay and
>> > is
>> > the cause of DT_UNKNOWN.
>>
>> I tried to follow nfsd readdir code to see where the difference can
>> come
>> from, but nothing poped at me so far.
>>
>> >
>> > In additional, overlay returns DT_UNKNOWN to either lower dir or
>> > merged dir.
>>
>> Your test is readdir of a merged dir, the behavior could differ when
>> readdir of
>> an overlayfs non merged dir.
>>
>> Please send the output and dmesg of readdir of the non-merged lower
>> dir:
>>
>> /readdir/a.out /mnt/n/dirL
>>
>> Please mount an NFS share of /base and send the output of the same
>> dir:
>>
>> /readdir/a.out /mnt/n_base/lower/n/dirL
>>
>> Right now I speculate that the issue you report is related to
>> how merged dirs are iterated, but not sure exactly why.
>
> fs/nfsd has nothing to do with ${SUBJECT}.
>
> If you want to trace where the DT_UNKNOWN is coming from, then you need
> to look at the _client_ code in fs/nfs/nfs3xdr.c:nfs3_decode_dirent().
>
> --
> Trond Myklebust
> Linux NFS client maintainer, PrimaryData
> trond.myklebust@primarydata.com

  reply	other threads:[~2018-03-15 14:30 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-14  8:42 readdir returns d_type=DT_UNKNOWN to overlay exported dir (NFSv3) Eddie Horng
2018-03-14  9:56 ` Amir Goldstein
2018-03-14 11:02 ` Jeff Layton
2018-03-14 14:16   ` Trond Myklebust
2018-03-14 14:30     ` Jeff Layton
2018-03-14 15:03       ` Amir Goldstein
2018-03-14 15:06         ` Trond Myklebust
2018-03-14 15:14           ` Amir Goldstein
2018-03-14 15:40             ` Eddie Horng
2018-03-15  9:23               ` Eddie Horng
2018-03-15  9:47 ` Eddie Horng
2018-03-15 13:13   ` Amir Goldstein
2018-03-15 13:22     ` Trond Myklebust
2018-03-15 14:30       ` Eddie Horng [this message]
2018-03-15 18:40         ` Amir Goldstein
2018-03-15 21:48           ` Amir Goldstein
2018-03-16  6:25             ` Eddie Horng
2018-03-16  7:23               ` Amir Goldstein
2018-03-16  8:06                 ` Eddie Horng
2018-03-16  9:50                   ` Amir Goldstein
2018-03-16 15:06                     ` Eddie Horng
2018-03-16 15:28                       ` Amir Goldstein

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='CALLuPvooC7jjPRPfGc3MPKN0bX3aiN_51A_9ugs+1Sk3=sshzA@mail.gmail.com' \
    --to=eddiehorng.tw@gmail.com \
    --cc=amir73il@gmail.com \
    --cc=bfields@fieldses.org \
    --cc=jlayton@kernel.org \
    --cc=linux-unionfs@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=trondmy@primarydata.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.