diff options
Diffstat (limited to 'fs/proc/generic.c')
| -rw-r--r-- | fs/proc/generic.c | 13 | 
1 files changed, 7 insertions, 6 deletions
diff --git a/fs/proc/generic.c b/fs/proc/generic.c index e064f562b1f..76ddae83daa 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c @@ -352,18 +352,18 @@ retry:  	if (!ida_pre_get(&proc_inum_ida, GFP_KERNEL))  		return -ENOMEM; -	spin_lock_bh(&proc_inum_lock); +	spin_lock_irq(&proc_inum_lock);  	error = ida_get_new(&proc_inum_ida, &i); -	spin_unlock_bh(&proc_inum_lock); +	spin_unlock_irq(&proc_inum_lock);  	if (error == -EAGAIN)  		goto retry;  	else if (error)  		return error;  	if (i > UINT_MAX - PROC_DYNAMIC_FIRST) { -		spin_lock_bh(&proc_inum_lock); +		spin_lock_irq(&proc_inum_lock);  		ida_remove(&proc_inum_ida, i); -		spin_unlock_bh(&proc_inum_lock); +		spin_unlock_irq(&proc_inum_lock);  		return -ENOSPC;  	}  	*inum = PROC_DYNAMIC_FIRST + i; @@ -372,9 +372,10 @@ retry:  void proc_free_inum(unsigned int inum)  { -	spin_lock_bh(&proc_inum_lock); +	unsigned long flags; +	spin_lock_irqsave(&proc_inum_lock, flags);  	ida_remove(&proc_inum_ida, inum - PROC_DYNAMIC_FIRST); -	spin_unlock_bh(&proc_inum_lock); +	spin_unlock_irqrestore(&proc_inum_lock, flags);  }  static void *proc_follow_link(struct dentry *dentry, struct nameidata *nd)  |