Messages in this thread | | | Date | Tue, 7 Oct 2008 19:14:09 +0100 | From | Alan Cox <> | Subject | Re: BKL still required for what functions? |
| |
> - lock_kernel(); > + > mutex_lock(&phone_lock); > p = phone_device[minor]; > if (p) > new_fops = fops_get(p->f_op); > if (!new_fops) { > mutex_unlock(&phone_lock); > + lock_kernel(); > request_module("char-major-%d-%d", PHONE_MAJOR, minor); > + unlock_kernel(); > mutex_lock(&phone_lock); > p = phone_device[minor]; > if (p == NULL || (new_fops = fops_get(p->f_op)) == NULL) > @@ -81,7 +83,6 @@ static int phone_open(struct inode *inode, struct > file *file) > fops_put(old_fops); > end: > mutex_unlock(&phone_lock); > - unlock_kernel(); > return err; > }
Looks like the BKL can go entirely there providing phone_device[] is always rechecked back in the phone mutex, request_module is happy nowdays without the BKL
| |