On Wed, Dec 18, 2024 at 09:07:26AM +1030, Qu Wenruo wrote: > > > 在 2024/12/18 03:52, Darrick J. Wong 写道: > > On Tue, Dec 17, 2024 at 08:26:33AM +0000, Filipe Manana wrote: > > > On Tue, Dec 17, 2024 at 8:14 AM Christoph Hellwig <hch@xxxxxxxxxxxxx> wrote: > > > > > > > > On Wed, Dec 11, 2024 at 03:09:40PM +0000, fdmanana@xxxxxxxxxx wrote: > > > > > The test also fails sporadically on xfs and the bug was already reported > > > > > to the xfs mailing list: > > > > > > > > > > https://lore.kernel.org/linux-xfs/CAL3q7H7cURmnkJfUUx44HM3q=xKmqHb80eRdisErD_x8rU4+0Q@xxxxxxxxxxxxxx/ > > > > > > > > > > > > > This version still doesn't seem to have the fs freeze/unfreeze that Darrick > > > > asked for in that thread. > > > > > > I don't get it, what's the freeze/unfreeze for? Where should they be placed? > > > Is it some way to get around the bug on xfs? > > > > freeze kicks the background inode gc thread so that the unlinked clones > > actually get freed before the swapon call. A less bighammer idea might > > be to call XFS_IOC_FREE_EOFBLOCKS which also kicks the garbage > > collectors. > > I'm wondering why this GC things can not be done inside XFS' swapon call? > > So that we don't need some per-fs workaround in a generic test case. I suppose one could call xfs_inodegc_flush from within swapon with the swap file's i_rwsem held, but now we're blocking swapon while we wait for some unbounded number of probably unrelated unlinked inodes to be freed on the off chance that one of them shared blocks. A better answer might be to run FALLOC_FL_UNSHARE on the file, but now we're making swapon more complex and potentially issuing a lot of IO to make that happen. If you can convince the fsdevel/mm folks that swapon is supposed to try to correct things it doesn't like in the file mapping (instead of returning EINVAL or whatever it does now) then we could add that to the syscall definition. --D > Thanks, > Qu > > > > --D > > > >