g_resize_provider_event: Do not invoke orphan method twice
Like r266444, g_resize_provider_event can attempt to orphan an already orphaned geom_dev consumer. This will cause a panic in g_dev_orphan. Apply the same fix as was applied to g_orphan_register. Reviewed by: ae Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D12469
This commit is contained in:
parent
c36e087097
commit
a523de2365
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=323977
@ -631,6 +631,14 @@ g_resize_provider_event(void *arg, int flag)
|
||||
LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, cp2) {
|
||||
gp = cp->geom;
|
||||
if (gp->resize == NULL && size < pp->mediasize) {
|
||||
/*
|
||||
* XXX: g_dev_orphan method does deferred destroying
|
||||
* and it is possible, that other event could already
|
||||
* call the orphan method. Check consumer's flags to
|
||||
* do not schedule it twice.
|
||||
*/
|
||||
if (cp->flags & G_CF_ORPHAN)
|
||||
continue;
|
||||
cp->flags |= G_CF_ORPHAN;
|
||||
cp->geom->orphan(cp);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user