On Wed, Jan 05, 2022 at 02:18:26PM -0800, Stefan Roesch wrote: > This adds the xattr support to io_uring. The intent is to have a more > complete support for file operations in io_uring. > > This change adds support for the following functions to io_uring: > - fgetxattr > - fsetxattr > - getxattr > - setxattr > > Patch 1: fs: split off setxattr_copy and do_setxattr function from setxattr > Split off the setup part of the setxattr function in the setxattr_copy > function. Split off the processing part in do_setxattr. > > Patch 2: fs: split off do_getxattr from getxattr > Split of the do_getxattr part from getxattr. This will > allow it to be invoked it from io_uring. > > Patch 3: io_uring: add fsetxattr and setxattr support > This adds new functions to support the fsetxattr and setxattr > functions. > > Patch 4: io_uring: add fgetxattr and getxattr support > This adds new functions to support the fgetxattr and getxattr > functions. > > > There are two additional patches: > liburing: Add support for xattr api's. > This also includes the tests for the new code. > xfstests: Add support for io_uring xattr support. > > > V12: - add union to xattr_ctx structure. The getxattr api requires > a pointer to value and the setxattr requires a const pointer > to value (with a union this can be unified). I'm fine with adding a union in there. I think it's also what Linus suggested in a previous mail. Al suggested a different allocation for the attribute name. Fwiw, I'm fine with either (struct kattr or dynamically allocating via an additional helper). I've ran this through the generic vfs and idmapped mount xfstests I added last year. They do test core xattr functionality. I've applied your patchset on top of Jen's for-next. They pass: ubuntu@f2-vm:~/src/git/xfstests$ sudo ./check -g idmapped SECTION -- xfs RECREATING -- xfs on /dev/loop4 FSTYP -- xfs (debug) PLATFORM -- Linux/x86_64 f2-vm 5.16.0-rc3-fs-xattr-c62607c023ad #41 SMP PREEMPT Thu Jan 6 12:11:34 UTC 2022 MKFS_OPTIONS -- -f -f /dev/loop5 MOUNT_OPTIONS -- /dev/loop5 /mnt/scratch generic/633 26s ... 29s generic/644 5s ... 19s generic/645 413s ... 225s generic/656 13s ... 21s xfs/152 70s ... 75s xfs/153 46s ... 48s Ran: generic/633 generic/644 generic/645 generic/656 xfs/152 xfs/153 Passed all 6 tests SECTION -- ext4 RECREATING -- ext4 on /dev/loop4 FSTYP -- ext4 PLATFORM -- Linux/x86_64 f2-vm 5.16.0-rc3-fs-xattr-c62607c023ad #41 SMP PREEMPT Thu Jan 6 12:11:34 UTC 2022 MKFS_OPTIONS -- -F -F /dev/loop5 MOUNT_OPTIONS -- -o acl,user_xattr /dev/loop5 /mnt/scratch generic/633 29s ... 20s generic/644 19s ... 5s generic/645 225s ... 208s generic/656 21s ... 12s Ran: generic/633 generic/644 generic/645 generic/656 Passed all 4 tests SECTION -- btrfs RECREATING -- btrfs on /dev/loop4 FSTYP -- btrfs PLATFORM -- Linux/x86_64 f2-vm 5.16.0-rc3-fs-xattr-c62607c023ad #41 SMP PREEMPT Thu Jan 6 12:11:34 UTC 2022 MKFS_OPTIONS -- -f /dev/loop5 MOUNT_OPTIONS -- /dev/loop5 /mnt/scratch btrfs/245 10s ... 11s generic/633 20s ... 25s generic/644 5s ... 4s generic/645 208s ... 209s generic/656 12s ... 14s Ran: btrfs/245 generic/633 generic/644 generic/645 generic/656 Passed all 5 tests SECTION -- xfs ========================= Ran: generic/633 generic/644 generic/645 generic/656 xfs/152 xfs/153 Passed all 6 tests SECTION -- ext4 ========================= Ran: generic/633 generic/644 generic/645 generic/656 Passed all 4 tests SECTION -- btrfs ========================= Ran: btrfs/245 generic/633 generic/644 generic/645 generic/656 Passed all 5 tests