while (index <= end_index) {
page = find_get_page(tree->mapping, index);
- BUG_ON(!page);
+ BUG_ON(!page); /* Pages should be in the extent_io_tree */
set_page_writeback(page);
page_cache_release(page);
index++;
goto out_failed;
}
}
- BUG_ON(ret);
+ BUG_ON(ret); /* Only valid values are 0 and -EAGAIN */
/* step three, lock the state bits for the whole range */
lock_extent_bits(tree, delalloc_start, delalloc_end, 0, &cached_state);
/* Writeback already completed */
if (ret == 0)
return 1;
- BUG_ON(ret < 0);
}
if (!uptodate) {
if (ret == 0)
goto error_handled;
}
- BUG_ON(ret < 0);
}
if (uptodate) {
return bio;
}
+/*
+ * Since writes are async, they will only return -ENOMEM.
+ * Reads can return the full range of I/O error conditions.
+ */
static int __must_check submit_one_bio(int rw, struct bio *bio,
int mirror_num, unsigned long bio_flags)
{
bio_add_page(bio, page, page_size, offset) < page_size) {
ret = submit_one_bio(rw, bio, mirror_num,
prev_bio_flags);
- BUG_ON(ret < 0);
+ if (ret < 0)
+ return ret;
bio = NULL;
} else {
return 0;
if (bio_ret)
*bio_ret = bio;
- else {
+ else
ret = submit_one_bio(rw, bio, mirror_num, bio_flags);
- BUG_ON(ret < 0);
- }
return ret;
}
* basic readpage implementation. Locked extent state structs are inserted
* into the tree that are removed when the IO is done (by the end_io
* handlers)
+ * XXX JDM: This needs looking at to ensure proper page locking
*/
static int __extent_read_full_page(struct extent_io_tree *tree,
struct page *page,
end_bio_extent_readpage, mirror_num,
*bio_flags,
this_bio_flag);
+ BUG_ON(ret == -ENOMEM);
nr++;
*bio_flags = this_bio_flag;
}
ret = __extent_read_full_page(tree, page, get_extent, &bio, mirror_num,
&bio_flags);
- if (bio) {
+ if (bio)
ret = submit_one_bio(READ, bio, mirror_num, bio_flags);
- BUG_ON(ret < 0);
- }
return ret;
}
delalloc_end,
&page_started,
&nr_written);
- BUG_ON(ret);
+ /* File system has been set read-only */
+ if (ret) {
+ SetPageError(page);
+ goto done;
+ }
/*
* delalloc_end is already one less than the total
* length, so we don't subtract one from
rw = WRITE_SYNC;
ret = submit_one_bio(rw, epd->bio, 0, 0);
- BUG_ON(ret < 0);
+ BUG_ON(ret < 0); /* -ENOMEM */
epd->bio = NULL;
}
}
page_cache_release(page);
}
BUG_ON(!list_empty(pages));
- if (bio) {
- int ret = submit_one_bio(READ, bio, 0, bio_flags);
- BUG_ON(ret < 0);
- }
+ if (bio)
+ return submit_one_bio(READ, bio, 0, bio_flags);
return 0;
}
if (bio) {
err = submit_one_bio(READ, bio, mirror_num, bio_flags);
- BUG_ON(err < 0);
+ if (err)
+ return err;
}
if (ret || wait != WAIT_COMPLETE)