linux-block.vger.kernel.org archive mirror
 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; 17+ 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] 17+ 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; 17+ 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	[flat|nested] 17+ 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; 17+ 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	[flat|nested] 17+ 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; 17+ 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	[flat|nested] 17+ 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; 17+ 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	[flat|nested] 17+ 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; 17+ 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	[flat|nested] 17+ 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; 17+ 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	[flat|nested] 17+ 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; 17+ 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	[flat|nested] 17+ 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; 17+ 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	[flat|nested] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ 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; 17+ 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] 17+ messages in thread

end of thread, other threads:[~2021-09-21 13:38 UTC | newest]

Thread overview: 17+ 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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).