Re: Re: question about striped_read

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

 



[snip]
>I don't think the later was_short can handle the hole case. For the hole case,
>we should try reading next strip object instead of return. how about
>below patch.
>
Hi Yan,
	i uesed this demo to test hole case.
dd if=/dev/urandom bs=4096 count=2 of=file_with_holes
dd if=/dev/urandom bs=4096 seek=7 count=2 of=file_with_holes

dd if=file_with_holes of=/dev/null bs=16k count=1 iflag=direct
Using the dynamic_debug in striped_read,  the message are:
>[ 8743.663499] ceph:           file.c:350  : striped_read 0~16384 (read 0) got 16384
>[ 8743.663502] ceph:           file.c:390  : striped_read returns 16384
>From the messages, we can see it can't hit the short-read.
For the ceph-file-hole, how does the ceph handle?
Or am i missing something?

Thanks!
Jianpeng Ma

>Regards
>Yan, Zheng
>---
>diff --git a/fs/ceph/file.c b/fs/ceph/file.c
>index 271a346..6ca2921 100644
>--- a/fs/ceph/file.c
>+++ b/fs/ceph/file.c
>@@ -350,16 +350,17 @@ more:
> 	     ret, hit_stripe ? " HITSTRIPE" : "", was_short ? " SHORT" : "");
>
> 	if (ret > 0) {
>-		int didpages = (page_align + ret) >> PAGE_CACHE_SHIFT;
>+		int didpages = (page_align + this_len) >> PAGE_CACHE_SHIFT;
>
>-		if (read < pos - off) {
>-			dout(" zero gap %llu to %llu\n", off + read, pos);
>-			ceph_zero_page_vector_range(page_align + read,
>-						    pos - off - read, pages);
>+		if (was_short) {
>+			dout(" zero gap %llu to %llu\n",
>+			     pos + ret, pos + this_len);
>+			ceph_zero_page_vector_range(page_align + ret,
>+						    this_len - ret, page_pos);
> 		}
>-		pos += ret;
>+		pos += this_len;
> 		read = pos - off;
>-		left -= ret;
>+		left -= this_len;
> 		page_pos += didpages;
> 		pages_left -= didpages;
>
?韬{.n?????%??檩??w?{.n????u朕?Ф?塄}?财??j:+v??????2??璀??摺?囤??z夸z罐?+?????w棹f





[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux