On Fri, Aug 23, 2024 at 09:20:15AM -0400, Jeff Layton wrote: > On Thu, 2024-08-22 at 21:12 -0700, Christoph Hellwig wrote: > > On Thu, Aug 22, 2024 at 05:01:22PM -0700, Darrick J. Wong wrote: > > > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > > > > > This patch introduces two more new ioctls to manage atomic updates to > > > file contents -- XFS_IOC_START_COMMIT and XFS_IOC_COMMIT_RANGE. The > > > commit mechanism here is exactly the same as what XFS_IOC_EXCHANGE_RANGE > > > does, but with the additional requirement that file2 cannot have changed > > > since some sampling point. The start-commit ioctl performs the sampling > > > of file attributes. > > > > The code itself looks simply enough now, but how do we guarantee > > that ctime actually works as a full change count and not just by > > chance here? > > > > With current mainline kernels it won't, but the updated multigrain > timestamp series is in linux-next and is slated to go into v6.12. At > that point it should be fine for this purpose. <nod> If these both get merged for 6.12, I think the appropriate port for this patch is to change xfs_ioc_start_commit to do: struct kstat kstat; fill_mg_cmtime(&kstat, STATX_CTIME | STATX_MTIME, XFS_I(ip2)); kern_f->file2_ctime = kstat.ctime.tv_sec; kern_f->file2_ctime_nsec = kstat.ctime.tv_nsec; kern_f->file2_mtime = kstat.mtime.tv_sec; kern_f->file2_mtime_nsec = kstat.mtime.tv_nsec; instead of open-coding the inode_get_[cm]time calls. The entire exchangerange feature is still marked experimental, so I didn't think it was worth rebasing my entire dev branch on the multigrain timestamp redux series; we can just fix it later. --D > -- > Jeff Layton <jlayton@xxxxxxxxxx> >