All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/8] loop: small clenaup
@ 2021-09-21  9:21 Chaitanya Kulkarni
  2021-09-21  9:21 ` [PATCH 1/8] loop: use sysfs_emit() in the sysfs offset show Chaitanya Kulkarni
                   ` (7 more replies)
  0 siblings, 8 replies; 18+ messages in thread
From: Chaitanya Kulkarni @ 2021-09-21  9:21 UTC (permalink / raw)
  To: linux-block; +Cc: axboe, Chaitanya Kulkarni

From: Chaitanya Kulkarni <kch@nvidia.com>

Hi,

This has few improvment and cleanups such as using sysfs_emit() for the
sysfs dev attributes and removing variables that are only used once and
a cleanup with fixing declaration.

Below is the test log where 10 loop devices created, each deivce is
linked to it's own file in ./loopX, formatted with xfs and mounted on
/mnt/loopX. For each device it reads the offset, sizelimit, autoclear,
partscan, and dio attr from sysfs using cat command, then it runs fio
verify job on it.

In summary write-verify fio job seems to work fine :-

root@dev loop-sysfs-emit (for-next) # grep err= 0000-cover-letter.patch 
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8490: Tue Sep 21 01:47:04 2021
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8559: Tue Sep 21 01:47:56 2021
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8588: Tue Sep 21 01:48:49 2021
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8612: Tue Sep 21 01:49:40 2021
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8634: Tue Sep 21 01:50:30 2021
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8659: Tue Sep 21 01:51:21 2021
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8687: Tue Sep 21 01:52:12 2021
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8701: Tue Sep 21 01:53:01 2021
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8724: Tue Sep 21 01:53:52 2021
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8753: Tue Sep 21 01:55:02 2021
root@dev loop-sysfs-emit (for-next) # 

-ck

Chaitanya Kulkarni (8):
  loop: use sysfs_emit() in the sysfs offset show
  loop: use sysfs_emit() in the sysfs sizelimit show
  loop: use sysfs_emit() in the sysfs autoclear show
  loop: use sysfs_emit() in the sysfs partscan show
  loop: use sysfs_emit() in the sysfs dio show
  loop: remove extra variable in lo_fallocate()
  loop: remove extra variable in lo_req_flush
  loop: allow user to set the queue depth

 drivers/block/loop.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

root@dev linux-block (for-next) # ./compile_loop.sh 10
+ FILE=./loop
+ LOOP_MNT=/mnt/loop
+ NN=10
+ unload_loop
++ shuf -i 1-10 -n 10
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop7
umount: /mnt/loop7: no mount point specified.
+ rm -fr ./loop7
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop6
umount: /mnt/loop6: no mount point specified.
+ rm -fr ./loop6
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop4
umount: /mnt/loop4: not mounted.
+ rm -fr ./loop4
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop9
umount: /mnt/loop9: no mount point specified.
+ rm -fr ./loop9
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop3
umount: /mnt/loop3: not mounted.
+ rm -fr ./loop3
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop2
umount: /mnt/loop2: not mounted.
+ rm -fr ./loop2
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop5
umount: /mnt/loop5: not mounted.
+ rm -fr ./loop5
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop1
umount: /mnt/loop1: not mounted.
+ rm -fr ./loop1
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop8
umount: /mnt/loop8: no mount point specified.
+ rm -fr ./loop8
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop10
umount: /mnt/loop10: no mount point specified.
+ rm -fr ./loop10
+ losetup -D
+ sleep 3
+ rmmod loop
+ modprobe -r loop
+ lsmod
+ grep loop
++ shuf -i 1-10 -n 10
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop6
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop10
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop9
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop4
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop2
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop8
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop5
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop1
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop3
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop7
+ rm -fr /mnt/loop1 /mnt/loop2 /mnt/loop3 /mnt/loop4 /mnt/loop5
+ compile_loop
++ nproc
+ make -j 48 M=drivers/block modules
+ HOST=drivers/block/
++ uname -r
+ HOST_DEST=/lib/modules/5.15.0-rc1blk-next+/kernel/drivers/block
+ cp drivers/block//loop.ko /lib/modules/5.15.0-rc1blk-next+/kernel/drivers/block/
+ load_loop
+ insmod drivers/block/loop.ko max_loop=11 hw_queue_depth=32
++ shuf -i 1-10 -n 10
+ for i in `shuf -i  1-$NN -n $NN`
+ mkdir -p /mnt/loop5
+ truncate -s 2048M ./loop5
+ /mnt/data/util-linux/losetup --direct-io=on /dev/loop5 ./loop5
+ /mnt/data/util-linux/losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                   DIO LOG-SEC
/dev/loop5         0      0         0  0 /mnt/data/linux-block/loop5   1     512
+ sleep 1
+ mkfs.xfs -f /dev/loop5
meta-data=/dev/loop5             isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
+ mount /dev/loop5 /mnt/loop5
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop5/loop/offset : '
cat /sys/block/loop5/loop/offset : + cat /sys/block/loop5/loop/offset
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop5/loop/sizelimit : '
cat /sys/block/loop5/loop/sizelimit : + cat /sys/block/loop5/loop/sizelimit
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop5/loop/autoclear : '
cat /sys/block/loop5/loop/autoclear : + cat /sys/block/loop5/loop/autoclear
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop5/loop/partscan : '
cat /sys/block/loop5/loop/partscan : + cat /sys/block/loop5/loop/partscan
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop5/loop/dio : '
cat /sys/block/loop5/loop/dio : + cat /sys/block/loop5/loop/dio
1
+ for i in `shuf -i  1-$NN -n $NN`
+ mkdir -p /mnt/loop7
+ truncate -s 2048M ./loop7
+ /mnt/data/util-linux/losetup --direct-io=on /dev/loop7 ./loop7
+ /mnt/data/util-linux/losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                   DIO LOG-SEC
/dev/loop7         0      0         0  0 /mnt/data/linux-block/loop7   1     512
/dev/loop5         0      0         0  0 /mnt/data/linux-block/loop5   1     512
+ sleep 1
+ mkfs.xfs -f /dev/loop7
meta-data=/dev/loop7             isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
+ mount /dev/loop7 /mnt/loop7
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop7/loop/offset : '
cat /sys/block/loop7/loop/offset : + cat /sys/block/loop7/loop/offset
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop7/loop/sizelimit : '
cat /sys/block/loop7/loop/sizelimit : + cat /sys/block/loop7/loop/sizelimit
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop7/loop/autoclear : '
cat /sys/block/loop7/loop/autoclear : + cat /sys/block/loop7/loop/autoclear
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop7/loop/partscan : '
cat /sys/block/loop7/loop/partscan : + cat /sys/block/loop7/loop/partscan
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop7/loop/dio : '
cat /sys/block/loop7/loop/dio : + cat /sys/block/loop7/loop/dio
1
+ for i in `shuf -i  1-$NN -n $NN`
+ mkdir -p /mnt/loop2
+ truncate -s 2048M ./loop2
+ /mnt/data/util-linux/losetup --direct-io=on /dev/loop2 ./loop2
+ /mnt/data/util-linux/losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                   DIO LOG-SEC
/dev/loop2         0      0         0  0 /mnt/data/linux-block/loop2   1     512
/dev/loop7         0      0         0  0 /mnt/data/linux-block/loop7   1     512
/dev/loop5         0      0         0  0 /mnt/data/linux-block/loop5   1     512
+ sleep 1
+ mkfs.xfs -f /dev/loop2
meta-data=/dev/loop2             isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
+ mount /dev/loop2 /mnt/loop2
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop2/loop/offset : '
cat /sys/block/loop2/loop/offset : + cat /sys/block/loop2/loop/offset
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop2/loop/sizelimit : '
cat /sys/block/loop2/loop/sizelimit : + cat /sys/block/loop2/loop/sizelimit
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop2/loop/autoclear : '
cat /sys/block/loop2/loop/autoclear : + cat /sys/block/loop2/loop/autoclear
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop2/loop/partscan : '
cat /sys/block/loop2/loop/partscan : + cat /sys/block/loop2/loop/partscan
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop2/loop/dio : '
cat /sys/block/loop2/loop/dio : + cat /sys/block/loop2/loop/dio
1
+ for i in `shuf -i  1-$NN -n $NN`
+ mkdir -p /mnt/loop8
+ truncate -s 2048M ./loop8
+ /mnt/data/util-linux/losetup --direct-io=on /dev/loop8 ./loop8
+ /mnt/data/util-linux/losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                   DIO LOG-SEC
/dev/loop8         0      0         0  0 /mnt/data/linux-block/loop8   1     512
/dev/loop2         0      0         0  0 /mnt/data/linux-block/loop2   1     512
/dev/loop7         0      0         0  0 /mnt/data/linux-block/loop7   1     512
/dev/loop5         0      0         0  0 /mnt/data/linux-block/loop5   1     512
+ sleep 1
+ mkfs.xfs -f /dev/loop8
meta-data=/dev/loop8             isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
+ mount /dev/loop8 /mnt/loop8
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop8/loop/offset : '
cat /sys/block/loop8/loop/offset : + cat /sys/block/loop8/loop/offset
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop8/loop/sizelimit : '
cat /sys/block/loop8/loop/sizelimit : + cat /sys/block/loop8/loop/sizelimit
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop8/loop/autoclear : '
cat /sys/block/loop8/loop/autoclear : + cat /sys/block/loop8/loop/autoclear
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop8/loop/partscan : '
cat /sys/block/loop8/loop/partscan : + cat /sys/block/loop8/loop/partscan
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop8/loop/dio : '
cat /sys/block/loop8/loop/dio : + cat /sys/block/loop8/loop/dio
1
+ for i in `shuf -i  1-$NN -n $NN`
+ mkdir -p /mnt/loop6
+ truncate -s 2048M ./loop6
+ /mnt/data/util-linux/losetup --direct-io=on /dev/loop6 ./loop6
+ /mnt/data/util-linux/losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                   DIO LOG-SEC
/dev/loop8         0      0         0  0 /mnt/data/linux-block/loop8   1     512
/dev/loop6         0      0         0  0 /mnt/data/linux-block/loop6   1     512
/dev/loop2         0      0         0  0 /mnt/data/linux-block/loop2   1     512
/dev/loop7         0      0         0  0 /mnt/data/linux-block/loop7   1     512
/dev/loop5         0      0         0  0 /mnt/data/linux-block/loop5   1     512
+ sleep 1
+ mkfs.xfs -f /dev/loop6
meta-data=/dev/loop6             isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
+ mount /dev/loop6 /mnt/loop6
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop6/loop/offset : '
cat /sys/block/loop6/loop/offset : + cat /sys/block/loop6/loop/offset
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop6/loop/sizelimit : '
cat /sys/block/loop6/loop/sizelimit : + cat /sys/block/loop6/loop/sizelimit
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop6/loop/autoclear : '
cat /sys/block/loop6/loop/autoclear : + cat /sys/block/loop6/loop/autoclear
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop6/loop/partscan : '
cat /sys/block/loop6/loop/partscan : + cat /sys/block/loop6/loop/partscan
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop6/loop/dio : '
cat /sys/block/loop6/loop/dio : + cat /sys/block/loop6/loop/dio
1
+ for i in `shuf -i  1-$NN -n $NN`
+ mkdir -p /mnt/loop3
+ truncate -s 2048M ./loop3
+ /mnt/data/util-linux/losetup --direct-io=on /dev/loop3 ./loop3
+ /mnt/data/util-linux/losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                   DIO LOG-SEC
/dev/loop8         0      0         0  0 /mnt/data/linux-block/loop8   1     512
/dev/loop6         0      0         0  0 /mnt/data/linux-block/loop6   1     512
/dev/loop2         0      0         0  0 /mnt/data/linux-block/loop2   1     512
/dev/loop7         0      0         0  0 /mnt/data/linux-block/loop7   1     512
/dev/loop5         0      0         0  0 /mnt/data/linux-block/loop5   1     512
/dev/loop3         0      0         0  0 /mnt/data/linux-block/loop3   1     512
+ sleep 1
+ mkfs.xfs -f /dev/loop3
meta-data=/dev/loop3             isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
+ mount /dev/loop3 /mnt/loop3
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop3/loop/offset : '
cat /sys/block/loop3/loop/offset : + cat /sys/block/loop3/loop/offset
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop3/loop/sizelimit : '
cat /sys/block/loop3/loop/sizelimit : + cat /sys/block/loop3/loop/sizelimit
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop3/loop/autoclear : '
cat /sys/block/loop3/loop/autoclear : + cat /sys/block/loop3/loop/autoclear
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop3/loop/partscan : '
cat /sys/block/loop3/loop/partscan : + cat /sys/block/loop3/loop/partscan
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop3/loop/dio : '
cat /sys/block/loop3/loop/dio : + cat /sys/block/loop3/loop/dio
1
+ for i in `shuf -i  1-$NN -n $NN`
+ mkdir -p /mnt/loop4
+ truncate -s 2048M ./loop4
+ /mnt/data/util-linux/losetup --direct-io=on /dev/loop4 ./loop4
+ /mnt/data/util-linux/losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                   DIO LOG-SEC
/dev/loop8         0      0         0  0 /mnt/data/linux-block/loop8   1     512
/dev/loop6         0      0         0  0 /mnt/data/linux-block/loop6   1     512
/dev/loop4         0      0         0  0 /mnt/data/linux-block/loop4   1     512
/dev/loop2         0      0         0  0 /mnt/data/linux-block/loop2   1     512
/dev/loop7         0      0         0  0 /mnt/data/linux-block/loop7   1     512
/dev/loop5         0      0         0  0 /mnt/data/linux-block/loop5   1     512
/dev/loop3         0      0         0  0 /mnt/data/linux-block/loop3   1     512
+ sleep 1
+ mkfs.xfs -f /dev/loop4
meta-data=/dev/loop4             isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
+ mount /dev/loop4 /mnt/loop4
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop4/loop/offset : '
cat /sys/block/loop4/loop/offset : + cat /sys/block/loop4/loop/offset
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop4/loop/sizelimit : '
cat /sys/block/loop4/loop/sizelimit : + cat /sys/block/loop4/loop/sizelimit
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop4/loop/autoclear : '
cat /sys/block/loop4/loop/autoclear : + cat /sys/block/loop4/loop/autoclear
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop4/loop/partscan : '
cat /sys/block/loop4/loop/partscan : + cat /sys/block/loop4/loop/partscan
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop4/loop/dio : '
cat /sys/block/loop4/loop/dio : + cat /sys/block/loop4/loop/dio
1
+ for i in `shuf -i  1-$NN -n $NN`
+ mkdir -p /mnt/loop1
+ truncate -s 2048M ./loop1
+ /mnt/data/util-linux/losetup --direct-io=on /dev/loop1 ./loop1
+ /mnt/data/util-linux/losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                   DIO LOG-SEC
/dev/loop1         0      0         0  0 /mnt/data/linux-block/loop1   1     512
/dev/loop8         0      0         0  0 /mnt/data/linux-block/loop8   1     512
/dev/loop6         0      0         0  0 /mnt/data/linux-block/loop6   1     512
/dev/loop4         0      0         0  0 /mnt/data/linux-block/loop4   1     512
/dev/loop2         0      0         0  0 /mnt/data/linux-block/loop2   1     512
/dev/loop7         0      0         0  0 /mnt/data/linux-block/loop7   1     512
/dev/loop5         0      0         0  0 /mnt/data/linux-block/loop5   1     512
/dev/loop3         0      0         0  0 /mnt/data/linux-block/loop3   1     512
+ sleep 1
+ mkfs.xfs -f /dev/loop1
meta-data=/dev/loop1             isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
+ mount /dev/loop1 /mnt/loop1
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop1/loop/offset : '
cat /sys/block/loop1/loop/offset : + cat /sys/block/loop1/loop/offset
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop1/loop/sizelimit : '
cat /sys/block/loop1/loop/sizelimit : + cat /sys/block/loop1/loop/sizelimit
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop1/loop/autoclear : '
cat /sys/block/loop1/loop/autoclear : + cat /sys/block/loop1/loop/autoclear
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop1/loop/partscan : '
cat /sys/block/loop1/loop/partscan : + cat /sys/block/loop1/loop/partscan
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop1/loop/dio : '
cat /sys/block/loop1/loop/dio : + cat /sys/block/loop1/loop/dio
1
+ for i in `shuf -i  1-$NN -n $NN`
+ mkdir -p /mnt/loop9
+ truncate -s 2048M ./loop9
+ /mnt/data/util-linux/losetup --direct-io=on /dev/loop9 ./loop9
+ /mnt/data/util-linux/losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                   DIO LOG-SEC
/dev/loop1         0      0         0  0 /mnt/data/linux-block/loop1   1     512
/dev/loop8         0      0         0  0 /mnt/data/linux-block/loop8   1     512
/dev/loop6         0      0         0  0 /mnt/data/linux-block/loop6   1     512
/dev/loop4         0      0         0  0 /mnt/data/linux-block/loop4   1     512
/dev/loop2         0      0         0  0 /mnt/data/linux-block/loop2   1     512
/dev/loop9         0      0         0  0 /mnt/data/linux-block/loop9   1     512
/dev/loop7         0      0         0  0 /mnt/data/linux-block/loop7   1     512
/dev/loop5         0      0         0  0 /mnt/data/linux-block/loop5   1     512
/dev/loop3         0      0         0  0 /mnt/data/linux-block/loop3   1     512
+ sleep 1
+ mkfs.xfs -f /dev/loop9
meta-data=/dev/loop9             isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
+ mount /dev/loop9 /mnt/loop9
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop9/loop/offset : '
cat /sys/block/loop9/loop/offset : + cat /sys/block/loop9/loop/offset
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop9/loop/sizelimit : '
cat /sys/block/loop9/loop/sizelimit : + cat /sys/block/loop9/loop/sizelimit
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop9/loop/autoclear : '
cat /sys/block/loop9/loop/autoclear : + cat /sys/block/loop9/loop/autoclear
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop9/loop/partscan : '
cat /sys/block/loop9/loop/partscan : + cat /sys/block/loop9/loop/partscan
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop9/loop/dio : '
cat /sys/block/loop9/loop/dio : + cat /sys/block/loop9/loop/dio
1
+ for i in `shuf -i  1-$NN -n $NN`
+ mkdir -p /mnt/loop10
+ truncate -s 2048M ./loop10
+ /mnt/data/util-linux/losetup --direct-io=on /dev/loop10 ./loop10
+ /mnt/data/util-linux/losetup
NAME        SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                    DIO LOG-SEC
/dev/loop1          0      0         0  0 /mnt/data/linux-block/loop1    1     512
/dev/loop8          0      0         0  0 /mnt/data/linux-block/loop8    1     512
/dev/loop6          0      0         0  0 /mnt/data/linux-block/loop6    1     512
/dev/loop4          0      0         0  0 /mnt/data/linux-block/loop4    1     512
/dev/loop2          0      0         0  0 /mnt/data/linux-block/loop2    1     512
/dev/loop9          0      0         0  0 /mnt/data/linux-block/loop9    1     512
/dev/loop7          0      0         0  0 /mnt/data/linux-block/loop7    1     512
/dev/loop5          0      0         0  0 /mnt/data/linux-block/loop5    1     512
/dev/loop3          0      0         0  0 /mnt/data/linux-block/loop3    1     512
/dev/loop10         0      0         0  0 /mnt/data/linux-block/loop10   1     512
+ sleep 1
+ mkfs.xfs -f /dev/loop10
meta-data=/dev/loop10            isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
+ mount /dev/loop10 /mnt/loop10
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop10/loop/offset : '
cat /sys/block/loop10/loop/offset : + cat /sys/block/loop10/loop/offset
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop10/loop/sizelimit : '
cat /sys/block/loop10/loop/sizelimit : + cat /sys/block/loop10/loop/sizelimit
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop10/loop/autoclear : '
cat /sys/block/loop10/loop/autoclear : + cat /sys/block/loop10/loop/autoclear
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop10/loop/partscan : '
cat /sys/block/loop10/loop/partscan : + cat /sys/block/loop10/loop/partscan
0
+ for attr in offset sizelimit autoclear partscan dio
+ echo -n 'cat /sys/block/loop10/loop/dio : '
cat /sys/block/loop10/loop/dio : + cat /sys/block/loop10/loop/dio
1
+ mount
+ grep loop
/dev/loop5 on /mnt/loop5 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/loop7 on /mnt/loop7 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/loop2 on /mnt/loop2 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/loop8 on /mnt/loop8 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/loop6 on /mnt/loop6 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/loop3 on /mnt/loop3 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/loop4 on /mnt/loop4 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/loop1 on /mnt/loop1 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/loop9 on /mnt/loop9 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/loop10 on /mnt/loop10 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
+ dmesg -c
[ 1307.805150] XFS (loop4): Unmounting Filesystem
[ 1307.933976] XFS (loop2): Unmounting Filesystem
[ 1308.032542] XFS (loop1): Unmounting Filesystem
[ 1308.165143] XFS (loop5): Unmounting Filesystem
[ 1308.302151] XFS (loop3): Unmounting Filesystem
[ 1363.137973] loop: module loaded
[ 1363.206977] loop5: detected capacity change from 0 to 4194304
[ 1364.391833] XFS (loop5): Mounting V5 Filesystem
[ 1364.406390] XFS (loop5): Ending clean mount
[ 1364.411587] xfs filesystem being mounted at /mnt/loop5 supports timestamps until 2038 (0x7fffffff)
[ 1364.496590] loop7: detected capacity change from 0 to 4194304
[ 1365.686559] XFS (loop7): Mounting V5 Filesystem
[ 1365.721217] XFS (loop7): Ending clean mount
[ 1365.726446] xfs filesystem being mounted at /mnt/loop7 supports timestamps until 2038 (0x7fffffff)
[ 1365.811043] loop2: detected capacity change from 0 to 4194304
[ 1366.994003] XFS (loop2): Mounting V5 Filesystem
[ 1367.007705] XFS (loop2): Ending clean mount
[ 1367.013104] xfs filesystem being mounted at /mnt/loop2 supports timestamps until 2038 (0x7fffffff)
[ 1367.097475] loop8: detected capacity change from 0 to 4194304
[ 1368.278904] XFS (loop8): Mounting V5 Filesystem
[ 1368.313404] XFS (loop8): Ending clean mount
[ 1368.318916] xfs filesystem being mounted at /mnt/loop8 supports timestamps until 2038 (0x7fffffff)
[ 1368.402631] loop6: detected capacity change from 0 to 4194304
[ 1369.583730] XFS (loop6): Mounting V5 Filesystem
[ 1369.599583] XFS (loop6): Ending clean mount
[ 1369.604873] xfs filesystem being mounted at /mnt/loop6 supports timestamps until 2038 (0x7fffffff)
[ 1369.692002] loop3: detected capacity change from 0 to 4194304
[ 1370.866893] XFS (loop3): Mounting V5 Filesystem
[ 1370.879526] XFS (loop3): Ending clean mount
[ 1370.884263] xfs filesystem being mounted at /mnt/loop3 supports timestamps until 2038 (0x7fffffff)
[ 1370.969853] loop4: detected capacity change from 0 to 4194304
[ 1372.152669] XFS (loop4): Mounting V5 Filesystem
[ 1372.167886] XFS (loop4): Ending clean mount
[ 1372.172981] xfs filesystem being mounted at /mnt/loop4 supports timestamps until 2038 (0x7fffffff)
[ 1372.259372] loop1: detected capacity change from 0 to 4194304
[ 1373.442692] XFS (loop1): Mounting V5 Filesystem
[ 1373.455693] XFS (loop1): Ending clean mount
[ 1373.460599] xfs filesystem being mounted at /mnt/loop1 supports timestamps until 2038 (0x7fffffff)
[ 1373.544566] loop9: detected capacity change from 0 to 4194304
[ 1374.722577] XFS (loop9): Mounting V5 Filesystem
[ 1374.736937] XFS (loop9): Ending clean mount
[ 1374.741922] xfs filesystem being mounted at /mnt/loop9 supports timestamps until 2038 (0x7fffffff)
[ 1374.829737] loop10: detected capacity change from 0 to 4194304
[ 1376.020065] XFS (loop10): Mounting V5 Filesystem
[ 1376.035050] XFS (loop10): Ending clean mount
[ 1376.039910] xfs filesystem being mounted at /mnt/loop10 supports timestamps until 2038 (0x7fffffff)
+ df -h /mnt/loop1 /mnt/loop10 /mnt/loop2 /mnt/loop3 /mnt/loop4 /mnt/loop5 /mnt/loop6 /mnt/loop7 /mnt/loop8 /mnt/loop9
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop1      2.0G   47M  2.0G   3% /mnt/loop1
/dev/loop10     2.0G   47M  2.0G   3% /mnt/loop10
/dev/loop2      2.0G   47M  2.0G   3% /mnt/loop2
/dev/loop3      2.0G   47M  2.0G   3% /mnt/loop3
/dev/loop4      2.0G   47M  2.0G   3% /mnt/loop4
/dev/loop5      2.0G   47M  2.0G   3% /mnt/loop5
/dev/loop6      2.0G   47M  2.0G   3% /mnt/loop6
/dev/loop7      2.0G   47M  2.0G   3% /mnt/loop7
/dev/loop8      2.0G   47M  2.0G   3% /mnt/loop8
/dev/loop9      2.0G   47M  2.0G   3% /mnt/loop9
++ shuf -i 1-10 -n 10
+ for i in `shuf -i 1-$NN -n $NN`
+ fallocate -o 0 -l 524288000 /mnt/loop5/testfile
+ fio fio/verify.fio --filename=/mnt/loop5/testfile
write-and-verify: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.27
Starting 1 process
Jobs: 1 (f=1): [V(1)][82.3%][r=17.2MiB/s][r=4413 IOPS][eta 00m:11s]                  
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8490: Tue Sep 21 01:47:04 2021
  read: IOPS=4954, BW=19.4MiB/s (20.3MB/s)(316MiB/16313msec)
    slat (usec): min=6, max=486, avg= 9.51, stdev= 5.37
    clat (usec): min=288, max=11340, avg=3218.29, stdev=618.71
     lat (usec): min=334, max=11348, avg=3227.87, stdev=618.89
    clat percentiles (usec):
     |  1.00th=[ 2245],  5.00th=[ 2343], 10.00th=[ 2507], 20.00th=[ 2868],
     | 30.00th=[ 3163], 40.00th=[ 3195], 50.00th=[ 3195], 60.00th=[ 3228],
     | 70.00th=[ 3294], 80.00th=[ 3458], 90.00th=[ 3621], 95.00th=[ 3752],
     | 99.00th=[ 6194], 99.50th=[ 7111], 99.90th=[ 8356], 99.95th=[ 8848],
     | 99.99th=[10945]
  write: IOPS=3688, BW=14.4MiB/s (15.1MB/s)(500MiB/34699msec); 0 zone resets
    slat (usec): min=8, max=923, avg=25.13, stdev= 9.19
    clat (usec): min=591, max=61940, avg=4310.73, stdev=1327.90
     lat (usec): min=665, max=61972, avg=4336.01, stdev=1328.49
    clat percentiles (usec):
     |  1.00th=[ 2212],  5.00th=[ 2442], 10.00th=[ 2638], 20.00th=[ 3589],
     | 30.00th=[ 4015], 40.00th=[ 4228], 50.00th=[ 4424], 60.00th=[ 4621],
     | 70.00th=[ 4752], 80.00th=[ 5014], 90.00th=[ 5276], 95.00th=[ 5538],
     | 99.00th=[ 7504], 99.50th=[ 8029], 99.90th=[11469], 99.95th=[15139],
     | 99.99th=[61080]
   bw (  KiB/s): min= 4872, max=19192, per=99.14%, avg=14628.57, stdev=1692.89, samples=70
   iops        : min= 1218, max= 4798, avg=3657.14, stdev=423.22, samples=70
  lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.19%, 4=55.31%, 10=44.40%, 20=0.09%, 50=0.01%
  lat (msec)   : 100=0.01%
  cpu          : usr=2.52%, sys=9.61%, ctx=200918, majf=0, minf=1911
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=80820,128000,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: bw=19.4MiB/s (20.3MB/s), 19.4MiB/s-19.4MiB/s (20.3MB/s-20.3MB/s), io=316MiB (331MB), run=16313-16313msec
  WRITE: bw=14.4MiB/s (15.1MB/s), 14.4MiB/s-14.4MiB/s (15.1MB/s-15.1MB/s), io=500MiB (524MB), run=34699-34699msec

Disk stats (read/write):
  loop5: ios=79867/128184, merge=0/1, ticks=256599/547656, in_queue=804505, util=99.85%
+ for i in `shuf -i 1-$NN -n $NN`
+ fallocate -o 0 -l 524288000 /mnt/loop9/testfile
+ fio fio/verify.fio --filename=/mnt/loop9/testfile
write-and-verify: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.27
Starting 1 process
Jobs: 1 (f=1): [V(1)][81.0%][r=20.1MiB/s][r=5141 IOPS][eta 00m:12s]                   
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8559: Tue Sep 21 01:47:56 2021
  read: IOPS=4944, BW=19.3MiB/s (20.3MB/s)(316MiB/16373msec)
    slat (usec): min=7, max=405, avg= 9.72, stdev= 5.25
    clat (usec): min=273, max=62227, avg=3224.50, stdev=920.70
     lat (usec): min=320, max=62236, avg=3234.30, stdev=920.60
    clat percentiles (usec):
     |  1.00th=[ 2212],  5.00th=[ 2311], 10.00th=[ 2606], 20.00th=[ 2966],
     | 30.00th=[ 3163], 40.00th=[ 3163], 50.00th=[ 3195], 60.00th=[ 3228],
     | 70.00th=[ 3294], 80.00th=[ 3490], 90.00th=[ 3654], 95.00th=[ 3818],
     | 99.00th=[ 5866], 99.50th=[ 6194], 99.90th=[ 6718], 99.95th=[ 7242],
     | 99.99th=[57934]
  write: IOPS=3622, BW=14.1MiB/s (14.8MB/s)(500MiB/35339msec); 0 zone resets
    slat (usec): min=9, max=709, avg=25.28, stdev= 9.25
    clat (usec): min=708, max=66373, avg=4390.52, stdev=1322.09
     lat (usec): min=745, max=66395, avg=4415.96, stdev=1322.49
    clat percentiles (usec):
     |  1.00th=[ 2278],  5.00th=[ 2540], 10.00th=[ 2835], 20.00th=[ 3818],
     | 30.00th=[ 4113], 40.00th=[ 4293], 50.00th=[ 4490], 60.00th=[ 4621],
     | 70.00th=[ 4817], 80.00th=[ 4948], 90.00th=[ 5211], 95.00th=[ 5538],
     | 99.00th=[ 7373], 99.50th=[ 7832], 99.90th=[11731], 99.95th=[18220],
     | 99.99th=[65799]
   bw (  KiB/s): min= 8776, max=18984, per=99.54%, avg=14422.54, stdev=1304.24, samples=71
   iops        : min= 2194, max= 4746, avg=3605.63, stdev=326.06, samples=71
  lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.10%, 4=53.00%, 10=46.79%, 20=0.06%, 50=0.02%
  lat (msec)   : 100=0.02%
  cpu          : usr=2.52%, sys=9.52%, ctx=200652, majf=0, minf=1915
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=80953,128000,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: bw=19.3MiB/s (20.3MB/s), 19.3MiB/s-19.3MiB/s (20.3MB/s-20.3MB/s), io=316MiB (332MB), run=16373-16373msec
  WRITE: bw=14.1MiB/s (14.8MB/s), 14.1MiB/s-14.1MiB/s (14.8MB/s-14.8MB/s), io=500MiB (524MB), run=35339-35339msec

Disk stats (read/write):
  loop9: ios=80380/128119, merge=0/1, ticks=258908/556886, in_queue=815978, util=99.90%
+ for i in `shuf -i 1-$NN -n $NN`
+ fallocate -o 0 -l 524288000 /mnt/loop4/testfile
+ fio fio/verify.fio --filename=/mnt/loop4/testfile
write-and-verify: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.27
Starting 1 process
Jobs: 1 (f=1): [V(1)][81.2%][r=20.0MiB/s][r=5112 IOPS][eta 00m:12s]                  
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8588: Tue Sep 21 01:48:49 2021
  read: IOPS=4889, BW=19.1MiB/s (20.0MB/s)(316MiB/16567msec)
    slat (usec): min=7, max=375, avg= 9.94, stdev= 6.45
    clat (usec): min=362, max=80861, avg=3260.43, stdev=1267.52
     lat (usec): min=398, max=80869, avg=3270.46, stdev=1267.68
    clat percentiles (usec):
     |  1.00th=[ 2212],  5.00th=[ 2311], 10.00th=[ 2573], 20.00th=[ 2933],
     | 30.00th=[ 3130], 40.00th=[ 3163], 50.00th=[ 3195], 60.00th=[ 3261],
     | 70.00th=[ 3359], 80.00th=[ 3490], 90.00th=[ 3654], 95.00th=[ 3851],
     | 99.00th=[ 6325], 99.50th=[ 7767], 99.90th=[ 8979], 99.95th=[12125],
     | 99.99th=[79168]
  write: IOPS=3587, BW=14.0MiB/s (14.7MB/s)(500MiB/35684msec); 0 zone resets
    slat (usec): min=8, max=495, avg=25.57, stdev= 9.04
    clat (usec): min=538, max=41533, avg=4433.34, stdev=1168.26
     lat (usec): min=651, max=41562, avg=4459.07, stdev=1168.78
    clat percentiles (usec):
     |  1.00th=[ 2278],  5.00th=[ 2540], 10.00th=[ 2802], 20.00th=[ 3851],
     | 30.00th=[ 4146], 40.00th=[ 4359], 50.00th=[ 4490], 60.00th=[ 4686],
     | 70.00th=[ 4883], 80.00th=[ 5080], 90.00th=[ 5342], 95.00th=[ 5669],
     | 99.00th=[ 7635], 99.50th=[ 8225], 99.90th=[13566], 99.95th=[19792],
     | 99.99th=[40633]
   bw (  KiB/s): min= 5744, max=16840, per=99.12%, avg=14222.22, stdev=1438.27, samples=72
   iops        : min= 1436, max= 4210, avg=3555.56, stdev=359.57, samples=72
  lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.12%, 4=52.40%, 10=47.31%, 20=0.13%, 50=0.03%
  lat (msec)   : 100=0.01%
  cpu          : usr=2.49%, sys=9.60%, ctx=200897, majf=0, minf=1915
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=81010,128000,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: bw=19.1MiB/s (20.0MB/s), 19.1MiB/s-19.1MiB/s (20.0MB/s-20.0MB/s), io=316MiB (332MB), run=16567-16567msec
  WRITE: bw=14.0MiB/s (14.7MB/s), 14.0MiB/s-14.0MiB/s (14.7MB/s-14.7MB/s), io=500MiB (524MB), run=35684-35684msec

Disk stats (read/write):
  loop4: ios=80377/128149, merge=0/1, ticks=261641/562817, in_queue=824655, util=99.88%
+ for i in `shuf -i 1-$NN -n $NN`
+ fallocate -o 0 -l 524288000 /mnt/loop10/testfile
+ fio fio/verify.fio --filename=/mnt/loop10/testfile
write-and-verify: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.27
Starting 1 process
Jobs: 1 (f=1): [V(1)][82.3%][r=19.3MiB/s][r=4937 IOPS][eta 00m:11s]                 
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8612: Tue Sep 21 01:49:40 2021
  read: IOPS=5002, BW=19.5MiB/s (20.5MB/s)(316MiB/16161msec)
    slat (usec): min=7, max=488, avg= 9.65, stdev= 7.47
    clat (usec): min=299, max=45475, avg=3186.60, stdev=790.52
     lat (usec): min=349, max=45484, avg=3196.33, stdev=790.39
    clat percentiles (usec):
     |  1.00th=[ 2147],  5.00th=[ 2278], 10.00th=[ 2376], 20.00th=[ 2835],
     | 30.00th=[ 3130], 40.00th=[ 3163], 50.00th=[ 3195], 60.00th=[ 3228],
     | 70.00th=[ 3294], 80.00th=[ 3490], 90.00th=[ 3654], 95.00th=[ 3785],
     | 99.00th=[ 5866], 99.50th=[ 6259], 99.90th=[ 6849], 99.95th=[ 8717],
     | 99.99th=[43254]
  write: IOPS=3683, BW=14.4MiB/s (15.1MB/s)(500MiB/34753msec); 0 zone resets
    slat (usec): min=9, max=567, avg=24.64, stdev= 9.17
    clat (usec): min=955, max=64688, avg=4318.02, stdev=1328.89
     lat (usec): min=1003, max=64718, avg=4342.80, stdev=1329.80
    clat percentiles (usec):
     |  1.00th=[ 2278],  5.00th=[ 2474], 10.00th=[ 2671], 20.00th=[ 3490],
     | 30.00th=[ 3982], 40.00th=[ 4228], 50.00th=[ 4424], 60.00th=[ 4621],
     | 70.00th=[ 4817], 80.00th=[ 5014], 90.00th=[ 5276], 95.00th=[ 5604],
     | 99.00th=[ 7373], 99.50th=[ 7963], 99.90th=[ 9372], 99.95th=[11863],
     | 99.99th=[62129]
   bw (  KiB/s): min= 7208, max=17880, per=99.29%, avg=14628.57, stdev=1597.34, samples=70
   iops        : min= 1802, max= 4470, avg=3657.14, stdev=399.34, samples=70
  lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.15%, 4=56.08%, 10=43.72%, 20=0.02%, 50=0.02%
  lat (msec)   : 100=0.01%
  cpu          : usr=2.55%, sys=9.46%, ctx=201811, majf=0, minf=1912
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=80852,128000,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: bw=19.5MiB/s (20.5MB/s), 19.5MiB/s-19.5MiB/s (20.5MB/s-20.5MB/s), io=316MiB (331MB), run=16161-16161msec
  WRITE: bw=14.4MiB/s (15.1MB/s), 14.4MiB/s-14.4MiB/s (15.1MB/s-15.1MB/s), io=500MiB (524MB), run=34753-34753msec

Disk stats (read/write):
  loop10: ios=80342/128052, merge=0/1, ticks=255518/547044, in_queue=802607, util=99.90%
+ for i in `shuf -i 1-$NN -n $NN`
+ fallocate -o 0 -l 524288000 /mnt/loop8/testfile
+ fio fio/verify.fio --filename=/mnt/loop8/testfile
write-and-verify: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.27
Starting 1 process
Jobs: 1 (f=1): [V(1)][82.0%][r=19.5MiB/s][r=4989 IOPS][eta 00m:11s]                   
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8634: Tue Sep 21 01:50:30 2021
  read: IOPS=5086, BW=19.9MiB/s (20.8MB/s)(316MiB/15902msec)
    slat (usec): min=7, max=462, avg= 9.21, stdev= 5.41
    clat (usec): min=269, max=7474, avg=3134.97, stdev=540.77
     lat (usec): min=316, max=7491, avg=3144.26, stdev=540.69
    clat percentiles (usec):
     |  1.00th=[ 2180],  5.00th=[ 2278], 10.00th=[ 2343], 20.00th=[ 2704],
     | 30.00th=[ 3064], 40.00th=[ 3163], 50.00th=[ 3195], 60.00th=[ 3228],
     | 70.00th=[ 3294], 80.00th=[ 3458], 90.00th=[ 3621], 95.00th=[ 3752],
     | 99.00th=[ 5604], 99.50th=[ 5997], 99.90th=[ 6456], 99.95th=[ 6587],
     | 99.99th=[ 6849]
  write: IOPS=3715, BW=14.5MiB/s (15.2MB/s)(500MiB/34450msec); 0 zone resets
    slat (usec): min=8, max=1359, avg=24.98, stdev=10.21
    clat (usec): min=842, max=84403, avg=4279.76, stdev=1473.52
     lat (usec): min=876, max=84424, avg=4304.88, stdev=1474.03
    clat percentiles (usec):
     |  1.00th=[ 2212],  5.00th=[ 2474], 10.00th=[ 2638], 20.00th=[ 3359],
     | 30.00th=[ 3949], 40.00th=[ 4228], 50.00th=[ 4424], 60.00th=[ 4555],
     | 70.00th=[ 4752], 80.00th=[ 5014], 90.00th=[ 5276], 95.00th=[ 5538],
     | 99.00th=[ 7373], 99.50th=[ 8029], 99.90th=[12518], 99.95th=[22414],
     | 99.99th=[81265]
   bw (  KiB/s): min=10504, max=19360, per=99.85%, avg=14840.58, stdev=1357.36, samples=69
   iops        : min= 2626, max= 4840, avg=3710.14, stdev=339.34, samples=69
  lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.17%, 4=56.79%, 10=42.93%, 20=0.07%, 50=0.03%
  lat (msec)   : 100=0.01%
  cpu          : usr=2.58%, sys=9.50%, ctx=200944, majf=0, minf=1912
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=80878,128000,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: bw=19.9MiB/s (20.8MB/s), 19.9MiB/s-19.9MiB/s (20.8MB/s-20.8MB/s), io=316MiB (331MB), run=15902-15902msec
  WRITE: bw=14.5MiB/s (15.2MB/s), 14.5MiB/s-14.5MiB/s (15.2MB/s-15.2MB/s), io=500MiB (524MB), run=34450-34450msec

Disk stats (read/write):
  loop8: ios=79733/128068, merge=0/1, ticks=249748/541938, in_queue=791768, util=99.90%
+ for i in `shuf -i 1-$NN -n $NN`
+ fallocate -o 0 -l 524288000 /mnt/loop1/testfile
+ fio fio/verify.fio --filename=/mnt/loop1/testfile
write-and-verify: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.27
Starting 1 process
Jobs: 1 (f=1): [V(1)][80.6%][r=19.4MiB/s][r=4971 IOPS][eta 00m:12s]                   
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8659: Tue Sep 21 01:51:21 2021
  read: IOPS=4974, BW=19.4MiB/s (20.4MB/s)(315MiB/16227msec)
    slat (usec): min=7, max=530, avg= 9.26, stdev= 5.07
    clat (usec): min=310, max=41192, avg=3205.15, stdev=763.56
     lat (usec): min=356, max=41200, avg=3214.48, stdev=763.67
    clat percentiles (usec):
     |  1.00th=[ 2245],  5.00th=[ 2311], 10.00th=[ 2376], 20.00th=[ 2802],
     | 30.00th=[ 3130], 40.00th=[ 3195], 50.00th=[ 3228], 60.00th=[ 3261],
     | 70.00th=[ 3326], 80.00th=[ 3523], 90.00th=[ 3687], 95.00th=[ 3884],
     | 99.00th=[ 5866], 99.50th=[ 6325], 99.90th=[ 7373], 99.95th=[ 8717],
     | 99.99th=[38536]
  write: IOPS=3737, BW=14.6MiB/s (15.3MB/s)(500MiB/34251msec); 0 zone resets
    slat (usec): min=9, max=702, avg=24.53, stdev=10.22
    clat (usec): min=607, max=44128, avg=4255.41, stdev=1349.69
     lat (usec): min=901, max=44147, avg=4280.09, stdev=1351.06
    clat percentiles (usec):
     |  1.00th=[ 2278],  5.00th=[ 2507], 10.00th=[ 2671], 20.00th=[ 3261],
     | 30.00th=[ 3818], 40.00th=[ 4178], 50.00th=[ 4359], 60.00th=[ 4555],
     | 70.00th=[ 4752], 80.00th=[ 4948], 90.00th=[ 5211], 95.00th=[ 5538],
     | 99.00th=[ 7373], 99.50th=[ 8160], 99.90th=[19530], 99.95th=[25297],
     | 99.99th=[43779]
   bw (  KiB/s): min= 6440, max=19432, per=99.27%, avg=14840.58, stdev=2063.19, samples=69
   iops        : min= 1610, max= 4860, avg=3710.14, stdev=515.87, samples=69
  lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.12%, 4=58.06%, 10=41.65%, 20=0.11%, 50=0.07%
  cpu          : usr=2.62%, sys=9.29%, ctx=201148, majf=0, minf=1907
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=80728,128000,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: bw=19.4MiB/s (20.4MB/s), 19.4MiB/s-19.4MiB/s (20.4MB/s-20.4MB/s), io=315MiB (331MB), run=16227-16227msec
  WRITE: bw=14.6MiB/s (15.3MB/s), 14.6MiB/s-14.6MiB/s (15.3MB/s-15.3MB/s), io=500MiB (524MB), run=34251-34251msec

Disk stats (read/write):
  loop1: ios=80339/128148, merge=0/78, ticks=257157/539997, in_queue=797307, util=99.90%
+ for i in `shuf -i 1-$NN -n $NN`
+ fallocate -o 0 -l 524288000 /mnt/loop7/testfile
+ fio fio/verify.fio --filename=/mnt/loop7/testfile
write-and-verify: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.27
Starting 1 process
Jobs: 1 (f=1): [V(1)][82.0%][r=19.9MiB/s][r=5104 IOPS][eta 00m:11s]                   
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8687: Tue Sep 21 01:52:12 2021
  read: IOPS=5097, BW=19.9MiB/s (20.9MB/s)(316MiB/15850msec)
    slat (usec): min=7, max=223, avg= 9.22, stdev= 5.96
    clat (usec): min=295, max=20700, avg=3127.93, stdev=691.52
     lat (usec): min=346, max=20709, avg=3137.22, stdev=691.81
    clat percentiles (usec):
     |  1.00th=[ 2180],  5.00th=[ 2278], 10.00th=[ 2343], 20.00th=[ 2671],
     | 30.00th=[ 2900], 40.00th=[ 3130], 50.00th=[ 3163], 60.00th=[ 3228],
     | 70.00th=[ 3261], 80.00th=[ 3425], 90.00th=[ 3589], 95.00th=[ 3752],
     | 99.00th=[ 6128], 99.50th=[ 7242], 99.90th=[ 8455], 99.95th=[ 8979],
     | 99.99th=[19530]
  write: IOPS=3747, BW=14.6MiB/s (15.3MB/s)(500MiB/34159msec); 0 zone resets
    slat (usec): min=8, max=636, avg=24.59, stdev= 9.79
    clat (usec): min=381, max=32024, avg=4243.85, stdev=1083.88
     lat (usec): min=422, max=32066, avg=4268.58, stdev=1084.70
    clat percentiles (usec):
     |  1.00th=[ 2278],  5.00th=[ 2540], 10.00th=[ 2737], 20.00th=[ 3392],
     | 30.00th=[ 3916], 40.00th=[ 4178], 50.00th=[ 4359], 60.00th=[ 4555],
     | 70.00th=[ 4686], 80.00th=[ 4948], 90.00th=[ 5211], 95.00th=[ 5473],
     | 99.00th=[ 7308], 99.50th=[ 7767], 99.90th=[10159], 99.95th=[17695],
     | 99.99th=[31065]
   bw (  KiB/s): min= 4040, max=19568, per=99.01%, avg=14840.58, stdev=1919.64, samples=69
   iops        : min= 1010, max= 4892, avg=3710.14, stdev=479.91, samples=69
  lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.21%, 4=57.49%, 10=42.21%, 20=0.05%, 50=0.02%
  cpu          : usr=2.50%, sys=9.52%, ctx=201015, majf=0, minf=1910
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=80792,128000,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: bw=19.9MiB/s (20.9MB/s), 19.9MiB/s-19.9MiB/s (20.9MB/s-20.9MB/s), io=316MiB (331MB), run=15850-15850msec
  WRITE: bw=14.6MiB/s (15.3MB/s), 14.6MiB/s-14.6MiB/s (15.3MB/s-15.3MB/s), io=500MiB (524MB), run=34159-34159msec

Disk stats (read/write):
  loop7: ios=79845/128091, merge=0/1, ticks=249588/538035, in_queue=787718, util=99.88%
+ for i in `shuf -i 1-$NN -n $NN`
+ fallocate -o 0 -l 524288000 /mnt/loop3/testfile
+ fio fio/verify.fio --filename=/mnt/loop3/testfile
write-and-verify: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.27
Starting 1 process
Jobs: 1 (f=1): [V(1)][80.3%][r=20.2MiB/s][r=5164 IOPS][eta 00m:12s]                  
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8701: Tue Sep 21 01:53:01 2021
  read: IOPS=5092, BW=19.9MiB/s (20.9MB/s)(316MiB/15886msec)
    slat (usec): min=7, max=213, avg= 8.90, stdev= 3.35
    clat (usec): min=264, max=13187, avg=3131.33, stdev=593.30
     lat (usec): min=279, max=13195, avg=3140.30, stdev=593.38
    clat percentiles (usec):
     |  1.00th=[ 2311],  5.00th=[ 2343], 10.00th=[ 2409], 20.00th=[ 2704],
     | 30.00th=[ 2900], 40.00th=[ 3163], 50.00th=[ 3195], 60.00th=[ 3261],
     | 70.00th=[ 3294], 80.00th=[ 3392], 90.00th=[ 3621], 95.00th=[ 3720],
     | 99.00th=[ 5932], 99.50th=[ 6390], 99.90th=[ 7504], 99.95th=[ 7635],
     | 99.99th=[10814]
  write: IOPS=3805, BW=14.9MiB/s (15.6MB/s)(500MiB/33633msec); 0 zone resets
    slat (usec): min=8, max=4286, avg=22.56, stdev=16.05
    clat (usec): min=371, max=57309, avg=4180.18, stdev=1403.07
     lat (usec): min=430, max=57351, avg=4202.87, stdev=1404.78
    clat percentiles (usec):
     |  1.00th=[ 2245],  5.00th=[ 2474], 10.00th=[ 2704], 20.00th=[ 3228],
     | 30.00th=[ 3621], 40.00th=[ 4015], 50.00th=[ 4293], 60.00th=[ 4490],
     | 70.00th=[ 4621], 80.00th=[ 4883], 90.00th=[ 5211], 95.00th=[ 5604],
     | 99.00th=[ 7701], 99.50th=[ 8848], 99.90th=[14222], 99.95th=[16909],
     | 99.99th=[55313]
   bw (  KiB/s): min= 4528, max=19200, per=98.92%, avg=15058.82, stdev=2378.77, samples=68
   iops        : min= 1132, max= 4800, avg=3764.71, stdev=594.69, samples=68
  lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.09%, 4=62.27%, 10=37.44%, 20=0.17%, 50=0.01%
  lat (msec)   : 100=0.02%
  cpu          : usr=2.44%, sys=8.90%, ctx=201525, majf=0, minf=1915
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=80897,128000,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: bw=19.9MiB/s (20.9MB/s), 19.9MiB/s-19.9MiB/s (20.9MB/s-20.9MB/s), io=316MiB (331MB), run=15886-15886msec
  WRITE: bw=14.9MiB/s (15.6MB/s), 14.9MiB/s-14.9MiB/s (15.6MB/s-15.6MB/s), io=500MiB (524MB), run=33633-33633msec

Disk stats (read/write):
  loop3: ios=79821/128051, merge=0/1, ticks=249624/529630, in_queue=779324, util=99.87%
+ for i in `shuf -i 1-$NN -n $NN`
+ fallocate -o 0 -l 524288000 /mnt/loop6/testfile
+ fio fio/verify.fio --filename=/mnt/loop6/testfile
write-and-verify: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.27
Starting 1 process
Jobs: 1 (f=1): [V(1)][80.6%][r=20.7MiB/s][r=5310 IOPS][eta 00m:12s]                 
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8724: Tue Sep 21 01:53:52 2021
  read: IOPS=5095, BW=19.9MiB/s (20.9MB/s)(316MiB/15873msec)
    slat (usec): min=7, max=183, avg= 9.20, stdev= 4.69
    clat (usec): min=325, max=15035, avg=3129.45, stdev=577.53
     lat (usec): min=371, max=15045, avg=3138.72, stdev=577.56
    clat percentiles (usec):
     |  1.00th=[ 2278],  5.00th=[ 2343], 10.00th=[ 2376], 20.00th=[ 2704],
     | 30.00th=[ 2868], 40.00th=[ 3163], 50.00th=[ 3228], 60.00th=[ 3261],
     | 70.00th=[ 3294], 80.00th=[ 3425], 90.00th=[ 3621], 95.00th=[ 3720],
     | 99.00th=[ 5604], 99.50th=[ 6063], 99.90th=[ 6587], 99.95th=[ 8160],
     | 99.99th=[14746]
  write: IOPS=3665, BW=14.3MiB/s (15.0MB/s)(500MiB/34920msec); 0 zone resets
    slat (usec): min=9, max=465, avg=24.90, stdev= 8.93
    clat (usec): min=491, max=73496, avg=4338.64, stdev=1362.98
     lat (usec): min=527, max=73516, avg=4363.68, stdev=1363.66
    clat percentiles (usec):
     |  1.00th=[ 2245],  5.00th=[ 2474], 10.00th=[ 2704], 20.00th=[ 3720],
     | 30.00th=[ 4080], 40.00th=[ 4293], 50.00th=[ 4424], 60.00th=[ 4621],
     | 70.00th=[ 4752], 80.00th=[ 4948], 90.00th=[ 5211], 95.00th=[ 5473],
     | 99.00th=[ 7373], 99.50th=[ 8029], 99.90th=[17433], 99.95th=[23725],
     | 99.99th=[46924]
   bw (  KiB/s): min= 9496, max=19320, per=99.77%, avg=14628.57, stdev=1426.59, samples=70
   iops        : min= 2374, max= 4830, avg=3657.14, stdev=356.65, samples=70
  lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.13%, 4=54.50%, 10=45.18%, 20=0.14%, 50=0.04%
  lat (msec)   : 100=0.01%
  cpu          : usr=2.43%, sys=9.55%, ctx=201342, majf=0, minf=1912
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=80873,128000,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: bw=19.9MiB/s (20.9MB/s), 19.9MiB/s-19.9MiB/s (20.9MB/s-20.9MB/s), io=316MiB (331MB), run=15873-15873msec
  WRITE: bw=14.3MiB/s (15.0MB/s), 14.3MiB/s-14.3MiB/s (15.0MB/s-15.0MB/s), io=500MiB (524MB), run=34920-34920msec

Disk stats (read/write):
  loop6: ios=80041/128111, merge=0/1, ticks=250035/550052, in_queue=800208, util=99.90%
+ for i in `shuf -i 1-$NN -n $NN`
+ fallocate -o 0 -l 524288000 /mnt/loop2/testfile
+ fio fio/verify.fio --filename=/mnt/loop2/testfile
write-and-verify: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
fio-3.27
Starting 1 process
Jobs: 1 (f=1): [V(1)][81.2%][r=19.1MiB/s][r=4885 IOPS][eta 00m:16s]                   
write-and-verify: (groupid=0, jobs=1): err= 0: pid=8753: Tue Sep 21 01:55:02 2021
  read: IOPS=5145, BW=20.1MiB/s (21.1MB/s)(316MiB/15712msec)
    slat (usec): min=7, max=368, avg= 9.14, stdev= 4.98
    clat (usec): min=244, max=6925, avg=3098.61, stdev=561.83
     lat (usec): min=291, max=6933, avg=3107.82, stdev=561.80
    clat percentiles (usec):
     |  1.00th=[ 2343],  5.00th=[ 2376], 10.00th=[ 2376], 20.00th=[ 2442],
     | 30.00th=[ 2835], 40.00th=[ 3032], 50.00th=[ 3228], 60.00th=[ 3261],
     | 70.00th=[ 3326], 80.00th=[ 3425], 90.00th=[ 3654], 95.00th=[ 3785],
     | 99.00th=[ 5407], 99.50th=[ 5997], 99.90th=[ 6587], 99.95th=[ 6718],
     | 99.99th=[ 6849]
  write: IOPS=2394, BW=9578KiB/s (9807kB/s)(500MiB/53458msec); 0 zone resets
    slat (usec): min=9, max=761, avg=27.46, stdev= 9.62
    clat (usec): min=686, max=34607, avg=6653.12, stdev=1948.49
     lat (usec): min=717, max=34630, avg=6680.74, stdev=1949.10
    clat percentiles (usec):
     |  1.00th=[ 2900],  5.00th=[ 3785], 10.00th=[ 4490], 20.00th=[ 5080],
     | 30.00th=[ 5538], 40.00th=[ 5997], 50.00th=[ 6456], 60.00th=[ 6915],
     | 70.00th=[ 7504], 80.00th=[ 8225], 90.00th=[ 9241], 95.00th=[ 9896],
     | 99.00th=[11207], 99.50th=[12125], 99.90th=[19268], 99.95th=[23725],
     | 99.99th=[29492]
   bw (  KiB/s): min= 6416, max=16448, per=99.91%, avg=9569.89, stdev=1902.35, samples=107
   iops        : min= 1604, max= 4112, avg=2392.47, stdev=475.58, samples=107
  lat (usec)   : 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.04%, 4=41.59%, 10=55.64%, 20=2.66%, 50=0.06%
  cpu          : usr=1.95%, sys=7.37%, ctx=202445, majf=0, minf=1910
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=80846,128000,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
   READ: bw=20.1MiB/s (21.1MB/s), 20.1MiB/s-20.1MiB/s (21.1MB/s-21.1MB/s), io=316MiB (331MB), run=15712-15712msec
  WRITE: bw=9578KiB/s (9807kB/s), 9578KiB/s-9578KiB/s (9807kB/s-9807kB/s), io=500MiB (524MB), run=53458-53458msec

Disk stats (read/write):
  loop2: ios=80593/128083, merge=0/1, ticks=249267/846323, in_queue=1095650, util=99.97%
+ df -h /mnt/loop1 /mnt/loop10 /mnt/loop2 /mnt/loop3 /mnt/loop4 /mnt/loop5 /mnt/loop6 /mnt/loop7 /mnt/loop8 /mnt/loop9
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop1      2.0G  548M  1.5G  27% /mnt/loop1
/dev/loop10     2.0G  548M  1.5G  27% /mnt/loop10
/dev/loop2      2.0G  548M  1.5G  27% /mnt/loop2
/dev/loop3      2.0G  548M  1.5G  27% /mnt/loop3
/dev/loop4      2.0G  548M  1.5G  27% /mnt/loop4
/dev/loop5      2.0G  548M  1.5G  27% /mnt/loop5
/dev/loop6      2.0G  548M  1.5G  27% /mnt/loop6
/dev/loop7      2.0G  548M  1.5G  27% /mnt/loop7
/dev/loop8      2.0G  548M  1.5G  27% /mnt/loop8
/dev/loop9      2.0G  548M  1.5G  27% /mnt/loop9
+ unload_loop
++ shuf -i 1-10 -n 10
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop1
+ rm -fr ./loop1
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop2
+ rm -fr ./loop2
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop4
+ rm -fr ./loop4
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop9
+ rm -fr ./loop9
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop5
+ rm -fr ./loop5
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop10
+ rm -fr ./loop10
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop7
+ rm -fr ./loop7
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop3
+ rm -fr ./loop3
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop8
+ rm -fr ./loop8
+ for i in `shuf -i 1-$NN -n $NN`
+ umount /mnt/loop6
+ rm -fr ./loop6
+ losetup -D
+ sleep 3
+ rmmod loop
+ modprobe -r loop
+ lsmod
+ grep loop
++ shuf -i 1-10 -n 10
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop2
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop3
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop8
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop1
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop5
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop10
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop6
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop4
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop7
+ for i in `shuf -i 1-$NN -n $NN`
+ rm -fr ./loop9
+ rm -fr /mnt/loop1 /mnt/loop10 /mnt/loop2 /mnt/loop3 /mnt/loop4 /mnt/loop5 /mnt/loop6 /mnt/loop7 /mnt/loop8 /mnt/loop9
root@dev linux-block #
-- 
2.29.0


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 1/8] loop: use sysfs_emit() in the sysfs offset show
  2021-09-21  9:21 [PATCH 0/8] loop: small clenaup Chaitanya Kulkarni
@ 2021-09-21  9:21 ` Chaitanya Kulkarni
  2021-09-21 13:33   ` Himanshu Madhani
  2021-09-21  9:21 ` [PATCH 2/8] loop: use sysfs_emit() in the sysfs sizelimit show Chaitanya Kulkarni
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Chaitanya Kulkarni @ 2021-09-21  9:21 UTC (permalink / raw)
  To: linux-block; +Cc: axboe, Chaitanya Kulkarni

From: Chaitanya Kulkarni <kch@nvidia.com>

Output defects can exist in sysfs content using sprintf and snprintf.

sprintf does not know the PAGE_SIZE maximum of the temporary buffer
used for outputting sysfs content and it's possible to overrun the
PAGE_SIZE buffer length.

Use a generic sysfs_emit function that knows that the size of the
temporary buffer and ensures that no overrun is done for offset
attribute.

Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
---
 drivers/block/loop.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 7bf4686af774..e37444977ae6 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -856,7 +856,7 @@ static ssize_t loop_attr_backing_file_show(struct loop_device *lo, char *buf)
 
 static ssize_t loop_attr_offset_show(struct loop_device *lo, char *buf)
 {
-	return sprintf(buf, "%llu\n", (unsigned long long)lo->lo_offset);
+	return sysfs_emit(buf, "%llu\n", (unsigned long long)lo->lo_offset);
 }
 
 static ssize_t loop_attr_sizelimit_show(struct loop_device *lo, char *buf)
-- 
2.29.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 2/8] loop: use sysfs_emit() in the sysfs sizelimit show
  2021-09-21  9:21 [PATCH 0/8] loop: small clenaup Chaitanya Kulkarni
  2021-09-21  9:21 ` [PATCH 1/8] loop: use sysfs_emit() in the sysfs offset show Chaitanya Kulkarni
@ 2021-09-21  9:21 ` Chaitanya Kulkarni
  2021-09-21 13:35   ` Himanshu Madhani
  2021-09-21  9:21 ` [PATCH 3/8] loop: use sysfs_emit() in the sysfs autoclear show Chaitanya Kulkarni
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Chaitanya Kulkarni @ 2021-09-21  9:21 UTC (permalink / raw)
  To: linux-block; +Cc: axboe, Chaitanya Kulkarni

From: Chaitanya Kulkarni <kch@nvidia.com>

Output defects can exist in sysfs content using sprintf and snprintf.

sprintf does not know the PAGE_SIZE maximum of the temporary buffer
used for outputting sysfs content and it's possible to overrun the
PAGE_SIZE buffer length.

Use a generic sysfs_emit function that knows that the size of the
temporary buffer and ensures that no overrun is done for sizelimit
attribute.

Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
---
 drivers/block/loop.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index e37444977ae6..ec1329afc154 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -861,7 +861,7 @@ static ssize_t loop_attr_offset_show(struct loop_device *lo, char *buf)
 
 static ssize_t loop_attr_sizelimit_show(struct loop_device *lo, char *buf)
 {
-	return sprintf(buf, "%llu\n", (unsigned long long)lo->lo_sizelimit);
+	return sysfs_emit(buf, "%llu\n", (unsigned long long)lo->lo_sizelimit);
 }
 
 static ssize_t loop_attr_autoclear_show(struct loop_device *lo, char *buf)
-- 
2.29.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 3/8] loop: use sysfs_emit() in the sysfs autoclear show
  2021-09-21  9:21 [PATCH 0/8] loop: small clenaup Chaitanya Kulkarni
  2021-09-21  9:21 ` [PATCH 1/8] loop: use sysfs_emit() in the sysfs offset show Chaitanya Kulkarni
  2021-09-21  9:21 ` [PATCH 2/8] loop: use sysfs_emit() in the sysfs sizelimit show Chaitanya Kulkarni
@ 2021-09-21  9:21 ` Chaitanya Kulkarni
  2021-09-21 13:35   ` Himanshu Madhani
  2021-09-21  9:21 ` [PATCH 4/8] loop: use sysfs_emit() in the sysfs partscan show Chaitanya Kulkarni
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Chaitanya Kulkarni @ 2021-09-21  9:21 UTC (permalink / raw)
  To: linux-block; +Cc: axboe, Chaitanya Kulkarni

From: Chaitanya Kulkarni <kch@nvidia.com>

Output defects can exist in sysfs content using sprintf and snprintf.

sprintf does not know the PAGE_SIZE maximum of the temporary buffer
used for outputting sysfs content and it's possible to overrun the
PAGE_SIZE buffer length.

Use a generic sysfs_emit function that knows that the size of the
temporary buffer and ensures that no overrun is done for autoclear
attribute.

Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
---
 drivers/block/loop.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index ec1329afc154..fd935b788c53 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -868,7 +868,7 @@ static ssize_t loop_attr_autoclear_show(struct loop_device *lo, char *buf)
 {
 	int autoclear = (lo->lo_flags & LO_FLAGS_AUTOCLEAR);
 
-	return sprintf(buf, "%s\n", autoclear ? "1" : "0");
+	return sysfs_emit(buf, "%s\n", autoclear ? "1" : "0");
 }
 
 static ssize_t loop_attr_partscan_show(struct loop_device *lo, char *buf)
-- 
2.29.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 4/8] loop: use sysfs_emit() in the sysfs partscan show
  2021-09-21  9:21 [PATCH 0/8] loop: small clenaup Chaitanya Kulkarni
                   ` (2 preceding siblings ...)
  2021-09-21  9:21 ` [PATCH 3/8] loop: use sysfs_emit() in the sysfs autoclear show Chaitanya Kulkarni
@ 2021-09-21  9:21 ` Chaitanya Kulkarni
  2021-09-21 13:35   ` Himanshu Madhani
  2021-09-21  9:21 ` [PATCH 5/8] loop: use sysfs_emit() in the sysfs dio show Chaitanya Kulkarni
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Chaitanya Kulkarni @ 2021-09-21  9:21 UTC (permalink / raw)
  To: linux-block; +Cc: axboe, Chaitanya Kulkarni

From: Chaitanya Kulkarni <kch@nvidia.com>

Output defects can exist in sysfs content using sprintf and snprintf.

sprintf does not know the PAGE_SIZE maximum of the temporary buffer
used for outputting sysfs content and it's possible to overrun the
PAGE_SIZE buffer length.

Use a generic sysfs_emit function that knows that the size of the
temporary buffer and ensures that no overrun is done for partscan
attribute.

Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
---
 drivers/block/loop.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index fd935b788c53..63f64341c19c 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -875,7 +875,7 @@ static ssize_t loop_attr_partscan_show(struct loop_device *lo, char *buf)
 {
 	int partscan = (lo->lo_flags & LO_FLAGS_PARTSCAN);
 
-	return sprintf(buf, "%s\n", partscan ? "1" : "0");
+	return sysfs_emit(buf, "%s\n", partscan ? "1" : "0");
 }
 
 static ssize_t loop_attr_dio_show(struct loop_device *lo, char *buf)
-- 
2.29.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 5/8] loop: use sysfs_emit() in the sysfs dio show
  2021-09-21  9:21 [PATCH 0/8] loop: small clenaup Chaitanya Kulkarni
                   ` (3 preceding siblings ...)
  2021-09-21  9:21 ` [PATCH 4/8] loop: use sysfs_emit() in the sysfs partscan show Chaitanya Kulkarni
@ 2021-09-21  9:21 ` Chaitanya Kulkarni
  2021-09-21 13:36   ` Himanshu Madhani
  2021-09-21  9:21 ` [PATCH 6/8] loop: remove extra variable in lo_fallocate() Chaitanya Kulkarni
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Chaitanya Kulkarni @ 2021-09-21  9:21 UTC (permalink / raw)
  To: linux-block; +Cc: axboe, Chaitanya Kulkarni

From: Chaitanya Kulkarni <kch@nvidia.com>

Output defects can exist in sysfs content using sprintf and snprintf.

sprintf does not know the PAGE_SIZE maximum of the temporary buffer
used for outputting sysfs content and it's possible to overrun the
PAGE_SIZE buffer length.

Use a generic sysfs_emit function that knows that the size of the
temporary buffer and ensures that no overrun is done for dio
attribute.

Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
---
 drivers/block/loop.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 63f64341c19c..fedb8d63b4c6 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -882,7 +882,7 @@ static ssize_t loop_attr_dio_show(struct loop_device *lo, char *buf)
 {
 	int dio = (lo->lo_flags & LO_FLAGS_DIRECT_IO);
 
-	return sprintf(buf, "%s\n", dio ? "1" : "0");
+	return sysfs_emit(buf, "%s\n", dio ? "1" : "0");
 }
 
 LOOP_ATTR_RO(backing_file);
-- 
2.29.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 6/8] loop: remove extra variable in lo_fallocate()
  2021-09-21  9:21 [PATCH 0/8] loop: small clenaup Chaitanya Kulkarni
                   ` (4 preceding siblings ...)
  2021-09-21  9:21 ` [PATCH 5/8] loop: use sysfs_emit() in the sysfs dio show Chaitanya Kulkarni
@ 2021-09-21  9:21 ` Chaitanya Kulkarni
  2021-09-21 13:36   ` Himanshu Madhani
  2021-09-21  9:21 ` [PATCH 7/8] loop: remove extra variable in lo_req_flush Chaitanya Kulkarni
  2021-09-21  9:21 ` [PATCH 8/8] loop: allow user to set the queue depth Chaitanya Kulkarni
  7 siblings, 1 reply; 18+ messages in thread
From: Chaitanya Kulkarni @ 2021-09-21  9:21 UTC (permalink / raw)
  To: linux-block; +Cc: axboe, Chaitanya Kulkarni

From: Chaitanya Kulkarni <kch@nvidia.com>

The local variable q is used to pass it to the blk_queue_discard(). We
can get away with using lo->lo_queue instead of storing in a local
variable which is not used anywhere else.

No functional change in this patch.

Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
---
 drivers/block/loop.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index fedb8d63b4c6..51c42788731a 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -480,12 +480,11 @@ static int lo_fallocate(struct loop_device *lo, struct request *rq, loff_t pos,
 	 * information.
 	 */
 	struct file *file = lo->lo_backing_file;
-	struct request_queue *q = lo->lo_queue;
 	int ret;
 
 	mode |= FALLOC_FL_KEEP_SIZE;
 
-	if (!blk_queue_discard(q)) {
+	if (!blk_queue_discard(lo->lo_queue)) {
 		ret = -EOPNOTSUPP;
 		goto out;
 	}
-- 
2.29.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 7/8] loop: remove extra variable in lo_req_flush
  2021-09-21  9:21 [PATCH 0/8] loop: small clenaup Chaitanya Kulkarni
                   ` (5 preceding siblings ...)
  2021-09-21  9:21 ` [PATCH 6/8] loop: remove extra variable in lo_fallocate() Chaitanya Kulkarni
@ 2021-09-21  9:21 ` Chaitanya Kulkarni
  2021-09-21 13:37   ` Himanshu Madhani
  2021-09-21  9:21 ` [PATCH 8/8] loop: allow user to set the queue depth Chaitanya Kulkarni
  7 siblings, 1 reply; 18+ messages in thread
From: Chaitanya Kulkarni @ 2021-09-21  9:21 UTC (permalink / raw)
  To: linux-block; +Cc: axboe, Chaitanya Kulkarni

From: Chaitanya Kulkarni <kch@nvidia.com>

The local variable file is used to pass it to the vfs_fsync(). We can
get away with using lo->lo_backing_file instead of storing in a local
variable which is not used anywhere else.

No functional change in this patch.

Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
---
 drivers/block/loop.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 51c42788731a..6478d3b0dd2a 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -498,8 +498,7 @@ static int lo_fallocate(struct loop_device *lo, struct request *rq, loff_t pos,
 
 static int lo_req_flush(struct loop_device *lo, struct request *rq)
 {
-	struct file *file = lo->lo_backing_file;
-	int ret = vfs_fsync(file, 0);
+	int ret = vfs_fsync(lo->lo_backing_file, 0);
 	if (unlikely(ret && ret != -EINVAL))
 		ret = -EIO;
 
-- 
2.29.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 8/8] loop: allow user to set the queue depth
  2021-09-21  9:21 [PATCH 0/8] loop: small clenaup Chaitanya Kulkarni
                   ` (6 preceding siblings ...)
  2021-09-21  9:21 ` [PATCH 7/8] loop: remove extra variable in lo_req_flush Chaitanya Kulkarni
@ 2021-09-21  9:21 ` Chaitanya Kulkarni
  2021-09-21 13:38   ` Himanshu Madhani
  7 siblings, 1 reply; 18+ messages in thread
From: Chaitanya Kulkarni @ 2021-09-21  9:21 UTC (permalink / raw)
  To: linux-block; +Cc: axboe, Chaitanya Kulkarni

From: Chaitanya Kulkarni <kch@nvidia.com>

Instead of hardcoding queue depth allow user to set the hw queue depth
using module parameter. Set default value to 128 to retain the existing
behavior.

Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
---
 drivers/block/loop.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 6478d3b0dd2a..aeba72b5dd2d 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -2096,6 +2096,9 @@ module_param(max_loop, int, 0444);
 MODULE_PARM_DESC(max_loop, "Maximum number of loop devices");
 module_param(max_part, int, 0444);
 MODULE_PARM_DESC(max_part, "Maximum number of partitions per loop device");
+static int hw_queue_depth = 128;
+module_param_named(hw_queue_depth, hw_queue_depth, int, 0444);
+MODULE_PARM_DESC(hw_queue_depth, "Queue depth for each hardware queue. Default: 128");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS_BLOCKDEV_MAJOR(LOOP_MAJOR);
 
@@ -2328,7 +2331,7 @@ static int loop_add(int i)
 	err = -ENOMEM;
 	lo->tag_set.ops = &loop_mq_ops;
 	lo->tag_set.nr_hw_queues = 1;
-	lo->tag_set.queue_depth = 128;
+	lo->tag_set.queue_depth = hw_queue_depth;
 	lo->tag_set.numa_node = NUMA_NO_NODE;
 	lo->tag_set.cmd_size = sizeof(struct loop_cmd);
 	lo->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_STACKING |
-- 
2.29.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/8] loop: use sysfs_emit() in the sysfs offset show
  2021-09-21  9:21 ` [PATCH 1/8] loop: use sysfs_emit() in the sysfs offset show Chaitanya Kulkarni
@ 2021-09-21 13:33   ` Himanshu Madhani
  0 siblings, 0 replies; 18+ messages in thread
From: Himanshu Madhani @ 2021-09-21 13:33 UTC (permalink / raw)
  To: Chaitanya Kulkarni; +Cc: linux-block, Jens Axboe, Chaitanya Kulkarni



> On Sep 21, 2021, at 4:21 AM, Chaitanya Kulkarni <chaitanyak@nvidia.com> wrote:
> 
> From: Chaitanya Kulkarni <kch@nvidia.com>
> 
> Output defects can exist in sysfs content using sprintf and snprintf.
> 

Small nit.. I would remove above line from patch 1 - 5. 

Below commit message describes it better.
 

> sprintf does not know the PAGE_SIZE maximum of the temporary buffer
> used for outputting sysfs content and it's possible to overrun the
> PAGE_SIZE buffer length.
> 
> Use a generic sysfs_emit function that knows that the size of the

Also in above line, I would remove second “that” (same for patches 1 - 5)

> temporary buffer and ensures that no overrun is done for offset
> attribute.
> 
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> ---
> drivers/block/loop.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index 7bf4686af774..e37444977ae6 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -856,7 +856,7 @@ static ssize_t loop_attr_backing_file_show(struct loop_device *lo, char *buf)
> 
> static ssize_t loop_attr_offset_show(struct loop_device *lo, char *buf)
> {
> -	return sprintf(buf, "%llu\n", (unsigned long long)lo->lo_offset);
> +	return sysfs_emit(buf, "%llu\n", (unsigned long long)lo->lo_offset);
> }
> 
> static ssize_t loop_attr_sizelimit_show(struct loop_device *lo, char *buf)
> -- 
> 2.29.0
> 

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>

--
Himanshu Madhani	 Oracle Linux Engineering


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 2/8] loop: use sysfs_emit() in the sysfs sizelimit show
  2021-09-21  9:21 ` [PATCH 2/8] loop: use sysfs_emit() in the sysfs sizelimit show Chaitanya Kulkarni
@ 2021-09-21 13:35   ` Himanshu Madhani
  0 siblings, 0 replies; 18+ messages in thread
From: Himanshu Madhani @ 2021-09-21 13:35 UTC (permalink / raw)
  To: Chaitanya Kulkarni; +Cc: linux-block, axboe, Chaitanya Kulkarni



> On Sep 21, 2021, at 4:21 AM, Chaitanya Kulkarni <chaitanyak@nvidia.com> wrote:
> 
> From: Chaitanya Kulkarni <kch@nvidia.com>
> 
> Output defects can exist in sysfs content using sprintf and snprintf.
> 
> sprintf does not know the PAGE_SIZE maximum of the temporary buffer
> used for outputting sysfs content and it's possible to overrun the
> PAGE_SIZE buffer length.
> 
> Use a generic sysfs_emit function that knows that the size of the
> temporary buffer and ensures that no overrun is done for sizelimit
> attribute.
> 
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> ---
> drivers/block/loop.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index e37444977ae6..ec1329afc154 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -861,7 +861,7 @@ static ssize_t loop_attr_offset_show(struct loop_device *lo, char *buf)
> 
> static ssize_t loop_attr_sizelimit_show(struct loop_device *lo, char *buf)
> {
> -	return sprintf(buf, "%llu\n", (unsigned long long)lo->lo_sizelimit);
> +	return sysfs_emit(buf, "%llu\n", (unsigned long long)lo->lo_sizelimit);
> }
> 
> static ssize_t loop_attr_autoclear_show(struct loop_device *lo, char *buf)
> -- 
> 2.29.0
> 

After fixing small nits noted in patch 1 you can add 

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>

--
Himanshu Madhani	 Oracle Linux Engineering


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 3/8] loop: use sysfs_emit() in the sysfs autoclear show
  2021-09-21  9:21 ` [PATCH 3/8] loop: use sysfs_emit() in the sysfs autoclear show Chaitanya Kulkarni
@ 2021-09-21 13:35   ` Himanshu Madhani
  0 siblings, 0 replies; 18+ messages in thread
From: Himanshu Madhani @ 2021-09-21 13:35 UTC (permalink / raw)
  To: Chaitanya Kulkarni; +Cc: linux-block, axboe, Chaitanya Kulkarni



> On Sep 21, 2021, at 4:21 AM, Chaitanya Kulkarni <chaitanyak@nvidia.com> wrote:
> 
> From: Chaitanya Kulkarni <kch@nvidia.com>
> 
> Output defects can exist in sysfs content using sprintf and snprintf.
> 
> sprintf does not know the PAGE_SIZE maximum of the temporary buffer
> used for outputting sysfs content and it's possible to overrun the
> PAGE_SIZE buffer length.
> 
> Use a generic sysfs_emit function that knows that the size of the
> temporary buffer and ensures that no overrun is done for autoclear
> attribute.
> 
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> ---
> drivers/block/loop.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index ec1329afc154..fd935b788c53 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -868,7 +868,7 @@ static ssize_t loop_attr_autoclear_show(struct loop_device *lo, char *buf)
> {
> 	int autoclear = (lo->lo_flags & LO_FLAGS_AUTOCLEAR);
> 
> -	return sprintf(buf, "%s\n", autoclear ? "1" : "0");
> +	return sysfs_emit(buf, "%s\n", autoclear ? "1" : "0");
> }
> 
> static ssize_t loop_attr_partscan_show(struct loop_device *lo, char *buf)
> -- 
> 2.29.0
> 

After fixing small nits noted in patch 1 you can add 

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>

--
Himanshu Madhani	 Oracle Linux Engineering


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 4/8] loop: use sysfs_emit() in the sysfs partscan show
  2021-09-21  9:21 ` [PATCH 4/8] loop: use sysfs_emit() in the sysfs partscan show Chaitanya Kulkarni
@ 2021-09-21 13:35   ` Himanshu Madhani
  0 siblings, 0 replies; 18+ messages in thread
From: Himanshu Madhani @ 2021-09-21 13:35 UTC (permalink / raw)
  To: Chaitanya Kulkarni; +Cc: linux-block, axboe, Chaitanya Kulkarni



> On Sep 21, 2021, at 4:21 AM, Chaitanya Kulkarni <chaitanyak@nvidia.com> wrote:
> 
> From: Chaitanya Kulkarni <kch@nvidia.com>
> 
> Output defects can exist in sysfs content using sprintf and snprintf.
> 
> sprintf does not know the PAGE_SIZE maximum of the temporary buffer
> used for outputting sysfs content and it's possible to overrun the
> PAGE_SIZE buffer length.
> 
> Use a generic sysfs_emit function that knows that the size of the
> temporary buffer and ensures that no overrun is done for partscan
> attribute.
> 
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> ---
> drivers/block/loop.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index fd935b788c53..63f64341c19c 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -875,7 +875,7 @@ static ssize_t loop_attr_partscan_show(struct loop_device *lo, char *buf)
> {
> 	int partscan = (lo->lo_flags & LO_FLAGS_PARTSCAN);
> 
> -	return sprintf(buf, "%s\n", partscan ? "1" : "0");
> +	return sysfs_emit(buf, "%s\n", partscan ? "1" : "0");
> }
> 
> static ssize_t loop_attr_dio_show(struct loop_device *lo, char *buf)
> -- 
> 2.29.0
> 

After fixing small nits noted in patch 1 you can add 

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>

--
Himanshu Madhani	 Oracle Linux Engineering


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 5/8] loop: use sysfs_emit() in the sysfs dio show
  2021-09-21  9:21 ` [PATCH 5/8] loop: use sysfs_emit() in the sysfs dio show Chaitanya Kulkarni
@ 2021-09-21 13:36   ` Himanshu Madhani
  0 siblings, 0 replies; 18+ messages in thread
From: Himanshu Madhani @ 2021-09-21 13:36 UTC (permalink / raw)
  To: Chaitanya Kulkarni; +Cc: linux-block, axboe, Chaitanya Kulkarni



> On Sep 21, 2021, at 4:21 AM, Chaitanya Kulkarni <chaitanyak@nvidia.com> wrote:
> 
> From: Chaitanya Kulkarni <kch@nvidia.com>
> 
> Output defects can exist in sysfs content using sprintf and snprintf.
> 
> sprintf does not know the PAGE_SIZE maximum of the temporary buffer
> used for outputting sysfs content and it's possible to overrun the
> PAGE_SIZE buffer length.
> 
> Use a generic sysfs_emit function that knows that the size of the
> temporary buffer and ensures that no overrun is done for dio
> attribute.
> 
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> ---
> drivers/block/loop.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index 63f64341c19c..fedb8d63b4c6 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -882,7 +882,7 @@ static ssize_t loop_attr_dio_show(struct loop_device *lo, char *buf)
> {
> 	int dio = (lo->lo_flags & LO_FLAGS_DIRECT_IO);
> 
> -	return sprintf(buf, "%s\n", dio ? "1" : "0");
> +	return sysfs_emit(buf, "%s\n", dio ? "1" : "0");
> }
> 
> LOOP_ATTR_RO(backing_file);
> -- 
> 2.29.0
> 

After fixing small nits noted in patch 1 you can add 

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
--
Himanshu Madhani	 Oracle Linux Engineering


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 6/8] loop: remove extra variable in lo_fallocate()
  2021-09-21  9:21 ` [PATCH 6/8] loop: remove extra variable in lo_fallocate() Chaitanya Kulkarni
@ 2021-09-21 13:36   ` Himanshu Madhani
  0 siblings, 0 replies; 18+ messages in thread
From: Himanshu Madhani @ 2021-09-21 13:36 UTC (permalink / raw)
  To: Chaitanya Kulkarni; +Cc: linux-block, axboe, Chaitanya Kulkarni



> On Sep 21, 2021, at 4:21 AM, Chaitanya Kulkarni <chaitanyak@nvidia.com> wrote:
> 
> From: Chaitanya Kulkarni <kch@nvidia.com>
> 
> The local variable q is used to pass it to the blk_queue_discard(). We
> can get away with using lo->lo_queue instead of storing in a local
> variable which is not used anywhere else.
> 
> No functional change in this patch.
> 
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> ---
> drivers/block/loop.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index fedb8d63b4c6..51c42788731a 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -480,12 +480,11 @@ static int lo_fallocate(struct loop_device *lo, struct request *rq, loff_t pos,
> 	 * information.
> 	 */
> 	struct file *file = lo->lo_backing_file;
> -	struct request_queue *q = lo->lo_queue;
> 	int ret;
> 
> 	mode |= FALLOC_FL_KEEP_SIZE;
> 
> -	if (!blk_queue_discard(q)) {
> +	if (!blk_queue_discard(lo->lo_queue)) {
> 		ret = -EOPNOTSUPP;
> 		goto out;
> 	}
> -- 
> 2.29.0
> 

Looks good.

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
--
Himanshu Madhani	 Oracle Linux Engineering


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 7/8] loop: remove extra variable in lo_req_flush
  2021-09-21  9:21 ` [PATCH 7/8] loop: remove extra variable in lo_req_flush Chaitanya Kulkarni
@ 2021-09-21 13:37   ` Himanshu Madhani
  0 siblings, 0 replies; 18+ messages in thread
From: Himanshu Madhani @ 2021-09-21 13:37 UTC (permalink / raw)
  To: Chaitanya Kulkarni; +Cc: linux-block, axboe, Chaitanya Kulkarni



> On Sep 21, 2021, at 4:21 AM, Chaitanya Kulkarni <chaitanyak@nvidia.com> wrote:
> 
> From: Chaitanya Kulkarni <kch@nvidia.com>
> 
> The local variable file is used to pass it to the vfs_fsync(). We can
> get away with using lo->lo_backing_file instead of storing in a local
> variable which is not used anywhere else.
> 
> No functional change in this patch.
> 
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> ---
> drivers/block/loop.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index 51c42788731a..6478d3b0dd2a 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -498,8 +498,7 @@ static int lo_fallocate(struct loop_device *lo, struct request *rq, loff_t pos,
> 
> static int lo_req_flush(struct loop_device *lo, struct request *rq)
> {
> -	struct file *file = lo->lo_backing_file;
> -	int ret = vfs_fsync(file, 0);
> +	int ret = vfs_fsync(lo->lo_backing_file, 0);
> 	if (unlikely(ret && ret != -EINVAL))
> 		ret = -EIO;
> 
> -- 
> 2.29.0
> 

Looks Good.

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>

--
Himanshu Madhani	 Oracle Linux Engineering


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 8/8] loop: allow user to set the queue depth
  2021-09-21  9:21 ` [PATCH 8/8] loop: allow user to set the queue depth Chaitanya Kulkarni
@ 2021-09-21 13:38   ` Himanshu Madhani
  0 siblings, 0 replies; 18+ messages in thread
From: Himanshu Madhani @ 2021-09-21 13:38 UTC (permalink / raw)
  To: Chaitanya Kulkarni; +Cc: linux-block, Jens Axboe, Chaitanya Kulkarni



> On Sep 21, 2021, at 4:21 AM, Chaitanya Kulkarni <chaitanyak@nvidia.com> wrote:
> 
> From: Chaitanya Kulkarni <kch@nvidia.com>
> 
> Instead of hardcoding queue depth allow user to set the hw queue depth
> using module parameter. Set default value to 128 to retain the existing
> behavior.
> 
> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
> ---
> drivers/block/loop.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index 6478d3b0dd2a..aeba72b5dd2d 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -2096,6 +2096,9 @@ module_param(max_loop, int, 0444);
> MODULE_PARM_DESC(max_loop, "Maximum number of loop devices");
> module_param(max_part, int, 0444);
> MODULE_PARM_DESC(max_part, "Maximum number of partitions per loop device");
> +static int hw_queue_depth = 128;
> +module_param_named(hw_queue_depth, hw_queue_depth, int, 0444);
> +MODULE_PARM_DESC(hw_queue_depth, "Queue depth for each hardware queue. Default: 128");
> MODULE_LICENSE("GPL");
> MODULE_ALIAS_BLOCKDEV_MAJOR(LOOP_MAJOR);
> 
> @@ -2328,7 +2331,7 @@ static int loop_add(int i)
> 	err = -ENOMEM;
> 	lo->tag_set.ops = &loop_mq_ops;
> 	lo->tag_set.nr_hw_queues = 1;
> -	lo->tag_set.queue_depth = 128;
> +	lo->tag_set.queue_depth = hw_queue_depth;
> 	lo->tag_set.numa_node = NUMA_NO_NODE;
> 	lo->tag_set.cmd_size = sizeof(struct loop_cmd);
> 	lo->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_STACKING |
> -- 
> 2.29.0
> 

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>

--
Himanshu Madhani	 Oracle Linux Engineering


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 8/8] loop: allow user to set the queue depth
  2022-02-14 10:01 [PATCH 0/8] loop: cleanup and few improvements Chaitanya Kulkarni
@ 2022-02-14 10:01 ` Chaitanya Kulkarni
  0 siblings, 0 replies; 18+ messages in thread
From: Chaitanya Kulkarni @ 2022-02-14 10:01 UTC (permalink / raw)
  To: linux-block; +Cc: axboe, Chaitanya Kulkarni, Himanshu Madhani

Instead of hardcoding queue depth allow user to set the hw queue depth
using module parameter. Set default value to 128 to retain the existing
behavior.

Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
---
 drivers/block/loop.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 18b30a56bfc4..fd2184d63c11 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -1785,6 +1785,9 @@ module_param(max_loop, int, 0444);
 MODULE_PARM_DESC(max_loop, "Maximum number of loop devices");
 module_param(max_part, int, 0444);
 MODULE_PARM_DESC(max_part, "Maximum number of partitions per loop device");
+static int hw_queue_depth = 128;
+module_param_named(hw_queue_depth, hw_queue_depth, int, 0444);
+MODULE_PARM_DESC(hw_queue_depth, "Queue depth for each hardware queue. Default: 128");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS_BLOCKDEV_MAJOR(LOOP_MAJOR);
 
@@ -1979,7 +1982,7 @@ static int loop_add(int i)
 
 	lo->tag_set.ops = &loop_mq_ops;
 	lo->tag_set.nr_hw_queues = 1;
-	lo->tag_set.queue_depth = 128;
+	lo->tag_set.queue_depth = hw_queue_depth;
 	lo->tag_set.numa_node = NUMA_NO_NODE;
 	lo->tag_set.cmd_size = sizeof(struct loop_cmd);
 	lo->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_STACKING |
-- 
2.29.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2022-02-14 10:37 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-21  9:21 [PATCH 0/8] loop: small clenaup Chaitanya Kulkarni
2021-09-21  9:21 ` [PATCH 1/8] loop: use sysfs_emit() in the sysfs offset show Chaitanya Kulkarni
2021-09-21 13:33   ` Himanshu Madhani
2021-09-21  9:21 ` [PATCH 2/8] loop: use sysfs_emit() in the sysfs sizelimit show Chaitanya Kulkarni
2021-09-21 13:35   ` Himanshu Madhani
2021-09-21  9:21 ` [PATCH 3/8] loop: use sysfs_emit() in the sysfs autoclear show Chaitanya Kulkarni
2021-09-21 13:35   ` Himanshu Madhani
2021-09-21  9:21 ` [PATCH 4/8] loop: use sysfs_emit() in the sysfs partscan show Chaitanya Kulkarni
2021-09-21 13:35   ` Himanshu Madhani
2021-09-21  9:21 ` [PATCH 5/8] loop: use sysfs_emit() in the sysfs dio show Chaitanya Kulkarni
2021-09-21 13:36   ` Himanshu Madhani
2021-09-21  9:21 ` [PATCH 6/8] loop: remove extra variable in lo_fallocate() Chaitanya Kulkarni
2021-09-21 13:36   ` Himanshu Madhani
2021-09-21  9:21 ` [PATCH 7/8] loop: remove extra variable in lo_req_flush Chaitanya Kulkarni
2021-09-21 13:37   ` Himanshu Madhani
2021-09-21  9:21 ` [PATCH 8/8] loop: allow user to set the queue depth Chaitanya Kulkarni
2021-09-21 13:38   ` Himanshu Madhani
2022-02-14 10:01 [PATCH 0/8] loop: cleanup and few improvements Chaitanya Kulkarni
2022-02-14 10:01 ` [PATCH 8/8] loop: allow user to set the queue depth Chaitanya Kulkarni

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.