Thread (48 messages) 48 messages, 7 authors, 2023-05-17

Re: [PATCH RFC 12/16] xfs: Add support for fallocate2

From: Dave Chinner <david@fromorbit.com>
Date: 2023-05-05 23:42:14
Also in: linux-block, linux-fsdevel, linux-nvme, linux-scsi, linux-xfs, lkml

On Fri, May 05, 2023 at 03:23:33PM -0700, Darrick J. Wong wrote:
On Thu, May 04, 2023 at 09:26:16AM +1000, Dave Chinner wrote:
quoted
On Wed, May 03, 2023 at 06:38:17PM +0000, John Garry wrote:
If we want fallocate() operations to apply filesystem atomic write
constraints to operations, then add a new modifier flag to
fallocate(), say FALLOC_FL_ATOMIC. The filesystem can then
look up it's atomic write alignment constraints and apply them to
the operation being performed appropriately.
quoted
The alignment flag is not sticky, so further extent mutation will not
obey this original alignment request.
IOWs, you want the specific allocation to behave exactly as if an
extent size hint of the given alignment had been set on that inode.
Which could be done with:

	ioctl(FS_IOC_FSGETXATTR, &fsx)
	old_extsize = fsx.fsx_extsize;
	fsx.fsx_extsize = atomic_align_size;
	ioctl(FS_IOC_FSSETXATTR, &fsx)
Eww, multiple threads doing fallocates can clobber each other here.
Sure, this was just an example of how the same behaviour could be be
acheived without the new ioctl. Locking and other trivialities were
left as an exercise for the reader.
quoted
	fallocate(....)
	fsx.fsx_extsize = old_extsize;
	ioctl(FS_IOC_FSSETXATTR, &fsx)
Also, you can't set extsize if the data fork has any mappings in it,
so you can't set the old value.  But perhaps it's not so bad to expect
that programs will set this up once and not change the underlying
storage?

I'm not actually sure why you can't change the extent size hint.  Why is
that?
Hysterical raisins, I think.

IIUC, it was largely to do with the fact that pre-existing
allocation could not be realigned, so once allocation has been done
the extent size hint can't guarantee extent size hint aligned/sized
extents are actually allocated for the file.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help