On Mon, Feb 19, 2007 at 05:15:08AM +0000, Ricardo Correia wrote:
> On Sunday 18 February 2007 01:41, Pawel Jakub Dawidek wrote:
> > I found few places where such situation occurs. I wonder how this got
> > unnoticed with ztest, which fails on me within a few seconds (after I
> > started to use Solaris atomic operations) on assertions. Maybe this
> > only doesn't work when compiled with gcc? Not sure, but most of the time
> > 64bit variables are used properly.
>
> Hi Pawel,
>
> I've been using the Solaris assembly code for the atomic operation since the
> beginning, but lately zfs-fuse has been failing with assertions in that exact
> same piece of code of your patch:
>
> lib/libzpool/build-kernel/arc.c:736: arc_change_state: Assertion
> `new_state->size + to_delta >= new_state->lsize (0x1194000 >= 0x11a8000)`
> failed.
>
> Were you hitting this bug?
I was hitting one of those assertions, not sure which exactly.
> Unfortunately your patch didn't fix this :(
Your numbers looks sane, so you most probably have race somewhere else.
I got impossible values in my assertions.
> I'm having trouble figuring out this problem..
My first guess was that there are many assertions following atomic
operations, like the one you're having problem with:
atomic_add_64(&new_state->arcs_lsize, to_delta);
ASSERT3U(new_state->arcs_size + to_delta, >=, new_state->arcs_lsize);
I thought that there could a race between modify and check, but those
assertions are race-free AFAICT.
--
Pawel Jakub Dawidek http://www.wheel.pl
pjd at FreeBSD.org http://www.FreeBSD.org
FreeBSD committer Am I Evil? Yes, I Am!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
URL:
<http://mail.opensolaris.org/pipermail/zfs-code/attachments/20070219/900f6949/attachment.bin>