Re: [PATCH] null_blk: allow REQ_OP_ZONE_RESET_ALL to configure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/7/22 14:38, Chaitanya Kulkarni wrote:
> On 10/5/22 22:15, Damien Le Moal wrote:
>> On 10/6/22 14:05, Chaitanya Kulkarni wrote:
>>> For a Zoned Block Device zone reset all is emulated if underlaying
>>> device doesn't support REQ_OP_ZONE_RESET_ALL operation. In null_blk
>>> Zoned mode there is no way to test zone reset all emulation present in
>>> the block layer since we enable it by default :-
>>>
>>> blkdev_zone_mgmt()
>>>   blkdev_zone_reset_all_emulation() <---
>>>   blkdev_zone_reset_all()
>>>
>>> Add a module parameter zone_reset_all to enable or disable
>>> REQ_OP_ZONE_RESET_ALL, enable it by default to retain the existing
>>> behaviour.
>>>
>>> Signed-off-by: Chaitanya Kulkarni <kch@xxxxxxxxxx>
>>> ---
>>> # git log -1
>>> commit 8ca0bd53a9c9e2f58c4fc9e38e3f5f82d26d3851 (HEAD -> for-next)
>>> Author: Chaitanya Kulkarni <kch@xxxxxxxxxx>
>>> Date:   Wed Oct 5 21:57:00 2022 -0700
>>>
>>>      null_blk: allow REQ_OP_ZONE_RESET_ALL to configure
>>>      
>>>      For a Zoned Block Device zone reset all is emulated if underlaying
>>>      device doesn't support REQ_OP_ZONE_RESET_ALL operation. In null_blk
>>>      Zoned mode there is no way to test zone reset all emulation present in
>>>      the block layer since we enable it by default :-
>>>      
>>>      blkdev_zone_mgmt()
>>>       blkdev_zone_reset_all_emulation() <---
>>>       blkdev_zone_reset_all()
>>>      
>>>      Add a module parameter zone_reset_all to enable or disable
>>>      REQ_OP_ZONE_RESET_ALL, enable it by default to retain the existing
>>>      behaviour.
>>>      
>>>      Signed-off-by: Chaitanya Kulkarni <kch@xxxxxxxxxx>
>>> # ./compile_nullb.sh
>>> + umount /mnt/nullb0
>>> umount: /mnt/nullb0: not mounted.
>>> + rmdir 'config/nullb/nullb*'
>>> rmdir: failed to remove 'config/nullb/nullb*': No such file or directory
>>> + dmesg -c
>>> + modprobe -r null_blk
>>> + lsmod
>>> + grep null_blk
>>> ++ nproc
>>> + make -j 48 M=drivers/block modules
>>> + HOST=drivers/block/null_blk/
>>> ++ uname -r
>>> + HOST_DEST=/lib/modules/6.0.0-rc7blk+/kernel/drivers/block/null_blk/
>>> + cp drivers/block/null_blk//null_blk.ko /lib/modules/6.0.0-rc7blk+/kernel/drivers/block/null_blk//
>>> + ls -lrth /lib/modules/6.0.0-rc7blk+/kernel/drivers/block/null_blk//null_blk.ko
>>> -rw-r--r--. 1 root root 1.2M Oct  5 21:57 /lib/modules/6.0.0-rc7blk+/kernel/drivers/block/null_blk//null_blk.ko
>>> + sleep 1
>>> + dmesg -c
>>> # modprobe null_blk gb=1 zoned=1 zone_size=128 <---
>>> # lsblk
>>> NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
>>> sda       8:0    0   50G  0 disk
>>> ├─sda1    8:1    0    1G  0 part /boot
>>> └─sda2    8:2    0   49G  0 part /home
>>> sdb       8:16   0  100G  0 disk /mnt/data
>>> sr0      11:0    1 1024M  0 rom
>>> nullb0  250:0    0    1G  0 disk
>>> zram0   251:0    0    8G  0 disk [SWAP]
>>> vda     252:0    0  512M  0 disk
>>> nvme0n1 259:0    0    1G  0 disk
>>> # blkzone reset /dev/nullb0
>>> # dmesg  -c
>>> [  397.079221] null_blk: disk nullb0 created
>>> [  397.079226] null_blk: module loaded
>>> [  406.626500] blkdev_zone_reset_all 237 <---
>>> # modprobe -r null_blk
>>> #
>>> #
>>> #
>>> # modprobe null_blk gb=1 zoned=1 zone_size=128 zone_reset_all=0 <---
>>> # lsblk
>>> NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
>>> sda       8:0    0   50G  0 disk
>>> ├─sda1    8:1    0    1G  0 part /boot
>>> └─sda2    8:2    0   49G  0 part /home
>>> sdb       8:16   0  100G  0 disk /mnt/data
>>> sr0      11:0    1 1024M  0 rom
>>> nullb0  250:0    0    1G  0 disk
>>> zram0   251:0    0    8G  0 disk [SWAP]
>>> vda     252:0    0  512M  0 disk
>>> nvme0n1 259:0    0    1G  0 disk
>>> # blkzone reset /dev/nullb0
>>> # dmesg  -c
>>> [  425.456187] null_blk: disk nullb0 created
>>> [  425.456192] null_blk: module loaded
>>> [  438.419529] blkdev_zone_reset_all_emulated 197 <---
>>> # modprobe -r null_blk
>>> #
>>> ---
>>>   drivers/block/null_blk/main.c     | 5 +++++
>>>   drivers/block/null_blk/null_blk.h | 1 +
>>>   drivers/block/null_blk/zoned.c    | 3 ++-
>>>   3 files changed, 8 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c
>>> index 8b7f42024f14..a0572e6c28ce 100644
>>> --- a/drivers/block/null_blk/main.c
>>> +++ b/drivers/block/null_blk/main.c
>>> @@ -260,6 +260,10 @@ static unsigned int g_zone_max_active;
>>>   module_param_named(zone_max_active, g_zone_max_active, uint, 0444);
>>>   MODULE_PARM_DESC(zone_max_active, "Maximum number of active zones when block device is zoned. Default: 0 (no limit)");
>>>   
>>> +static bool g_zone_reset_all = true;
>>> +module_param_named(zone_reset_all, g_zone_reset_all, bool, 0444);
>>
>> Nit: Why read-only ? You can make it writable without any issue, no ?
>>
> 
> Sorry I didn't understand this comment. In case this comment is about 
> new zone_reset_all modpram being readonly and not allowed to set via 
> command line? The test log shows I was able to set it to 0 and trigger 
> call to blkdev_zone_reset_all_emulated() and default behavior ends up 
> calling blkdev_zone_reset_all().
> 
> -ck
> 

If you change the param mode to 644, one can do:

echo 0 >/sys/module/null_blk/parameters/zone_reset_all
or
echo 1 >/sys/module/null_blk/parameters/zone_reset_all

But given that all null_blk parameters are read-only, not a big deal.

-- 
Damien Le Moal
Western Digital Research





[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux