diff mbox

btrfs scrub: don't coalesce pages that are logically discontiguous

Message ID 1306326170-28208-1-git-send-email-sensille@gmx.net (mailing list archive)
State New, archived
Headers show

Commit Message

Arne Jansen May 25, 2011, 12:22 p.m. UTC
scrub_page collects several pages into one bio as long as they are physically
contiguous. As we only save one logical address for the whole bio, don't
collect pages that are physically contiguous but logically discontiguous.

Signed-off-by: Arne Jansen <sensille@gmx.net>
---
 fs/btrfs/scrub.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

Comments

Arne Jansen May 25, 2011, 12:31 p.m. UTC | #1
On 25.05.2011 14:22, Arne Jansen wrote:
> scrub_page collects several pages into one bio as long as they are physically
> contiguous. As we only save one logical address for the whole bio, don't
> collect pages that are physically contiguous but logically discontiguous.

This patch applies to the integration-test branch. I also pushed it
into my for-chris branch.

-Arne

> 
> Signed-off-by: Arne Jansen <sensille@gmx.net>
> ---
>  fs/btrfs/scrub.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
> 
> diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
> index a31f2a9..21ee93c 100644
> --- a/fs/btrfs/scrub.c
> +++ b/fs/btrfs/scrub.c
> @@ -631,7 +631,8 @@ again:
>  	if (sbio->count == 0) {
>  		sbio->physical = physical;
>  		sbio->logical = logical;
> -	} else if (sbio->physical + sbio->count * PAGE_SIZE != physical) {
> +	} else if (sbio->physical + sbio->count * PAGE_SIZE != physical ||
> +		   sbio->logical + sbio->count * PAGE_SIZE != logical) {
>  		scrub_submit(sdev);
>  		goto again;
>  	}

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index a31f2a9..21ee93c 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -631,7 +631,8 @@  again:
 	if (sbio->count == 0) {
 		sbio->physical = physical;
 		sbio->logical = logical;
-	} else if (sbio->physical + sbio->count * PAGE_SIZE != physical) {
+	} else if (sbio->physical + sbio->count * PAGE_SIZE != physical ||
+		   sbio->logical + sbio->count * PAGE_SIZE != logical) {
 		scrub_submit(sdev);
 		goto again;
 	}