On Mon, Nov 16, 2020 at 11:38:44AM -0500, Jeff Layton wrote: > Hmm, ok... nfsd4_change_attribute() is called from nfs4 code but also > nfs3 code as well. The v4 caller (encode_change) only calls it when > IS_I_VERSION is set, but the v3 callers don't seem to pay attention to > that. Weird. Looking back.... That goes back to the original patch adding support for ext4's i_version, c654b8a9cba6 "nfsd: support ext4 i_version". It's in nfs3xdr.c, but the fields it's filling in, fh_pre_change and fh_post_change, are only used in nfs4xdr.c. Maybe moving it someplace else (vfs.c?) would save some confusion. Anyway, yes, that should be checking SB_I_VERSION too. > I think the basic issue here is that we're trying to use SB_I_VERSION > for two different things. Its main purpose is to tell the kernel that > when it's updating the file times that it should also (possibly) > increment the i_version counter too. (Some of this is documented in > include/linux/iversion.h too, fwiw) > > nfsd needs a way to tell whether the field should be consulted at all. > For that we probably do need a different flag of some sort. Doing it at > the fstype level seems a bit wrong though -- v2/3 don't have a real > change attribute and it probably shouldn't be trusted when exporting > them. Oops, good point. I suppose simplest is just another SB_ flag. --b.