Re: [PATCH 4/4] Adds ioctl interface support for ext4 project
From: Dave Chinner <hidden>
Date: 2014-09-25 22:22:21
Also in:
linux-api, linux-fsdevel, linux-xfs
On Thu, Sep 25, 2014 at 09:41:37AM -0400, Theodore Ts'o wrote:
On Thu, Sep 25, 2014 at 05:59:12PM +1000, Dave Chinner wrote:quoted
quoted
Also I'm afraid we may quickly run out of 32 available flags in xflags so we'd need to extend that. But all this seems to be doable.The struct fsxattr was designed to be extensible - it has unused padding and enough space in the flags field to allow us to conditionally use that padding....I agree that it would be useful for ext4 to support as much of the XFS_IOC_GETXATTR/XFS_IOC_SETATTR as would make sense for ext4, and to use that to set/get the project ID. (And that we should probably do that as a separate set of patches that we could potentially go into ext4 ahead of the project quota while it is undergoing testing and review.) A few questions of Dave and other XFS folks: 1) If we only implement a partial set of the flags or other functionality, are there going to be tools that get confused? i.e., are there any userspace programs that will test for whether the ioctl is supported, and then assume that some minimal set of functionality must be implemented?
No, I don't think they will get confused. The use of the flags is get/modify/set just like other flag setting functions. The extsize and projid fields are condition on the relevant flag being set on return from a get (i.e. projid is only valid if XFS_XFLAG_PROJID[_INHERIT] is set), and those fields are only considered valid on set if those flags are set by the application (or remain set as a result of the getxattr). Hence the applications that use the getxattr/setxattr interface correctly shouldn't care what set of flags and values the filesystem supports other than the specific flags the application needs the filesystem to understand.
2) Unless I'm missing something, there is nothing that enforces that fsx_pad must be zero. I assume that means that the only way you can expand use of fields into that space is via a flag bit being consumed?
Yup, that's exactly what I meant by "conditionally use the padding". Even if the padding was guaranteed to be zero, I'd strongly recommend a flag bit to indicate the application understands that the padding region has actual meaning to guard against buggy applications. Cheers, Dave. -- Dave Chinner david-FqsqvQoI3Ljby3iVrkZq2A@public.gmane.org