projects
/
linux-2.6-block.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
block: Abstract out bvec iterator
[linux-2.6-block.git]
/
fs
/
mpage.c
diff --git
a/fs/mpage.c
b/fs/mpage.c
index 0face1c4d4c6bd4ea33cb60e45b8c7fad8235acf..4979ffa60aaabfd36839adec6feafcb17a876d98 100644
(file)
--- a/
fs/mpage.c
+++ b/
fs/mpage.c
@@
-43,16
+43,14
@@
*/
static void mpage_end_io(struct bio *bio, int err)
{
*/
static void mpage_end_io(struct bio *bio, int err)
{
-
const int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags)
;
-
struct bio_vec *bvec = bio->bi_io_vec + bio->bi_vcnt - 1
;
+
struct bio_vec *bv
;
+
int i
;
-
do
{
- struct page *page = bv
ec
->bv_page;
+
bio_for_each_segment_all(bv, bio, i)
{
+ struct page *page = bv->bv_page;
- if (--bvec >= bio->bi_io_vec)
- prefetchw(&bvec->bv_page->flags);
if (bio_data_dir(bio) == READ) {
if (bio_data_dir(bio) == READ) {
- if (
uptodate
) {
+ if (
!err
) {
SetPageUptodate(page);
} else {
ClearPageUptodate(page);
SetPageUptodate(page);
} else {
ClearPageUptodate(page);
@@
-60,14
+58,15
@@
static void mpage_end_io(struct bio *bio, int err)
}
unlock_page(page);
} else { /* bio_data_dir(bio) == WRITE */
}
unlock_page(page);
} else { /* bio_data_dir(bio) == WRITE */
- if (
!uptodate
) {
+ if (
err
) {
SetPageError(page);
if (page->mapping)
set_bit(AS_EIO, &page->mapping->flags);
}
end_page_writeback(page);
}
SetPageError(page);
if (page->mapping)
set_bit(AS_EIO, &page->mapping->flags);
}
end_page_writeback(page);
}
- } while (bvec >= bio->bi_io_vec);
+ }
+
bio_put(bio);
}
bio_put(bio);
}
@@
-94,7
+93,7
@@
mpage_alloc(struct block_device *bdev,
if (bio) {
bio->bi_bdev = bdev;
if (bio) {
bio->bi_bdev = bdev;
- bio->bi_sector = first_sector;
+ bio->bi_
iter.bi_
sector = first_sector;
}
return bio;
}
}
return bio;
}