* Re: [bug report] NFS: Support statx_get and statx_set ioctls [not found] ` <Yd1ETmx/HCigOrzl@infradead.org> @ 2022-01-12 7:57 ` Amir Goldstein 2022-01-12 17:43 ` Darrick J. Wong 2022-01-13 15:01 ` Trond Myklebust 0 siblings, 2 replies; 7+ messages in thread From: Amir Goldstein @ 2022-01-12 7:57 UTC (permalink / raw) To: Christoph Hellwig, Trond Myklebust Cc: Dan Carpenter, richard.sharpe, Linux NFS Mailing List, lance.shelton, Anna Schumaker, linux-fsdevel, Linux API, CIFS, ntfs3, Steve French, Konstantin Komarov On Wed, Jan 12, 2022 at 4:10 AM Christoph Hellwig <hch@infradead.org> wrote: > > On Tue, Jan 11, 2022 at 10:43:09AM +0300, Dan Carpenter wrote: > > Hello Richard Sharpe, > > > > This is a semi-automatic email about new static checker warnings. > > > > The patch bc66f6805766: "NFS: Support statx_get and statx_set ioctls" > > from Dec 27, 2021, leads to the following Smatch complaint: > > Yikes, how did that crap get merged? Did it? The bots are scanning through patches on ML: https://lore.kernel.org/linux-nfs/20211227190504.309612-1-trondmy@kernel.org/ > Why the f**k does a remote file system need to duplicate stat? > This kind of stuff needs a proper discussion on linux-fsdevel. +ntfs3 +linux-cifs +linux-api The proposal of statx_get() is very peculiar. statx() was especially designed to be extended and accommodate a diversity of filesystem attributes. Moreover, NFSv4 is not the only fs that supports those extra attributes. ntfs3 supports set/get of dos attrib bits via xattr SYSTEM_NTFS_ATTRIB. cifs support set/get of CIFS_XATTR_ATTRIB and CIFS_XATTR_CREATETIME. Not only that, but Linux now has ksmbd which actually emulates those attributes on the server side (like samba) by storing a samba formatted blob in user.DOSATTRIB xattr. It should have a way to get/set them on filesystems that support them natively. The whole thing shouts for standardization. Samba should be able to get/set the extra attributes by statx() and ksmbd should be able to get them from the filesystem by vfs_getattr(). WRT statx_set(), standardization is also in order, both for userspace API and for vfs API to be used by ksmbd and nfsd v4. The new-ish vfs API fileattr_get/set() comes to mind when considering a method to set the dos attrib bits. Heck, FS_NODUMP_FL is the same as FILE_ATTRIBUTE_ARCHIVE. That will also make it easy for filesystems that support the fileattr flags to add support for FS_SYSTEM_FL, FS_HIDDEN_FL. There is a use case for that. It can be inferred from samba config options "map hidden/system/archive" that are used to avoid the cost of getxattr per file during a "readdirplus" query. I recently quantified this cost on a standard file server and it was very high. Which leaves us with an API to set the 'time backup' attribute, which is a "mutable creation time" [*]. cifs supports setting it via setxattr and I guess ntfs3 could use an API to set it as well. One natural interface that comes to mind is: struct timespec times[3] = {/* atime, mtime, crtime */} utimensat(dirfd, path, times, AT_UTIMES_ARCHIVE); and add ia_crtime with ATTR_CRTIME to struct iattr. Trond, Do you agree to rework your patches in this direction? Perhaps as the first stage, just use statx() and ioctls to set the attributes to give enough time for bikeshedding the set APIs and follow up with the generic set API patches later? Thanks, Amir. [*] I find it convenient to use the statx() terminology of "btime" to refer to the immutable birth time provided by some filesystems and to use "crtime" for the mutable creation time for archiving, so that at some point, some filesystems may provide both of these times independently. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] NFS: Support statx_get and statx_set ioctls 2022-01-12 7:57 ` [bug report] NFS: Support statx_get and statx_set ioctls Amir Goldstein @ 2022-01-12 17:43 ` Darrick J. Wong 2022-01-13 3:52 ` Amir Goldstein 2022-01-13 15:01 ` Trond Myklebust 1 sibling, 1 reply; 7+ messages in thread From: Darrick J. Wong @ 2022-01-12 17:43 UTC (permalink / raw) To: Amir Goldstein Cc: Christoph Hellwig, Trond Myklebust, Dan Carpenter, richard.sharpe, Linux NFS Mailing List, lance.shelton, Anna Schumaker, linux-fsdevel, Linux API, CIFS, ntfs3, Steve French, Konstantin Komarov On Wed, Jan 12, 2022 at 09:57:58AM +0200, Amir Goldstein wrote: > On Wed, Jan 12, 2022 at 4:10 AM Christoph Hellwig <hch@infradead.org> wrote: > > > > On Tue, Jan 11, 2022 at 10:43:09AM +0300, Dan Carpenter wrote: > > > Hello Richard Sharpe, > > > > > > This is a semi-automatic email about new static checker warnings. > > > > > > The patch bc66f6805766: "NFS: Support statx_get and statx_set ioctls" > > > from Dec 27, 2021, leads to the following Smatch complaint: > > > > Yikes, how did that crap get merged? > > Did it? The bots are scanning through patches on ML: > > https://lore.kernel.org/linux-nfs/20211227190504.309612-1-trondmy@kernel.org/ > > > Why the f**k does a remote file system need to duplicate stat? > > This kind of stuff needs a proper discussion on linux-fsdevel. > > +ntfs3 +linux-cifs +linux-api > > The proposal of statx_get() is very peculiar. > statx() was especially designed to be extended and accommodate > a diversity of filesystem attributes. > > Moreover, NFSv4 is not the only fs that supports those extra attributes. > ntfs3 supports set/get of dos attrib bits via xattr SYSTEM_NTFS_ATTRIB. > cifs support set/get of CIFS_XATTR_ATTRIB and CIFS_XATTR_CREATETIME. > > Not only that, but Linux now has ksmbd which actually emulates > those attributes on the server side (like samba) by storing a samba > formatted blob in user.DOSATTRIB xattr. > It should have a way to get/set them on filesystems that support them > natively. > > The whole thing shouts for standardization. > > Samba should be able to get/set the extra attributes by statx() and > ksmbd should be able to get them from the filesystem by vfs_getattr(). > > WRT statx_set(), standardization is also in order, both for userspace So, uh, this is the first I've heard of statx_set in years. I'm glad to hear that standardizing FSGETFLAGS/FSSETXATTR/etc is still alive. :) > API and for vfs API to be used by ksmbd and nfsd v4. > > The new-ish vfs API fileattr_get/set() comes to mind when considering > a method to set the dos attrib bits. > Heck, FS_NODUMP_FL is the same as FILE_ATTRIBUTE_ARCHIVE. > That will also make it easy for filesystems that support the fileattr flags > to add support for FS_SYSTEM_FL, FS_HIDDEN_FL. > > There is a use case for that. It can be inferred from samba config options > "map hidden/system/archive" that are used to avoid the cost of getxattr > per file during a "readdirplus" query. I recently quantified this cost on a > standard file server and it was very high. > > Which leaves us with an API to set the 'time backup' attribute, which > is a "mutable creation time" [*]. > cifs supports setting it via setxattr and I guess ntfs3 could use an > API to set it as well. > > One natural interface that comes to mind is: > > struct timespec times[3] = {/* atime, mtime, crtime */} > utimensat(dirfd, path, times, AT_UTIMES_ARCHIVE); > > and add ia_crtime with ATTR_CRTIME to struct iattr. > > Trond, > > Do you agree to rework your patches in this direction? > Perhaps as the first stage, just use statx() and ioctls to set the > attributes to give enough time for bikeshedding the set APIs > and follow up with the generic set API patches later? > > Thanks, > Amir. > > [*] I find it convenient to use the statx() terminology of "btime" > to refer to the immutable birth time provided by some filesystems > and to use "crtime" for the mutable creation time for archiving, > so that at some point, some filesystems may provide both of > these times independently. I disagree because XFS and ext4 both use 'crtime' for the immutable birth time, not a mutable creation time for archiving. I think we'd need to be careful about wording here if there is interest in adding a user-modifiable file creation time (as opposed to creation time for a specific instance of an inode) to filesystems. Once a year or so we get a question/complaint from a user about how they can't change the file creation time and we have to explain to them what's really going on. --D ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] NFS: Support statx_get and statx_set ioctls 2022-01-12 17:43 ` Darrick J. Wong @ 2022-01-13 3:52 ` Amir Goldstein 2022-01-13 6:30 ` Jeremy Allison 0 siblings, 1 reply; 7+ messages in thread From: Amir Goldstein @ 2022-01-13 3:52 UTC (permalink / raw) To: Darrick J. Wong Cc: Christoph Hellwig, Trond Myklebust, Dan Carpenter, richard.sharpe, Linux NFS Mailing List, lance.shelton, Anna Schumaker, linux-fsdevel, Linux API, CIFS, ntfs3, Steve French, Konstantin Komarov, Ralph Boehme > > Which leaves us with an API to set the 'time backup' attribute, which > > is a "mutable creation time" [*]. > > cifs supports setting it via setxattr and I guess ntfs3 could use an > > API to set it as well. > > > > One natural interface that comes to mind is: > > > > struct timespec times[3] = {/* atime, mtime, crtime */} > > utimensat(dirfd, path, times, AT_UTIMES_ARCHIVE); > > > > and add ia_crtime with ATTR_CRTIME to struct iattr. > > > > Trond, > > > > Do you agree to rework your patches in this direction? > > Perhaps as the first stage, just use statx() and ioctls to set the > > attributes to give enough time for bikeshedding the set APIs > > and follow up with the generic set API patches later? > > > > Thanks, > > Amir. > > > > [*] I find it convenient to use the statx() terminology of "btime" > > to refer to the immutable birth time provided by some filesystems > > and to use "crtime" for the mutable creation time for archiving, > > so that at some point, some filesystems may provide both of > > these times independently. > > I disagree because XFS and ext4 both use 'crtime' for the immutable > birth time, not a mutable creation time for archiving. I think we'd > need to be careful about wording here if there is interest in adding a > user-modifiable file creation time (as opposed to creation time for a > specific instance of an inode) to filesystems. > > Once a year or so we get a question/complaint from a user about how they > can't change the file creation time and we have to explain to them > what's really going on. > To add one more terminology to the mix - when Samba needed to cope with these two terminologies they came up with itime for "instantiation time" (one may also consider it "immutable time"). Another issue besides wording, is that statx btime can be either of those things depending on the filesystem, so if we ever add mutable btime to ext4/xfs, what's statx btime going to return? One more question to ask, if we were to add mutable btime to ext4/xfs should it be an additional attribute at all or should we allow with explicit filesystem flag and maybe also mount option to modify the existing crtime inode field? if we can accept that some users are willing to trade the immutable crtime with mutable btime, then we can settle with a flag indicating "warranty seal removed" from the existing crtime field. At least one advantage of this approach is that it simplifies terminology. Thanks, Amir. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] NFS: Support statx_get and statx_set ioctls 2022-01-13 3:52 ` Amir Goldstein @ 2022-01-13 6:30 ` Jeremy Allison 2022-01-13 14:58 ` Trond Myklebust 0 siblings, 1 reply; 7+ messages in thread From: Jeremy Allison @ 2022-01-13 6:30 UTC (permalink / raw) To: Amir Goldstein Cc: Darrick J. Wong, Christoph Hellwig, Trond Myklebust, Dan Carpenter, richard.sharpe, Linux NFS Mailing List, lance.shelton, Anna Schumaker, linux-fsdevel, Linux API, CIFS, ntfs3, Steve French, Konstantin Komarov, Ralph Boehme On Thu, Jan 13, 2022 at 05:52:40AM +0200, Amir Goldstein wrote: > >To add one more terminology to the mix - when Samba needed to cope >with these two terminologies they came up with itime for "instantiation time" >(one may also consider it "immutable time"). No, that's not what itime is. It's used as the basis for the fileid return as MacOSX clients insist on no-reuse of inode numbers when a file is deleted then re-created, and ext4 will re-use the same inode. Samba uses btime for "birth time", and will use statx to get it from the filesystem but then store it in the dos.attribute EA so it can be modified if the client sets it. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] NFS: Support statx_get and statx_set ioctls 2022-01-13 6:30 ` Jeremy Allison @ 2022-01-13 14:58 ` Trond Myklebust 2022-01-13 17:50 ` Jeremy Allison 0 siblings, 1 reply; 7+ messages in thread From: Trond Myklebust @ 2022-01-13 14:58 UTC (permalink / raw) To: jra@samba.org, amir73il@gmail.com Cc: Lance Shelton, Richard Sharpe, linux-cifs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org, ntfs3@lists.linux.dev, hch@infradead.org, almaz.alexandrovich@paragon-software.com, djwong@kernel.org, dan.carpenter@oracle.com, linux-nfs@vger.kernel.org, Anna.Schumaker@netapp.com, slow@samba.org, sfrench@samba.org On Wed, 2022-01-12 at 22:30 -0800, Jeremy Allison wrote: > On Thu, Jan 13, 2022 at 05:52:40AM +0200, Amir Goldstein wrote: > > > > To add one more terminology to the mix - when Samba needed to cope > > with these two terminologies they came up with itime for > > "instantiation time" > > (one may also consider it "immutable time"). > > No, that's not what itime is. It's used as the basis > for the fileid return as MacOSX clients insist on no-reuse > of inode numbers when a file is deleted then re-created, > and ext4 will re-use the same inode. So basically it serves more or less the same purpose as the generation counter that most Linux filesystems use in the filehandle to provide similar only-once semantics? > > Samba uses btime for "birth time", and will use statx > to get it from the filesystem but then store it in > the dos.attribute EA so it can be modified if the > client sets it. Right. That appears to be a difference between Windows and Linux. In most Linux filesystems, the btime is set by the filesystem at file creation time, however Windows allows it to be set by the application, presumably for the purpose of backup/restore? NFSv4 supports both modes for the btime. -- Trond Myklebust Linux NFS client maintainer, Hammerspace trond.myklebust@hammerspace.com ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] NFS: Support statx_get and statx_set ioctls 2022-01-13 14:58 ` Trond Myklebust @ 2022-01-13 17:50 ` Jeremy Allison 0 siblings, 0 replies; 7+ messages in thread From: Jeremy Allison @ 2022-01-13 17:50 UTC (permalink / raw) To: Trond Myklebust Cc: amir73il@gmail.com, Lance Shelton, Richard Sharpe, linux-cifs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org, ntfs3@lists.linux.dev, hch@infradead.org, almaz.alexandrovich@paragon-software.com, djwong@kernel.org, dan.carpenter@oracle.com, linux-nfs@vger.kernel.org, Anna.Schumaker@netapp.com, slow@samba.org, sfrench@samba.org On Thu, Jan 13, 2022 at 02:58:19PM +0000, Trond Myklebust wrote: >On Wed, 2022-01-12 at 22:30 -0800, Jeremy Allison wrote: >> On Thu, Jan 13, 2022 at 05:52:40AM +0200, Amir Goldstein wrote: >> > >> > To add one more terminology to the mix - when Samba needed to cope >> > with these two terminologies they came up with itime for >> > "instantiation time" >> > (one may also consider it "immutable time"). >> >> No, that's not what itime is. It's used as the basis >> for the fileid return as MacOSX clients insist on no-reuse >> of inode numbers when a file is deleted then re-created, >> and ext4 will re-use the same inode. > >So basically it serves more or less the same purpose as the generation >counter that most Linux filesystems use in the filehandle to provide >similar only-once semantics? Kind of, although we moved it recently to be a current_time + random skew as the timestamp resolution in ext4 just wasn't enough to get us unique fileids. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bug report] NFS: Support statx_get and statx_set ioctls 2022-01-12 7:57 ` [bug report] NFS: Support statx_get and statx_set ioctls Amir Goldstein 2022-01-12 17:43 ` Darrick J. Wong @ 2022-01-13 15:01 ` Trond Myklebust 1 sibling, 0 replies; 7+ messages in thread From: Trond Myklebust @ 2022-01-13 15:01 UTC (permalink / raw) To: hch@infradead.org, amir73il@gmail.com Cc: Lance Shelton, Richard Sharpe, linux-cifs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org, almaz.alexandrovich@paragon-software.com, ntfs3@lists.linux.dev, dan.carpenter@oracle.com, sfrench@samba.org, linux-nfs@vger.kernel.org, Anna.Schumaker@netapp.com On Wed, 2022-01-12 at 09:57 +0200, Amir Goldstein wrote: > On Wed, Jan 12, 2022 at 4:10 AM Christoph Hellwig <hch@infradead.org> > wrote: > > > > On Tue, Jan 11, 2022 at 10:43:09AM +0300, Dan Carpenter wrote: > > > Hello Richard Sharpe, > > > > > > This is a semi-automatic email about new static checker warnings. > > > > > > The patch bc66f6805766: "NFS: Support statx_get and statx_set > > > ioctls" > > > from Dec 27, 2021, leads to the following Smatch complaint: > > > > Yikes, how did that crap get merged? > > Did it? The bots are scanning through patches on ML: > > https://lore.kernel.org/linux-nfs/20211227190504.309612-1-trondmy@kernel.org/ > > > Why the f**k does a remote file system need to duplicate stat? > > This kind of stuff needs a proper discussion on linux-fsdevel. > > +ntfs3 +linux-cifs +linux-api > > The proposal of statx_get() is very peculiar. > statx() was especially designed to be extended and accommodate > a diversity of filesystem attributes. > > Moreover, NFSv4 is not the only fs that supports those extra > attributes. > ntfs3 supports set/get of dos attrib bits via xattr > SYSTEM_NTFS_ATTRIB. > cifs support set/get of CIFS_XATTR_ATTRIB and CIFS_XATTR_CREATETIME. > > Not only that, but Linux now has ksmbd which actually emulates > those attributes on the server side (like samba) by storing a samba > formatted blob in user.DOSATTRIB xattr. > It should have a way to get/set them on filesystems that support them > natively. > > The whole thing shouts for standardization. > > Samba should be able to get/set the extra attributes by statx() and > ksmbd should be able to get them from the filesystem by > vfs_getattr(). > > WRT statx_set(), standardization is also in order, both for userspace > API and for vfs API to be used by ksmbd and nfsd v4. > > The new-ish vfs API fileattr_get/set() comes to mind when considering > a method to set the dos attrib bits. > Heck, FS_NODUMP_FL is the same as FILE_ATTRIBUTE_ARCHIVE. > That will also make it easy for filesystems that support the fileattr > flags > to add support for FS_SYSTEM_FL, FS_HIDDEN_FL. > > There is a use case for that. It can be inferred from samba config > options > "map hidden/system/archive" that are used to avoid the cost of > getxattr > per file during a "readdirplus" query. I recently quantified this > cost on a > standard file server and it was very high. > > Which leaves us with an API to set the 'time backup' attribute, which > is a "mutable creation time" [*]. > cifs supports setting it via setxattr and I guess ntfs3 could use an > API to set it as well. > > One natural interface that comes to mind is: > > struct timespec times[3] = {/* atime, mtime, crtime */} > utimensat(dirfd, path, times, AT_UTIMES_ARCHIVE); > > and add ia_crtime with ATTR_CRTIME to struct iattr. > > Trond, > > Do you agree to rework your patches in this direction? > Perhaps as the first stage, just use statx() and ioctls to set the > attributes to give enough time for bikeshedding the set APIs > and follow up with the generic set API patches later? > > Thanks, > Amir. > > [*] I find it convenient to use the statx() terminology of "btime" > to refer to the immutable birth time provided by some filesystems > and to use "crtime" for the mutable creation time for archiving, > so that at some point, some filesystems may provide both of > these times independently. I'll give it a shot. I've asked Anna to remove these patches from the pull request for this merge Window, so I'll try to rework the retrieval side using statx() and then work on a statx_set() API to enable setting of these new variables. -- Trond Myklebust Linux NFS client maintainer, Hammerspace trond.myklebust@hammerspace.com ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-01-13 17:51 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20220111074309.GA12918@kili>
[not found] ` <Yd1ETmx/HCigOrzl@infradead.org>
2022-01-12 7:57 ` [bug report] NFS: Support statx_get and statx_set ioctls Amir Goldstein
2022-01-12 17:43 ` Darrick J. Wong
2022-01-13 3:52 ` Amir Goldstein
2022-01-13 6:30 ` Jeremy Allison
2022-01-13 14:58 ` Trond Myklebust
2022-01-13 17:50 ` Jeremy Allison
2022-01-13 15:01 ` Trond Myklebust
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).