ping On 13.02.2020 10:55, Kirill Tkhai wrote: > Hi, Jens, > > could you please provide some comments on this? I sent v1 two months ago, > and it would be great to know your vision of the functionality and > the approach and whether it is going to go to block tree. > > Thanks, > Kirill > > On 13.02.2020 10:39, Kirill Tkhai wrote: >> (was "[PATCH block v2 0/3] block: Introduce REQ_NOZERO flag >> for REQ_OP_WRITE_ZEROES operation"; >> was "[PATCH RFC 0/3] block,ext4: Introduce REQ_OP_ASSIGN_RANGE >> to reflect extents allocation in block device internals") >> >> v7: Two comments changed. >> >> v6: req_op() cosmetic change. >> >> v5: Kill dm|md patch, which disables REQ_ALLOCATE for these devices. >> Disable REQ_ALLOCATE for all stacking devices instead of this. >> >> v4: Correct argument for mddev_check_write_zeroes(). >> >> v3: Rename REQ_NOZERO to REQ_ALLOCATE. >> Split helpers to separate patches. >> Add a patch, disabling max_allocate_sectors inheritance for dm. >> >> v2: Introduce new flag for REQ_OP_WRITE_ZEROES instead of >> introduction a new operation as suggested by Martin K. Petersen. >> Removed ext4-related patch to focus on block changes >> for now. >> >> Information about continuous extent placement may be useful >> for some block devices. Say, distributed network filesystems, >> which provide block device interface, may use this information >> for better blocks placement over the nodes in their cluster, >> and for better performance. Block devices, which map a file >> on another filesystem (loop), may request the same length extent >> on underlining filesystem for less fragmentation and for batching >> allocation requests. Also, hypervisors like QEMU may use this >> information for optimization of cluster allocations. >> >> This patchset introduces REQ_ALLOCATE flag for REQ_OP_WRITE_ZEROES, >> which makes a block device to allocate blocks instead of actual >> blocks zeroing. This may be used for forwarding user's fallocate(0) >> requests into block device internals. E.g., in loop driver this >> will result in allocation extents in backing-file, so subsequent >> write won't fail by the reason of no available space. Distributed >> network filesystems will be able to assign specific servers for >> specific extents, so subsequent write will be more efficient. >> >> Patches [1-3/6] are preparation on helper functions, patch [4/6] >> introduces REQ_ALLOCATE flag and implements all the logic, >> patch [5/6] adds one more helper, patch [6/6] adds loop >> as the first user of the flag. >> >> Note, that here is only block-related patches, example of usage >> for ext4 with a performance numbers may be seen in [1]. >> >> [1] https://lore.kernel.org/linux-ext4/157599697369.12112.10138136904533871162.stgit@localhost.localdomain/T/#me5bdd5cc313e14de615d81bea214f355ae975db0 >> --- >> >> Kirill Tkhai (6): >> block: Add @flags argument to bdev_write_zeroes_sectors() >> block: Pass op_flags into blk_queue_get_max_sectors() >> block: Introduce blk_queue_get_max_write_zeroes_sectors() >> block: Add support for REQ_ALLOCATE flag >> block: Add blk_queue_max_allocate_sectors() >> loop: Add support for REQ_ALLOCATE >> >> >> block/blk-core.c | 6 +++--- >> block/blk-lib.c | 17 ++++++++++------- >> block/blk-merge.c | 9 ++++++--- >> block/blk-settings.c | 17 +++++++++++++++++ >> drivers/block/loop.c | 20 +++++++++++++------- >> drivers/md/dm-kcopyd.c | 2 +- >> drivers/target/target_core_iblock.c | 4 ++-- >> fs/block_dev.c | 4 ++++ >> include/linux/blk_types.h | 6 ++++++ >> include/linux/blkdev.h | 34 ++++++++++++++++++++++++++-------- >> 10 files changed, 88 insertions(+), 31 deletions(-) >> >> -- >> Signed-off-by: Kirill Tkhai <ktkhai@xxxxxxxxxxxxx> >> Reviewed-by: Bob Liu <bob.liu@xxxxxxxxxx> >> >