I don't think that works. drm_open_helper doesn't appear to be under the BKL merely the struct mutex.
It blocks the case you specified of two releases happening together.
But not parallel open/release
But setmaster can sleep so the BKL is dropped on contention of the struct_mutex, ditto dropmaster
they should only sleep in the mutex lock nuless the driver callback is allocating memory. but yeah its a bit of a mess.
With the mutex alone the damage is done. Consider two setmasters and some other action which is making the mutex contend
CPU1 CPU2
file->priv->minor->master == NULL ? file_priv->minor->master != file_priv->master
mutex_lock (drop BKL) file->priv->minor->master === NULL master != file_priv->master mutex_lock [drop BKL] takes mutex minor->master = drm_master_get is_master = 1 master_set drop mutex return 0 takes mutex minor->master = drm_master_get is_master = 1 master_set drops mutex return 0
Alan