diff options
| author | Alexander Viro <viro@math.psu.edu> | 2002-02-12 20:31:22 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-02-12 20:31:22 -0800 |
| commit | 7994321a1382436bd3698e2eb9d2990a0979bf23 (patch) | |
| tree | ce75ab80bbf9142eef0960bad244b7560a5a8e7a /fs/devfs | |
| parent | 24b10ca2e75b72716df5d00f93e14dd32c12670e (diff) | |
[PATCH] BKL shifted inside ->unlink()
Next one in the series - this time it's ->unlink()...
Diffstat (limited to 'fs/devfs')
| -rw-r--r-- | fs/devfs/base.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/fs/devfs/base.c b/fs/devfs/base.c index 6a0c3e7a2655..d374b4e32b48 100644 --- a/fs/devfs/base.c +++ b/fs/devfs/base.c @@ -3030,19 +3030,30 @@ static int devfs_unlink (struct inode *dir, struct dentry *dentry) struct inode *inode = dentry->d_inode; struct fs_info *fs_info = dir->i_sb->u.generic_sbp; + lock_kernel(); de = get_devfs_entry_from_vfs_inode (inode); DPRINTK (DEBUG_I_UNLINK, "(%s): de: %p\n", dentry->d_name.name, de); - if (de == NULL) return -ENOENT; - if (!de->vfs_deletable) return -EPERM; + if (de == NULL) { + unlock_kernel(); + return -ENOENT; + } + if (!de->vfs_deletable) { + unlock_kernel(); + return -EPERM; + } write_lock (&de->parent->u.dir.lock); unhooked = _devfs_unhook (de); write_unlock (&de->parent->u.dir.lock); - if (!unhooked) return -ENOENT; + if (!unhooked) { + unlock_kernel(); + return -ENOENT; + } if ( !is_devfsd_or_child (fs_info) ) devfsd_notify_de (de, DEVFSD_NOTIFY_DELETE, inode->i_mode, inode->i_uid, inode->i_gid, fs_info, 0); free_dentry (de); devfs_put (de); + unlock_kernel(); return 0; } /* End Function devfs_unlink */ |
