Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 274699
b: refs/heads/master
c: 13db62b
h: refs/heads/master
i:
  274697: 6e2ad4a
  274695: 22e27e5
v: v3
  • Loading branch information
Jan Schmidt committed Sep 29, 2011
1 parent 5dc5e46 commit 87b604c
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 12 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: a542ad1bafc7df9fc16de8a6894b350a4df75572
refs/heads/master: 13db62b7a1e8c64763a93c155091620f85ff8920
37 changes: 26 additions & 11 deletions trunk/fs/btrfs/scrub.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,18 +201,25 @@ struct scrub_dev *scrub_setup_dev(struct btrfs_device *dev)
* recheck_error gets called for every page in the bio, even though only
* one may be bad
*/
static void scrub_recheck_error(struct scrub_bio *sbio, int ix)
static int scrub_recheck_error(struct scrub_bio *sbio, int ix)
{
struct scrub_dev *sdev = sbio->sdev;
u64 sector = (sbio->physical + ix * PAGE_SIZE) >> 9;

if (sbio->err) {
if (scrub_fixup_io(READ, sbio->sdev->dev->bdev,
(sbio->physical + ix * PAGE_SIZE) >> 9,
if (scrub_fixup_io(READ, sbio->sdev->dev->bdev, sector,
sbio->bio->bi_io_vec[ix].bv_page) == 0) {
if (scrub_fixup_check(sbio, ix) == 0)
return;
return 0;
}
}

spin_lock(&sdev->stat_lock);
++sdev->stat.read_errors;
spin_unlock(&sdev->stat_lock);

scrub_fixup(sbio, ix);
return 1;
}

static int scrub_fixup_check(struct scrub_bio *sbio, int ix)
Expand Down Expand Up @@ -382,8 +389,14 @@ static void scrub_checksum(struct btrfs_work *work)
int ret;

if (sbio->err) {
ret = 0;
for (i = 0; i < sbio->count; ++i)
scrub_recheck_error(sbio, i);
ret |= scrub_recheck_error(sbio, i);
if (!ret) {
spin_lock(&sdev->stat_lock);
++sdev->stat.unverified_errors;
spin_unlock(&sdev->stat_lock);
}

sbio->bio->bi_flags &= ~(BIO_POOL_MASK - 1);
sbio->bio->bi_flags |= 1 << BIO_UPTODATE;
Expand All @@ -396,10 +409,6 @@ static void scrub_checksum(struct btrfs_work *work)
bi->bv_offset = 0;
bi->bv_len = PAGE_SIZE;
}

spin_lock(&sdev->stat_lock);
++sdev->stat.read_errors;
spin_unlock(&sdev->stat_lock);
goto out;
}
for (i = 0; i < sbio->count; ++i) {
Expand All @@ -420,8 +429,14 @@ static void scrub_checksum(struct btrfs_work *work)
WARN_ON(1);
}
kunmap_atomic(buffer, KM_USER0);
if (ret)
scrub_recheck_error(sbio, i);
if (ret) {
ret = scrub_recheck_error(sbio, i);
if (!ret) {
spin_lock(&sdev->stat_lock);
++sdev->stat.unverified_errors;
spin_unlock(&sdev->stat_lock);
}
}
}

out:
Expand Down

0 comments on commit 87b604c

Please sign in to comment.