Re: [RFC PATCH v2 1/7] statx: add I/O alignment information

From: Eric Biggers
Date: Thu Jun 16 2022 - 02:19:46 EST


On Wed, Jun 15, 2022 at 11:07:17PM -0700, Christoph Hellwig wrote:
> On Wed, Jun 15, 2022 at 05:04:57PM -0700, Eric Biggers wrote:
> > One more thing. I'm trying to add support for STATX_DIOALIGN on block devices.
> > Unfortunately I don't think it is going to work, at all, since the inode is for
> > the device node and not the block device itself. This is true even after the
> > file is opened (I previously thought that at least that case would work).
>
> For an open file the block device inode is pointed to by
> file->f_mapping->host.
>
> > Were you expecting that this would work on block devices? It seems they will
> > need a different API -- a new BLK* ioctl, or files in /sys/block/$dev/queue.
>
> blkdev_get_no_open on inode->i_rdev gets you the block device, which
> then has bdev->bd_inode point to the underlying block device, although
> for a block device those limit probably would be retrieved not from
> the inode but the gendisk / request_queue anyway.

Yes I know that. The issue is that the inode that statx() is operating on is
the device node, so *all* the other statx fields come from that inode. Size,
nlink, uid, gid, mode, timestamps (including btime if the filesystem supports
it), inode number, device number of the containing filesystem, mount ID, etc.
If we were to randomly grab one field from the underlying block device instead,
that would be inconsistent with everything else.

- Eric