Note: "permalinks" may not be as permanent as we would like,
direct links of old sources may well be a few messages off.
On Sat, Nov 13, 2010 at 02:24:05PM +0000, Stefan Hajnoczi wrote: > Does this fix the issue? Compiled but not tested. > > Subject: [PATCH] drbd: Use irqsave/irqrestore for req_mod() in drbd_endio_pri() > > It is not safe to call req_mod() from drbd_endio_pri() since it uses > spin_lock_irq()/spin_unlock_irq(). Instead use irqsave/irqrestore and > call __req_mod() so that local irq mode is preserved. Right, thanks for your work. See also my other post. I previously only "fixed" req_mod(), wondering why that would show up only now. But then found the other commit that broke it, back in August, which contained a chunk that basically looks like your below patch, reversed :( So it's fixed in our internal git already, the fix should show up in public git early next week. > Signed-off-by: Stefan Hajnoczi <stefanha at linux.vnet.ibm.com> > --- > drivers/block/drbd/drbd_worker.c | 9 ++++++++- > 1 files changed, 8 insertions(+), 1 deletions(-) > > diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c > index b0551ba..b136fb8 100644 > --- a/drivers/block/drbd/drbd_worker.c > +++ b/drivers/block/drbd/drbd_worker.c > @@ -197,6 +197,8 @@ void drbd_endio_pri(struct bio *bio, int error) > struct drbd_request *req = bio->bi_private; > struct drbd_conf *mdev = req->mdev; > enum drbd_req_event what; > + struct bio_and_error m; > + unsigned long flags; > int uptodate = bio_flagged(bio, BIO_UPTODATE); > > if (!error && !uptodate) { > @@ -221,7 +223,12 @@ void drbd_endio_pri(struct bio *bio, int error) > bio_put(req->private_bio); > req->private_bio = ERR_PTR(error); > > - req_mod(req, what); > + spin_lock_irqsave(&mdev->req_lock, flags); > + __req_mod(req, what, &m); > + spin_unlock_irqrestore(&mdev->req_lock, flags); > + > + if (m.bio) > + complete_master_bio(mdev, &m); > } > > int w_read_retry_remote(struct drbd_conf *mdev, struct drbd_work *w, int cancel) > -- > 1.7.2.3 > -- : Lars Ellenberg : LINBIT | Your Way to High Availability : DRBD/HA support and consulting http://www.linbit.com DRBD® and LINBIT® are registered trademarks of LINBIT, Austria. __ please don't Cc me, but send to list -- I'm subscribed