On Mon, Jul 02, 2012 at 05:39:53PM +1000, NeilBrown wrote:
> On Mon, 2 Jul 2012 11:16:26 +0800 Shaohua Li <shli@xxxxxxxxxx> wrote:
>
>
> > > Then I could see what is being added and what is being removed all in the one
> > > patch and I can be sure that they balance.
> >
> > reworked the patch 3-5 to two patches as you suggested, and sent to you. please check.
>
> Thanks. That's looking really good.
>
> However I think we can do better. I've been looking more closely at the code
> and I think that the only things that we need stripe_lock to protect are
> ->toread and ->towrite, together with the following bios. e.g.
> ->toread->bi_next etc.
>
> ->read and ->written don't need stripe_lock protection, as they are only
> manipulated by the handle_stripe state machine which uses STRIPE_ACTIVE
> and refcounts for exclusion.
>
> So add_stripe_bio need to take the lock while adding a bio to the
> ->toread and ->towrite lists, and ops_run_biodrain() and ops_run_biofill
> need to take the lock while the move the list from ->to{read,write} to
> ->{read,written}. But we don't need it anywhere else. e.g. analyse_stripe
> shouldn't need the lock at all. Any change that could happen during the loop
> could equally happen after the lock was released so we don't lose by not
> having the lock.
Looks reasonable.
> There is another current user of the lock, but I think that should be
> discarded as a false optimisation.
> We currently try to optimise out extra calls to bitmap_startwrite and
> bitmap_endwrite when we see back-to-back writes to the one stripe. However I
> suspect that is extremely unlikely and it just imposes and pointless need for
> synchronisation in raid5.
>
> We just simply call bitmap_startwrite whenever ->towrite changes from NULL to
> non-NULL, and call bitmap_endwrite whenever we clear ->written, reguardless
> what value ->towrite now has.
Yep, the chance write to the same stripe should be very low.
I'll try in my stress test, if no failure, I'll post the patches.
Thanks,
Shaohua
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[ATA RAID]
[Linux SCSI Target Infrastructure]
[Managing RAID on Linux]
[Linux IDE]
[Linux SCSI]
[Linux Hams]
[Device-Mapper]
[Kernel]
[Linux Books]
[Linux Admin]
[Linux Net]
[GFS]
[RPM]
[git]
[Photos]
[Yosemite Photos]
[Yosemite News]
[AMD 64]
[Linux Networking]