DragonFly BSD
DragonFly bugs List (threaded) for 2010-03
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: panic: assertion: leaf->base.obj_id == ip->obj_id in hammer_ip_delete_range


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 8 Mar 2010 14:57:04 -0800 (PST)

:> 
:>    Definitely worth uploading.
:
:Uploaded as ~y0nean1/crash/{kern,vmcore}.4 on leaf.

    This helps a lot.  I think I see what is going on finally, the other
    fixes have made it more apparent.

    What is happening is that the record deletion updates the mirror_tid
    in the B-Tree recursively going upwards, during which the original
    cursor is unlocked.  The unlocked cursor winds up getting moved to
    a parent (internal) B-Tree node which is fine, but then a new record
    is inserted before the cursor is re-locked.

    Because the cursor got moved to an internal node the new insertion can
    get in between the cursor's position and the original range that was
    being scanned.  The unexpected record then causes the assertion.

    I'll have another patch for you to try in a day or two.  I have several
    solutions in mind but I want to try to find the one that is minimally
    invasive for the release.  Basically either (1) Unlocked cursors which
    have to be moved into a parent node can't track and require a
    relookup.  Or (2) when moving an unlocked cursor into its parent the
    cursor's index in the parent must also be bumped to prevent insertions
    from being able to wiggle their way in.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>



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