Re: fr1-2.16 patch for 2.6.10 kernel
[email protected] (Peter T. Breuer)
| Newsgroups | gmane.linux.enbd.general |
|---|---|
| Message-ID | <[email protected]> |
In article <[email protected]> you wrote: > > You might want to try the obvious changes (- 1 -> - 2, twice). > > Ok, It works, Although not really clean? Well, if you can figure out the event stamping algorithm, you are a better man than I! If it only shows up on preempt and/or smp machines, I'd suspect a race between tamping and ejecting from the array.. Heck - it may even be a race anyway. > > > > Wel, that certainly doesn't show it. I wanted to know if the > > bitmap->stop(bitmap) call makes any difference. If it doesn't, you can > > try > > > > remove_bitmap(conf); create_bitmap(conf); > > Changed it too, but remanence is still there. Isn't that imposible? Urrrrrrrr ... maybe the bitmap_destr routine needs to _actually_ destroy the pages (hangs head in shame - I don't turn the bitmap off, ever ..). Hang on and I'll vamp the "remove" bit of the bitmap code. You need an extra "print stats" routine anyway. > It's strange, as normally the bitmap is cleared for any successful write > during resync, but it seems that it remains untouched from a cycle to > another one. Maybe a cache effect ? No - it'll be something more subtle or more obvious. It's good that it's constant. I should be able to reproduce it. > Anyway, normally it's here : > > > (raid1.c) > > * on writes, clear the bitmap if all disks were written > */ > int uptodate = test_bit(R1BIO_Uptodate, &r1_bio->state); > conf_t *conf = mddev_to_conf(r1_bio->mddev); > > /* if we should mark the bitmap clean, do so */ > if (uptodate && bio_data_dir(bio) == WRITE > && r1_bio->nonoperational <= 0) { > struct bitmap * bitmap = conf->bitmap; > if (bitmap && bitmap->active(bitmap)) { > bitmap->clearbits(bitmap, > bio->bi_sector >> 1, bio->bi_size >> 10); > } > } > > I'm going to add some printks here... OK - but it should show the calls being made! Peter