On Fri, 2024-08-23 at 10:41 -0700, Darrick J. Wong wrote: > 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; > Yep, that's exactly what you'd want to do. > 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. > Sounds good. -- Jeff Layton <jlayton@xxxxxxxxxx>