On Fri, Mar 16, 2018 at 8:25 AM, Eddie Horng <eddiehorng.tw@xxxxxxxxx> wrote: > 2018-03-16 5:48 GMT+08:00 Amir Goldstein <amir73il@xxxxxxxxx>: >> On Thu, Mar 15, 2018 at 8:40 PM, Amir Goldstein <amir73il@xxxxxxxxx> wrote: >>> On Thu, Mar 15, 2018 at 4:30 PM, Eddie Horng <eddiehorng.tw@xxxxxxxxx> wrote: >> [...] >>> The problem *is* with nfsd+overlayfs, because nfsd verifies >>> in compose_entry_fh() that (dchild->d_inode->i_ino == ino), but it is not. >>> In that case, encode_entryplus_baggage() falls back to encoding xdr_zero. >>> In overlayfs stat.st_ino is consistent with readdir d_ino since kernel version >>> v4.15 and only for all layers on the same fs. >>> >>> However, there is no guaranty that inode->i_ino is the same as stat.st_ino. >>> Overlayfs exposes only stat.st_ino to user (as well as readdir d_ino), but >>> never (to my knowledge) does it expose inode->i_ino. >>> >>> There was a nfsd fix for a somewhat similar problem that went into v4.16-rc1: >>> 76c479480b9a nfsd: encode stat->mtime for getattr instead of inode->i_mtime >>> >>> The solution to the problem is to either convert all references of >>> nfsd to i_inode >>> with references to st_ino, or make sure to set inode->i_ino correctly for >>> overlayfs inodes. >>> >>> From first glimps, the change in nfsd looks non trivial. >>> The change to overlayfs seems doable, but didn't look closely yet. >>> Will try to come up with test patch for you. >>> >> >> Eddie, >> >> Please try this patch. It worked for me. >> >> Thanks, >> Amir. > > Hi Amir, > The patch works like a charm in my first test, but when I switch lower > layer to different fs then upper and merged, problem comes again. The Yes, that is expected. As I explained, overlayfs does NOT guaranty consistency of d_ino to st_ino with non-samefs and this patch doesn't change that. Apparently, the consequence is that with NFSv3 you will get DT_UNKNOWN. If this is really a problem for your use case, I have already posted a solution for non-samefs while back https://github.com/amir73il/linux/commits/ovl-xino I can rebase and re-post if you are interested in testing. Can I assume from your test example that you are interested in the setup of ext4 as upper/lower (but non samefs)? Because solving the problem for ext4 (32bit ino) is a bit simpler than the general case (64bit ino). Thanks, Amir. -- To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html