Re: [RFC] Change locking in block_dev.c:do_open()

Richard Gooch (rgooch@ras.ucalgary.ca)
Thu, 13 Dec 2001 10:24:52 -0700


Alexander Viro writes:
>
>
> On Wed, 12 Dec 2001, David C. Hansen wrote:
>
> > I've been looking at how the BKL is used throughout the kernel. My end
> > goal is to eliminate the BKL, but I don't have any fanciful ideas that I
> > can get rid of it myself, or do it in a short period of time. Right
> > now, I'm looking for interesting BKL uses and examining alternatives.
> >
> > Lately, I've been examining do_open() in block_dev.c. This particular
> > nugget of code uses the BKL for a couple of things. First,
> > get_blkfops() can call request_module(), which requires the BKL.
> > Secondly, there needs to be protection so that the module isn't removed
> > between the get_blkfops() and the __MOD_INC_USE_COUNT(). Lastly, the
> > bd_op->open() calls expect the BKL to be held while they are called. Is
> > this it? Anybody know of more reasons?
>
> Sigh... First of all, the right thing to do is to call
> try_inc_mod_count() _in_ get_blkfops(). No need to reinvent the
> wheel. But real problem with that area is not BKL. It's *!@& damn
> devfs=only mess and code that does direct assignment of ->bd_op
> before calling blkdev_get(). Until it's solved (and the only decent
> way I see is to remove this misfeature) I'd seriously recommend to
> leave the damn thing as is.

Al, I came up with a proposed solution for this race days ago. After
switching to try_inc_mod_count() (based on your first comments), you
haven't responded with whether you still see a problem with this
approach (your first message implied there were multiple problems).

So instead of flaming, please explain where (if) there are remaining
problems in this area.

Regards,

Richard....
Permanent: rgooch@atnf.csiro.au
Current: rgooch@ras.ucalgary.ca
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/