diff --git a/fs/char_dev.c b/fs/char_dev.c index 24b1425..d65765e 100644 --- a/fs/char_dev.c +++ b/fs/char_dev.c @@ -107,29 +107,14 @@ __register_chrdev_region(unsigned int major, unsigned int baseminor, for (cp = &chrdevs[i]; *cp; cp = &(*cp)->next) if ((*cp)->major > major || - ((*cp)->major == major && - (((*cp)->baseminor >= baseminor) || - ((*cp)->baseminor + (*cp)->minorct > baseminor)))) + ((*cp)->major == major && ((*cp)->baseminor + (*cp)->minorct > baseminor))) break; /* Check for overlapping minor ranges. */ - if (*cp && (*cp)->major == major) { - int old_min = (*cp)->baseminor; - int old_max = (*cp)->baseminor + (*cp)->minorct - 1; - int new_min = baseminor; - int new_max = baseminor + minorct - 1; - - /* New driver overlaps from the left. */ - if (new_max >= old_min && new_max <= old_max) { - ret = -EBUSY; - goto out; - } - - /* New driver overlaps from the right. */ - if (new_min <= old_max && new_min >= old_min) { - ret = -EBUSY; - goto out; - } + if (*cp && (*cp)->major == major && + (*cp)->baseminor < baseminor + minorct) { + ret = -EBUSY; + goto out; } cd->next = *cp;