From: Andrew Morton Cc: H. Peter Anvin Cc: Matt Helsley Cc: Serge Hallyn Cc: Sukadev Bhattiprolu Signed-off-by: Andrew Morton --- fs/devpts/inode.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff -puN fs/devpts/inode.c~devpts-factor-out-pty-index-allocation-fix fs/devpts/inode.c --- a/fs/devpts/inode.c~devpts-factor-out-pty-index-allocation-fix +++ a/fs/devpts/inode.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -29,7 +30,7 @@ extern int pty_limit; /* Config limit on Unix98 ptys */ static DEFINE_IDR(allocated_ptys); -static DECLARE_MUTEX(allocated_ptys_lock); +static DEFINE_MUTEX(allocated_ptys_lock); static struct vfsmount *devpts_mnt; static struct dentry *devpts_root; @@ -186,10 +187,10 @@ retry: return -ENOMEM; } - down(&allocated_ptys_lock); + mutex_lock(&allocated_ptys_lock); idr_ret = idr_get_new(&allocated_ptys, NULL, &index); if (idr_ret < 0) { - up(&allocated_ptys_lock); + mutex_unlock(&allocated_ptys_lock); if (idr_ret == -EAGAIN) goto retry; return -EIO; @@ -197,18 +198,18 @@ retry: if (index >= pty_limit) { idr_remove(&allocated_ptys, index); - up(&allocated_ptys_lock); + mutex_unlock(&allocated_ptys_lock); return -EIO; } - up(&allocated_ptys_lock); + mutex_unlock(&allocated_ptys_lock); return index; } void devpts_kill_index(int idx) { - down(&allocated_ptys_lock); + mutex_lock(&allocated_ptys_lock); idr_remove(&allocated_ptys, idx); - up(&allocated_ptys_lock); + mutex_unlock(&allocated_ptys_lock); } int devpts_pty_new(struct tty_struct *tty) _