diff mbox series

[6/7] null_blk: allow disacrd on non-membacked mode

Message ID 20210202052544.4108-7-chaitanya.kulkarni@wdc.com (mailing list archive)
State New, archived
Headers show
Series blktrace: few clenaup | expand

Commit Message

Chaitanya Kulkarni Feb. 2, 2021, 5:25 a.m. UTC
null blk driver supports REQ_OP_DISACRD in membacked mode. When testing
special requests having REQ_OP_DISCARD support is helpful to validate
the special request path when mixed with read-write.

Consider module parameter when setting the queue discard flag when
device is not memory backed.

This is needed to test the tracepoint related to REQ_OP_DISCARD.

Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
---
# modprobe  -r null_blk
# gitlog -7 
4ac4d49e1028 (HEAD -> for-next) null_blk: add module param queue bounce limit
468e3617dae8 null_blk: allow disacrd on non-membacked mode
bdc96efe9681 block: get rid of the trace rq insert wrapper
73bf523a7ce4 blktrace: fix blk_rq_merge documentation
6016632555da blktrace: fix blk_rq_issue documentation
58b5d7103a94 blktrace: add blk_fill_rwbs documentation comment
534f321f57dd block: remove superfluous param in blk_fill_rwbs()

Test to exercise module parameter vs configfs discard param, set up
nullb0 such a way that it errors out in both cases for module param
discard :-

for discard in 0 1
do 
	modprobe -r null_blk
	i=0
	echo "Module param discard ${discard}"
	modprobe null_blk nr_devices=0 discard=${discard}
	# Create dev 0 no discard 
	NULLB_DIR=config/nullb/nullb${i}
	mkdir config/nullb/nullb${i}
	echo 1 > config/nullb/nullb${i}/memory_backed
	echo 512 > config/nullb/nullb${i}/blocksize 
	echo 2048 > config/nullb/nullb${i}/size 
	echo 1 > config/nullb/nullb${i}/power
	echo -n "$nullb${i} membacked : ";
	cat /sys/kernel/config/nullb/nullb${i}/memory_backed 
	echo -n "$nullb${i} discard   : ";
	cat /sys/kernel/config/nullb/nullb${i}/discard
	# Create dev 1 with discard 
	i=1
	NULLB_DIR=config/nullb/nullb${i}
	mkdir config/nullb/nullb${i}
	echo 1 > config/nullb/nullb${i}/memory_backed
	echo 512 > config/nullb/nullb${i}/blocksize 
	echo 2048 > config/nullb/nullb${i}/size 
	echo 1 > config/nullb/nullb${i}/discard
	echo 1 > config/nullb/nullb${i}/power
	echo -n "$nullb${i} membacked : ";
	cat /sys/kernel/config/nullb/nullb${i}/memory_backed 
	echo -n "$nullb${i} discard   : ";
	cat /sys/kernel/config/nullb/nullb${i}/discard

	# should fail 
	blkdiscard -o 0 -l 1024 /dev/nullb0 
	# should pass
	blkdiscard -o 0 -l 1024 /dev/nullb1

	echo 0 > config/nullb/nullb0/power
	echo 0 > config/nullb/nullb1/power
	rmdir config/nullb/nullb*

	modprobe -r null_blk
	modprobe null_blk
	# should fail 
	blkdiscard -o 0 -l 1024 /dev/nullb0 
	modprobe -r null_blk
	modprobe null_blk discard=1
	# should pass
	blkdiscard -o 0 -l 1024 /dev/nullb0 
	modprobe -r null_blk
	echo "--------------------------"
done

modprobe -r null_blk
modprobe null_blk
blkdiscard -o 0 -l 1024 /dev/nullb0 
modprobe -r null_blk
modprobe null_blk discard=1
blkdiscard -o 0 -l 1024 /dev/nullb0 
modprobe -r null_blk

# ./discard_module_param_test.sh 
Module param discard 0
0 membacked : 1
0 discard   : 0
1 membacked : 1
1 discard   : 1
blkdiscard: /dev/nullb0: BLKDISCARD ioctl failed: Operation not supported
blkdiscard: /dev/nullb0: BLKDISCARD ioctl failed: Operation not supported
--------------------------
Module param discard 1
0 membacked : 1
0 discard   : 0
1 membacked : 1
1 discard   : 1
blkdiscard: /dev/nullb0: BLKDISCARD ioctl failed: Operation not supported
blkdiscard: /dev/nullb0: BLKDISCARD ioctl failed: Operation not supported
--------------------------
blkdiscard: /dev/nullb0: BLKDISCARD ioctl failed: Operation not supported
---
 drivers/block/null_blk/main.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

Comments

Damien Le Moal Feb. 2, 2021, 9:08 a.m. UTC | #1
Typo in the patch title.


On 2021/02/02 14:26, Chaitanya Kulkarni wrote:
> null blk driver supports REQ_OP_DISACRD in membacked mode. When testing
> special requests having REQ_OP_DISCARD support is helpful to validate
> the special request path when mixed with read-write.
> 
> Consider module parameter when setting the queue discard flag when
> device is not memory backed.
> 
> This is needed to test the tracepoint related to REQ_OP_DISCARD.
> 
> Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
> ---
> # modprobe  -r null_blk
> # gitlog -7 
> 4ac4d49e1028 (HEAD -> for-next) null_blk: add module param queue bounce limit
> 468e3617dae8 null_blk: allow disacrd on non-membacked mode
> bdc96efe9681 block: get rid of the trace rq insert wrapper
> 73bf523a7ce4 blktrace: fix blk_rq_merge documentation
> 6016632555da blktrace: fix blk_rq_issue documentation
> 58b5d7103a94 blktrace: add blk_fill_rwbs documentation comment
> 534f321f57dd block: remove superfluous param in blk_fill_rwbs()
> 
> Test to exercise module parameter vs configfs discard param, set up
> nullb0 such a way that it errors out in both cases for module param
> discard :-
> 
> for discard in 0 1
> do 
> 	modprobe -r null_blk
> 	i=0
> 	echo "Module param discard ${discard}"
> 	modprobe null_blk nr_devices=0 discard=${discard}
> 	# Create dev 0 no discard 
> 	NULLB_DIR=config/nullb/nullb${i}
> 	mkdir config/nullb/nullb${i}
> 	echo 1 > config/nullb/nullb${i}/memory_backed
> 	echo 512 > config/nullb/nullb${i}/blocksize 
> 	echo 2048 > config/nullb/nullb${i}/size 
> 	echo 1 > config/nullb/nullb${i}/power
> 	echo -n "$nullb${i} membacked : ";
> 	cat /sys/kernel/config/nullb/nullb${i}/memory_backed 
> 	echo -n "$nullb${i} discard   : ";
> 	cat /sys/kernel/config/nullb/nullb${i}/discard
> 	# Create dev 1 with discard 
> 	i=1
> 	NULLB_DIR=config/nullb/nullb${i}
> 	mkdir config/nullb/nullb${i}
> 	echo 1 > config/nullb/nullb${i}/memory_backed
> 	echo 512 > config/nullb/nullb${i}/blocksize 
> 	echo 2048 > config/nullb/nullb${i}/size 
> 	echo 1 > config/nullb/nullb${i}/discard
> 	echo 1 > config/nullb/nullb${i}/power
> 	echo -n "$nullb${i} membacked : ";
> 	cat /sys/kernel/config/nullb/nullb${i}/memory_backed 
> 	echo -n "$nullb${i} discard   : ";
> 	cat /sys/kernel/config/nullb/nullb${i}/discard
> 
> 	# should fail 
> 	blkdiscard -o 0 -l 1024 /dev/nullb0 
> 	# should pass
> 	blkdiscard -o 0 -l 1024 /dev/nullb1
> 
> 	echo 0 > config/nullb/nullb0/power
> 	echo 0 > config/nullb/nullb1/power
> 	rmdir config/nullb/nullb*
> 
> 	modprobe -r null_blk
> 	modprobe null_blk
> 	# should fail 
> 	blkdiscard -o 0 -l 1024 /dev/nullb0 
> 	modprobe -r null_blk
> 	modprobe null_blk discard=1
> 	# should pass
> 	blkdiscard -o 0 -l 1024 /dev/nullb0 
> 	modprobe -r null_blk
> 	echo "--------------------------"
> done
> 
> modprobe -r null_blk
> modprobe null_blk
> blkdiscard -o 0 -l 1024 /dev/nullb0 
> modprobe -r null_blk
> modprobe null_blk discard=1
> blkdiscard -o 0 -l 1024 /dev/nullb0 
> modprobe -r null_blk
> 
> # ./discard_module_param_test.sh 
> Module param discard 0
> 0 membacked : 1
> 0 discard   : 0
> 1 membacked : 1
> 1 discard   : 1
> blkdiscard: /dev/nullb0: BLKDISCARD ioctl failed: Operation not supported
> blkdiscard: /dev/nullb0: BLKDISCARD ioctl failed: Operation not supported
> --------------------------
> Module param discard 1
> 0 membacked : 1
> 0 discard   : 0
> 1 membacked : 1
> 1 discard   : 1
> blkdiscard: /dev/nullb0: BLKDISCARD ioctl failed: Operation not supported
> blkdiscard: /dev/nullb0: BLKDISCARD ioctl failed: Operation not supported
> --------------------------
> blkdiscard: /dev/nullb0: BLKDISCARD ioctl failed: Operation not supported
> ---
>  drivers/block/null_blk/main.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c
> index d6c821d48090..6e6cbb953a12 100644
> --- a/drivers/block/null_blk/main.c
> +++ b/drivers/block/null_blk/main.c
> @@ -172,6 +172,10 @@ static bool g_shared_tag_bitmap;
>  module_param_named(shared_tag_bitmap, g_shared_tag_bitmap, bool, 0444);
>  MODULE_PARM_DESC(shared_tag_bitmap, "Use shared tag bitmap for all submission queues for blk-mq");
>  
> +static bool g_discard;
> +module_param_named(discard, g_discard, bool, 0444);
> +MODULE_PARM_DESC(discard, "Enable queue discard (default: false)");
> +
>  static int g_irqmode = NULL_IRQ_SOFTIRQ;
>  
>  static int null_set_irqmode(const char *str, const struct kernel_param *kp)
> @@ -1588,14 +1592,11 @@ static void null_del_dev(struct nullb *nullb)
>  
>  static void null_config_discard(struct nullb *nullb)
>  {
> -	if (nullb->dev->discard == false)
> +	if (nullb->dev->memory_backed && nullb->dev->discard == false)

What is the point of adding nullb->dev->memory_backed  to the test ? If
nullb->dev->memory_backed is true, nullb->dev->discard should be forced to true
also to retain the behavior we had until now.

>  		return;
>  
> -	if (!nullb->dev->memory_backed) {
> -		nullb->dev->discard = false;
> -		pr_info("discard option is ignored without memory backing\n");
> +	if (!nullb->dev->memory_backed && !g_discard)

I do not understand this one either. Why look at g_discard ?

>  		return;
> -	}
>  
>  	if (nullb->dev->zoned) {
>  		nullb->dev->discard = false;
>
diff mbox series

Patch

diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c
index d6c821d48090..6e6cbb953a12 100644
--- a/drivers/block/null_blk/main.c
+++ b/drivers/block/null_blk/main.c
@@ -172,6 +172,10 @@  static bool g_shared_tag_bitmap;
 module_param_named(shared_tag_bitmap, g_shared_tag_bitmap, bool, 0444);
 MODULE_PARM_DESC(shared_tag_bitmap, "Use shared tag bitmap for all submission queues for blk-mq");
 
+static bool g_discard;
+module_param_named(discard, g_discard, bool, 0444);
+MODULE_PARM_DESC(discard, "Enable queue discard (default: false)");
+
 static int g_irqmode = NULL_IRQ_SOFTIRQ;
 
 static int null_set_irqmode(const char *str, const struct kernel_param *kp)
@@ -1588,14 +1592,11 @@  static void null_del_dev(struct nullb *nullb)
 
 static void null_config_discard(struct nullb *nullb)
 {
-	if (nullb->dev->discard == false)
+	if (nullb->dev->memory_backed && nullb->dev->discard == false)
 		return;
 
-	if (!nullb->dev->memory_backed) {
-		nullb->dev->discard = false;
-		pr_info("discard option is ignored without memory backing\n");
+	if (!nullb->dev->memory_backed && !g_discard)
 		return;
-	}
 
 	if (nullb->dev->zoned) {
 		nullb->dev->discard = false;