On Mon, Dec 6, 2010 at 4:48 PM, Antti Kantee <[email protected]> wrote: > On Mon Dec 06 2010 at 11:55:05 +1100, matthew green wrote: >> >> hi. >> >> >> my devbox just crashed with this: >> >> panic: kernel diagnostic assertion "pg == NULL || pg == PGO_DONTCARE" >> failed: file "/usr/src/sys/miscfs/genfs/genfs_io.c", line 243 >> >> but i don't understand the KASSERT(). it seems that this sequence >> of events will always trigger: >> >> nfound = uvn_findpages(uobj, origoffset, &npages, >> ap->a_m, UFP_NOWAIT|UFP_NOALLOC|(memwrite ? UFP_NORDONLY >> : 0)); >> ... >> if (!genfs_node_rdtrylock(vp)) { >> ... >> for (i = 0; i < npages; i++) { >> pg = ap->a_m[i]; >> if (pg != NULL && pg != PGO_DONTCARE) { >> ap->a_m[i] = NULL; >> } >> >> KASSERT(pg == NULL || pg == PGO_DONTCARE); >> >> won't all pages filled in by the uvn_findpages() be not NULL, so >> if the uvn_findpages() succeeds but the genfs_node_rdtrylock() >> fails, we will trigger this assert always. >> >> >> i think it should just be removed. > > I guess it wants to test ap->a_m[i], cf. the change to the assignment > clause in the same revision.
You're right!
