aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/misc.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/drivers/char/misc.c b/drivers/char/misc.c
index 2f685f6eda48..ffa97d261cf3 100644
--- a/drivers/char/misc.c
+++ b/drivers/char/misc.c
@@ -114,7 +114,7 @@ static int misc_open(struct inode * inode, struct file * file)
114 int minor = iminor(inode); 114 int minor = iminor(inode);
115 struct miscdevice *c; 115 struct miscdevice *c;
116 int err = -ENODEV; 116 int err = -ENODEV;
117 const struct file_operations *old_fops, *new_fops = NULL; 117 const struct file_operations *new_fops = NULL;
118 118
119 mutex_lock(&misc_mtx); 119 mutex_lock(&misc_mtx);
120 120
@@ -141,17 +141,11 @@ static int misc_open(struct inode * inode, struct file * file)
141 } 141 }
142 142
143 err = 0; 143 err = 0;
144 old_fops = file->f_op; 144 replace_fops(file, new_fops);
145 file->f_op = new_fops;
146 if (file->f_op->open) { 145 if (file->f_op->open) {
147 file->private_data = c; 146 file->private_data = c;
148 err=file->f_op->open(inode,file); 147 err = file->f_op->open(inode,file);
149 if (err) {
150 fops_put(file->f_op);
151 file->f_op = fops_get(old_fops);
152 }
153 } 148 }
154 fops_put(old_fops);
155fail: 149fail:
156 mutex_unlock(&misc_mtx); 150 mutex_unlock(&misc_mtx);
157 return err; 151 return err;