your change seems to fix a clear but to me. > - if (*bmajor < 0) > + if ((bdev != NULL) && (*bmajor < 0)) > *bmajor = conv->d_bmajor;
there's also this line i'm curious about, just below: if (*bmajor != conv->d_bmajor || *cmajor != conv->d_cmajor) { error = EINVAL; goto out; should the first part also depend upon either bdev != NULL or perhaps (*bmajor >= 0 && bdev == NULL) as the following code uses... .mrg.