[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20070613134631.GB13815@localhost.sw.ru>
Date: Wed, 13 Jun 2007 17:46:31 +0400
From: Dmitriy Monakhov <dmonakhov@...ru>
To: linux-kernel@...r.kernel.org
Cc: npiggin@...e.de, mark.fasheh@...cle.com, linux-ext4@...r.kernel.org
Subject: [patch] new aop loop fix
loop.c code itself is not perfect. In fact before Nick's patch
partial write was't possible. Assumption what write chunks are
always page aligned is realy weird ( see "index++" line).
Signed-off-by: Dmitriy Monakhov <dmonakhov@...nvz.org>
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 4bab9b1..8726da5 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -215,7 +215,6 @@ static int do_lo_send_aops(struct loop_device *lo, struct bio_vec *bvec,
int len, ret;
mutex_lock(&mapping->host->i_mutex);
- index = pos >> PAGE_CACHE_SHIFT;
offset = pos & ((pgoff_t)PAGE_CACHE_SIZE - 1);
bv_offs = bvec->bv_offset;
len = bvec->bv_len;
@@ -226,6 +225,7 @@ static int do_lo_send_aops(struct loop_device *lo, struct bio_vec *bvec,
struct page *page;
void *fsdata;
+ index = pos >> PAGE_CACHE_SHIFT;
IV = ((sector_t)index << (PAGE_CACHE_SHIFT - 9))+(offset >> 9);
size = PAGE_CACHE_SIZE - offset;
if (size > len)
@@ -255,7 +255,6 @@ static int do_lo_send_aops(struct loop_device *lo, struct bio_vec *bvec,
bv_offs += copied;
len -= copied;
offset = 0;
- index++;
pos += copied;
}
ret = 0;
>
>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists