Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 185833
b: refs/heads/master
c: 22ddc55
h: refs/heads/master
i:
  185831: abf5e84
v: v3
  • Loading branch information
Boaz Harrosh committed Feb 28, 2010
1 parent 5700ae4 commit 7bfb19c
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 518f167a37b3c53f3cf44d27800455ca24e920f6
refs/heads/master: 22ddc556380cf5645c52292b6d980766646eb864
36 changes: 30 additions & 6 deletions trunk/fs/exofs/ios.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,21 @@ static int exofs_io_execute(struct exofs_io_state *ios)
return ret;
}

static void _clear_bio(struct bio *bio)
{
struct bio_vec *bv;
unsigned i;

__bio_for_each_segment(bv, bio, i, 0) {
unsigned this_count = bv->bv_len;

if (likely(PAGE_SIZE == this_count))
clear_highpage(bv->bv_page);
else
zero_user(bv->bv_page, bv->bv_offset, this_count);
}
}

int exofs_check_io(struct exofs_io_state *ios, u64 *resid)
{
enum osd_err_priority acumulated_osd_err = 0;
Expand All @@ -181,16 +196,25 @@ int exofs_check_io(struct exofs_io_state *ios, u64 *resid)

for (i = 0; i < ios->numdevs; i++) {
struct osd_sense_info osi;
int ret = osd_req_decode_sense(ios->per_dev[i].or, &osi);
struct osd_request *or = ios->per_dev[i].or;
int ret;

if (unlikely(!or))
continue;

ret = osd_req_decode_sense(or, &osi);
if (likely(!ret))
continue;

if (unlikely(ret == -EFAULT)) {
EXOFS_DBGMSG("%s: EFAULT Need page clear\n", __func__);
/*FIXME: All the pages in this device range should:
* clear_highpage(page);
*/
if (OSD_ERR_PRI_CLEAR_PAGES == osi.osd_err_pri) {
/* start read offset passed endof file */
_clear_bio(ios->per_dev[i].bio);
EXOFS_DBGMSG("start read offset passed end of file "
"offset=0x%llx, length=0x%llx\n",
_LLU(ios->offset),
_LLU(ios->length));

continue; /* we recovered */
}

if (osi.osd_err_pri >= acumulated_osd_err) {
Expand Down

0 comments on commit 7bfb19c

Please sign in to comment.