[Bug 237269] panic in glabel (g_label_destroy) stop after resizing GPT partition

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Wed Apr 17 03:53:59 UTC 2019


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237269

--- Comment #7 from andrew at tao11.riddles.org.uk ---
I think I have identified the sequence of events:

1. When we resize the partition, it spoils the attached LABEL consumers
(correctly, I think, since those might depend on the partition size);

2. The spoiled LABELs are orphaned, orphaning the DEV geoms that are their sole
consumers;

3. the DEV geoms destruct, detaching from the LABELs and removing the /dev
entries;

4. BEFORE anything significant can happen, DEV re-tastes the now-orphaned LABEL
geoms, getting an ENXIO from trying to open them, but for whatever reason
attaches to them anyway, creating new /dev entries and attaching new consumers
to the orphan LABELs;

5. Since the old LABELs now have attached consumers that aren't going to die,
the withering process never completes, and the /dev entries remain attached to
the orphaned LABEL geoms that now have no partition under them;

6. When DEV gets to taste the new providers for the new LABEL geoms for the
resized partitions, it can't create the /dev entries for them because they
already exist.

You'd think that step 4 wouldn't happen because a withering geom shouldn't be
offered for tasting, but it turns out there's a code path where this happens:
and strangely enough it's in g_resize_provider_event.

So there are several places here where questionable things are happening, even
beyond the assumption that actually causes the crash (LABEL's assumption that
it always has a consumer).

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-geom mailing list