ceph: fix bugs about handling short-read for sync read mode.
cephfs . show_layout
>layyout.data_pool: 0
>layout.object_size:
4194304
>layout.stripe_unit:
4194304
>layout.stripe_count: 1
TestA:
>dd if=/dev/urandom of=test bs=1M count=2 oflag=direct
>dd if=/dev/urandom of=test bs=1M count=2 seek=4 oflag=direct
>dd if=test of=/dev/null bs=6M count=1 iflag=direct
The messages from func striped_read are:
ceph: file.c:350 : striped_read 0~
6291456 (read 0) got
2097152 HITSTRIPE SHORT
ceph: file.c:350 : striped_read
2097152~
4194304 (read
2097152) got 0 HITSTRIPE SHORT
ceph: file.c:381 : zero tail
4194304
ceph: file.c:390 : striped_read returns
6291456
The hole of file is from 2M--4M.But actualy it zero the last 4M include
the last 2M area which isn't a hole.
Using this patch, the messages are:
ceph: file.c:350 : striped_read 0~
6291456 (read 0) got
2097152 HITSTRIPE SHORT
ceph: file.c:358 : zero gap
2097152 to
4194304
ceph: file.c:350 : striped_read
4194304~
2097152 (read
4194304) got
2097152
ceph: file.c:384 : striped_read returns
6291456
TestB:
>echo majianpeng > test
>dd if=test of=/dev/null bs=2M count=1 iflag=direct
The messages are:
ceph: file.c:350 : striped_read 0~
6291456 (read 0) got 11 HITSTRIPE SHORT
ceph: file.c:350 : striped_read 11~
6291445 (read 11) got 0 HITSTRIPE SHORT
ceph: file.c:390 : striped_read returns 11
For this case,it did once more striped_read.It's no meaningless.
Using this patch, the message are:
ceph: file.c:350 : striped_read 0~
6291456 (read 0) got 11 HITSTRIPE SHORT
ceph: file.c:384 : striped_read returns 11
Big thanks to Yan Zheng for the patch.
Reviewed-by: Yan, Zheng <zheng.z.yan@intel.com>
Signed-off-by: Jianpeng Ma <majianpeng@gmail.com>