diff options
Diffstat (limited to 'drivers/media/dvb-core/dvbdev.c')
| -rw-r--r-- | drivers/media/dvb-core/dvbdev.c | 19 | 
1 files changed, 6 insertions, 13 deletions
diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c index 401ef64f92c6..983db75de350 100644 --- a/drivers/media/dvb-core/dvbdev.c +++ b/drivers/media/dvb-core/dvbdev.c @@ -74,22 +74,15 @@ static int dvb_device_open(struct inode *inode, struct file *file)  	if (dvbdev && dvbdev->fops) {  		int err = 0; -		const struct file_operations *old_fops; +		const struct file_operations *new_fops; -		file->private_data = dvbdev; -		old_fops = file->f_op; -		file->f_op = fops_get(dvbdev->fops); -		if (file->f_op == NULL) { -			file->f_op = old_fops; +		new_fops = fops_get(dvbdev->fops); +		if (!new_fops)  			goto fail; -		} -		if(file->f_op->open) +		file->private_data = dvbdev; +		replace_fops(file, new_fops); +		if (file->f_op->open)  			err = file->f_op->open(inode,file); -		if (err) { -			fops_put(file->f_op); -			file->f_op = fops_get(old_fops); -		} -		fops_put(old_fops);  		up_read(&minor_rwsem);  		mutex_unlock(&dvbdev_mutex);  		return err;  |