diff options
Diffstat (limited to 'fs/debugfs/file.c')
| -rw-r--r-- | fs/debugfs/file.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c index 9c1c9a01b7e5..592059f88e04 100644 --- a/fs/debugfs/file.c +++ b/fs/debugfs/file.c | |||
| @@ -127,7 +127,6 @@ static int open_proxy_open(struct inode *inode, struct file *filp) | |||
| 127 | r = real_fops->open(inode, filp); | 127 | r = real_fops->open(inode, filp); |
| 128 | 128 | ||
| 129 | out: | 129 | out: |
| 130 | fops_put(real_fops); | ||
| 131 | debugfs_use_file_finish(srcu_idx); | 130 | debugfs_use_file_finish(srcu_idx); |
| 132 | return r; | 131 | return r; |
| 133 | } | 132 | } |
| @@ -262,8 +261,10 @@ static int full_proxy_open(struct inode *inode, struct file *filp) | |||
| 262 | 261 | ||
| 263 | if (real_fops->open) { | 262 | if (real_fops->open) { |
| 264 | r = real_fops->open(inode, filp); | 263 | r = real_fops->open(inode, filp); |
| 265 | 264 | if (r) { | |
| 266 | if (filp->f_op != proxy_fops) { | 265 | replace_fops(filp, d_inode(dentry)->i_fop); |
| 266 | goto free_proxy; | ||
| 267 | } else if (filp->f_op != proxy_fops) { | ||
| 267 | /* No protection against file removal anymore. */ | 268 | /* No protection against file removal anymore. */ |
| 268 | WARN(1, "debugfs file owner replaced proxy fops: %pd", | 269 | WARN(1, "debugfs file owner replaced proxy fops: %pd", |
| 269 | dentry); | 270 | dentry); |
