Add support for STATX_DIOALIGN to bcachefs, so that direct I/O alignment
restrictions are exposed to userspace in a generic way.

[Before]
```
./statx_test /mnt/bcachefs/test
statx(/mnt/bcachefs/test) = 0
dio mem align:0
dio offset align:0
```

[After]
```
./statx_test /mnt/bcachefs/test
statx(/mnt/bcachefs/test) = 0
dio mem align:1
dio offset align:512
```

Signed-off-by: Hongbo Li <[email protected]>
---
 fs/bcachefs/fs.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c
index 4a3e9f429cf7..74e81f90b230 100644
--- a/fs/bcachefs/fs.c
+++ b/fs/bcachefs/fs.c
@@ -880,6 +880,12 @@ static int bch2_getattr(struct mnt_idmap *idmap,
        stat->subvol    = inode->ei_subvol;
        stat->result_mask |= STATX_SUBVOL;
 
+       if ((request_mask & STATX_DIOALIGN) && S_ISREG(inode->v.i_mode)) {
+               stat->result_mask |= STATX_DIOALIGN;
+               stat->dio_mem_align = 1;
+               stat->dio_offset_align = SECTOR_SIZE;
+       }
+
        if (request_mask & STATX_BTIME) {
                stat->result_mask |= STATX_BTIME;
                stat->btime = bch2_time_to_timespec(c, 
inode->ei_inode.bi_otime);
-- 
2.34.1


Reply via email to