mbox series

[v5,0/2] io_uring: add support for ftruncate

Message ID 20240124083301.8661-1-tony.solomonik@gmail.com (mailing list archive)
Headers show
Series io_uring: add support for ftruncate | expand

Message

Tony Solomonik Jan. 24, 2024, 8:32 a.m. UTC
This patch adds support for doing truncate through io_uring, eliminating
the need for applications to roll their own thread pool or offload
mechanism to be able to do non-blocking truncates.

Tony Solomonik (2):
  Add ftruncate_file that truncates a struct file
  io_uring: add support for ftruncate

 fs/internal.h                 |  1 +
 fs/open.c                     | 53 ++++++++++++++++++-----------------
 include/uapi/linux/io_uring.h |  1 +
 io_uring/Makefile             |  2 +-
 io_uring/opdef.c              | 10 +++++++
 io_uring/truncate.c           | 48 +++++++++++++++++++++++++++++++
 io_uring/truncate.h           |  4 +++
 7 files changed, 93 insertions(+), 26 deletions(-)
 create mode 100644 io_uring/truncate.c
 create mode 100644 io_uring/truncate.h


base-commit: d3fa86b1a7b4cdc4367acacea16b72e0a200b3d7

Comments

Cedric Blancher Jan. 24, 2024, 8:52 a.m. UTC | #1
On Wed, 24 Jan 2024 at 09:33, Tony Solomonik <tony.solomonik@gmail.com> wrote:
>
> This patch adds support for doing truncate through io_uring, eliminating
> the need for applications to roll their own thread pool or offload
> mechanism to be able to do non-blocking truncates.
>
> Tony Solomonik (2):
>   Add ftruncate_file that truncates a struct file
>   io_uring: add support for ftruncate
>
>  fs/internal.h                 |  1 +
>  fs/open.c                     | 53 ++++++++++++++++++-----------------
>  include/uapi/linux/io_uring.h |  1 +
>  io_uring/Makefile             |  2 +-
>  io_uring/opdef.c              | 10 +++++++
>  io_uring/truncate.c           | 48 +++++++++++++++++++++++++++++++
>  io_uring/truncate.h           |  4 +++
>  7 files changed, 93 insertions(+), 26 deletions(-)
>  create mode 100644 io_uring/truncate.c
>  create mode 100644 io_uring/truncate.h
>
>
> base-commit: d3fa86b1a7b4cdc4367acacea16b72e0a200b3d7

Also fallocate() to punch holes, aka sparse files, must be implemented

Ced
Jens Axboe Jan. 24, 2024, 12:52 p.m. UTC | #2
On 1/24/24 1:52 AM, Cedric Blancher wrote:
> On Wed, 24 Jan 2024 at 09:33, Tony Solomonik <tony.solomonik@gmail.com> wrote:
>>
>> This patch adds support for doing truncate through io_uring, eliminating
>> the need for applications to roll their own thread pool or offload
>> mechanism to be able to do non-blocking truncates.
>>
>> Tony Solomonik (2):
>>   Add ftruncate_file that truncates a struct file
>>   io_uring: add support for ftruncate
>>
>>  fs/internal.h                 |  1 +
>>  fs/open.c                     | 53 ++++++++++++++++++-----------------
>>  include/uapi/linux/io_uring.h |  1 +
>>  io_uring/Makefile             |  2 +-
>>  io_uring/opdef.c              | 10 +++++++
>>  io_uring/truncate.c           | 48 +++++++++++++++++++++++++++++++
>>  io_uring/truncate.h           |  4 +++
>>  7 files changed, 93 insertions(+), 26 deletions(-)
>>  create mode 100644 io_uring/truncate.c
>>  create mode 100644 io_uring/truncate.h
>>
>>
>> base-commit: d3fa86b1a7b4cdc4367acacea16b72e0a200b3d7
> 
> Also fallocate() to punch holes, aka sparse files, must be implemented

fallocate has been supported for years.
Cedric Blancher Jan. 24, 2024, 1:35 p.m. UTC | #3
On Wed, 24 Jan 2024 at 13:52, Jens Axboe <axboe@kernel.dk> wrote:
>
> On 1/24/24 1:52 AM, Cedric Blancher wrote:
> > On Wed, 24 Jan 2024 at 09:33, Tony Solomonik <tony.solomonik@gmail.com> wrote:
> >>
> >> This patch adds support for doing truncate through io_uring, eliminating
> >> the need for applications to roll their own thread pool or offload
> >> mechanism to be able to do non-blocking truncates.
> >>
> >> Tony Solomonik (2):
> >>   Add ftruncate_file that truncates a struct file
> >>   io_uring: add support for ftruncate
> >>
> >>  fs/internal.h                 |  1 +
> >>  fs/open.c                     | 53 ++++++++++++++++++-----------------
> >>  include/uapi/linux/io_uring.h |  1 +
> >>  io_uring/Makefile             |  2 +-
> >>  io_uring/opdef.c              | 10 +++++++
> >>  io_uring/truncate.c           | 48 +++++++++++++++++++++++++++++++
> >>  io_uring/truncate.h           |  4 +++
> >>  7 files changed, 93 insertions(+), 26 deletions(-)
> >>  create mode 100644 io_uring/truncate.c
> >>  create mode 100644 io_uring/truncate.h
> >>
> >>
> >> base-commit: d3fa86b1a7b4cdc4367acacea16b72e0a200b3d7
> >
> > Also fallocate() to punch holes, aka sparse files, must be implemented
>
> fallocate has been supported for years.

Does it support punching holes? Does lseek() with SEEK_HOLE and
SEEK_DATA work, with more than one hole, and/or hole at the end?

Ced
Jens Axboe Jan. 24, 2024, 1:42 p.m. UTC | #4
On 1/24/24 6:35 AM, Cedric Blancher wrote:
> On Wed, 24 Jan 2024 at 13:52, Jens Axboe <axboe@kernel.dk> wrote:
>>
>> On 1/24/24 1:52 AM, Cedric Blancher wrote:
>>> On Wed, 24 Jan 2024 at 09:33, Tony Solomonik <tony.solomonik@gmail.com> wrote:
>>>>
>>>> This patch adds support for doing truncate through io_uring, eliminating
>>>> the need for applications to roll their own thread pool or offload
>>>> mechanism to be able to do non-blocking truncates.
>>>>
>>>> Tony Solomonik (2):
>>>>   Add ftruncate_file that truncates a struct file
>>>>   io_uring: add support for ftruncate
>>>>
>>>>  fs/internal.h                 |  1 +
>>>>  fs/open.c                     | 53 ++++++++++++++++++-----------------
>>>>  include/uapi/linux/io_uring.h |  1 +
>>>>  io_uring/Makefile             |  2 +-
>>>>  io_uring/opdef.c              | 10 +++++++
>>>>  io_uring/truncate.c           | 48 +++++++++++++++++++++++++++++++
>>>>  io_uring/truncate.h           |  4 +++
>>>>  7 files changed, 93 insertions(+), 26 deletions(-)
>>>>  create mode 100644 io_uring/truncate.c
>>>>  create mode 100644 io_uring/truncate.h
>>>>
>>>>
>>>> base-commit: d3fa86b1a7b4cdc4367acacea16b72e0a200b3d7
>>>
>>> Also fallocate() to punch holes, aka sparse files, must be implemented
>>
>> fallocate has been supported for years.
> 
> Does it support punching holes? Does lseek() with SEEK_HOLE and
> SEEK_DATA work, with more than one hole, and/or hole at the end?

It does anything that fallocate(2) will do.