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

Re: Extended Attributes and Access Control Lists



"Stephen C. Tweedie" wrote:
> 
> Hi,
> 
> On Fri, Nov 02, 2001 at 11:09:03AM -0600, Eric Jarman wrote:
> 
> > Kernel 2.4.13-ac5
> > patches applied:
> > ea and acl versions 0.7.22d
> > sgi kdb version 1.9-2.4.13-ac1 (turned off in tests)
> >
> > The oops doesn't occur on a single processor machine, only on a multiprocessor
> > machine.  Output of ksymoops and kernel config file attached.
> 
> How easy is it to reproduce?
> 
> So far I can't see why this should happen, but if there are deleted
> buffers involved, I can't convinve myself that it's impossible either.
> 
> Andrew, the 2.2 code always took _both_ the journal and buffer locks
> before entering do_get_write_access(), so we knew we had total
> knowledge of the buffer state and there was no other IO going on.
> 
> That was dropped in the 2.4 port: can you think of any reason why we
> shouldn't restore it?

gee, this goes back to before we started the sourceforge tree.
I do remember deciding that the current do_get_write_access()
code makes lock_journal_bh_wait() unnecessary.

We certainly need to defend ourselves from bdflush coming along
and locking the buffer, and locking it here will prevent that.
If we keep it locked until after we've cleaned it and refiled it
on a journal list this should be safe.

But the alternative is to make sure that it's not on BUF_DIRTY
at this time.  I have to assume that this is the current
behaviour of ext3.

I think before we change anything we need a 100% understanding
of exactly what's going on.

How about this: I'll take a look at reproducing Eric's testcase
with tracing enabled and work out what's happening. We can then
make a decision as to whether

1: Calling get_write_access() against a dirty, unjournalled
   buffer is illegal or

2: We need to lock the buffer in do_get_write_access() until
   we've marked it clean.

BTW: yesterday you proposed a solution to the locking problem in
do_get_write_access().  I've lost the email.  Could you please
resend?





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