[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Re: de-BKLing blkfront



On Wed, 2010-07-21 at 17:39 -0400, Jeremy Fitzhardinge wrote:
> On 07/21/2010 02:12 PM, Daniel Stodden wrote:
> > On Wed, 2010-07-21 at 15:49 -0400, Jeremy Fitzhardinge wrote:
> >   
> >> When I was preparing the latest set of blkfront patches to send upstream
> >> to Jens Axboe, he pointed out there were conflicts with what he
> >> currently has queued.
> >>
> >> It turns out the conflict was from pushing the BKL (lock/unlock_kernel)
> >> into the open and release functions.  I did the merge keeping them
> >> around all the new stuff you added to those functions, but I wonder if
> >> its actually necessary.  Do we rely on open/release being globally
> >> serialized in there?
> >>
> >> I've pushed what I have into the upstream/blkfront branch in xen.git.
> >>     
> > Whatever it was, a BLK presumably fixed it.
> >   
> 
> There's an ongoing project to remove the BKL; part of that is to remove
> implicit use of the BKL from the core kernel and push uses down to
> drivers which need it.  That basically means mechanically adding
> lock_kernel/unlock_kernel pairs to driver functions as they're removed
> from the core kernel.  blkfront got hit with that at some point (haven't
> identified precisely where), so we have the option to remove those
> lock/unlocks if they're not necessary.

Ah, understood. But for a while I used to dig through bdev open/release
stuff quite regularly. I never was aware of any potential big lock on
that path to push down.

Do you think it's worth to look into the lock usage now removed in more
detail? Would take a hint regarding which code was affected.

> > Anyway, it should not be necessary any more.
> >
> > Next I made the common mistake of looking into my code again, and
> > immediately found I would send an unlucky opener transiently spinning in
> > blkdev_get. Sometimes I wonder what I'm thinking.
> >   
> 
> What's the effect of that?

Uhm, false alarm. Better just ignore me.

I stuck that ERESTARTSYS stuff into blkif_open. It's not strictly
needed, but looked like a good idea. I picked it up from the device
mapper code.

It's telling the block layer to retry if it managed to get a ref on a
disk which just happened to be del_gendisk'd on a different thread. So
it will retry and either succeed with a new disk, or fail right on the
next attempt.

I would have bet there would be a case where blkfront clears
disk->private_data before removing the disk. But apparently not.
Otherwise a thread hitting that phase would peg the CPU until the
removal succeeded elsewhere. 

Sorry for the noise.

> > Hold on for a patch to both.

So rather not. As far as I can tell, feel free to just drop the bkl
code.

> Thanks.  BTW, did you get a change to look into those barrier comments?

Nope, sorry. In fact I dropped that one. Getting more urgent?

Daniel


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.