[OpenAFS-devel] Linux 2.6.12 kernel BUG at fs/namei.c:1189
Rainer Toebbicke
rtbimap@pclella.cern.ch
Fri, 20 Jan 2006 17:58:29 +0100
chas williams - CONTRACTOR wrote:
>
> the only objection is that this patch seems to know too much about
> the behavior of the linux kernel. interestingly enough lock_kernel()
> is recursive, and AFS_GLOCK() is not. i imagine this is what keeps
> other filesystems from deadlocking in the same way.
Well, the way afs_put_inode clicks into standard kernel business is
pretty much kernel-specific. It was instructive to try and understand
the difference in Irix, OSF and AIX just to see that things are not
always obvious (and clean).
A relatively kernel-unspecific way would be to queue an event that is
handled "later" by somebody running near top level. The question is a)
how to queue without a lock and b) whether sometimes things must
happen "now" rather than "later". But that sounds like an added
complexity with its own probability of going wrong eventually. A lot
of the AFS client assumes things about the inner working of the kernel
in that area so I wouldn't be too difficult about that (except for the
compare for "kswapd" of course which I admit is extremely poor).
BTW: lock_kernel() is not only "recursive", it also gets dropped and
reacquired when you give up control (e.g. sleep). Its semantics are
quite different from the AFS global lock.
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Rainer Toebbicke
European Laboratory for Particle Physics(CERN) - Geneva, Switzerland
Phone: +41 22 767 8985 Fax: +41 22 767 7155