Commit 0f0a0e54 authored by Matthew Wilcox's avatar Matthew Wilcox

devpts: Convert to new IDA API

ida_alloc_max() matches what this driver wants to do.  Also removes a
call to ida_pre_get().  We no longer need the protection of the mutex,
so convert pty_count to an atomic_t and remove the mutex entirely.
Signed-off-by: default avatarMatthew Wilcox <willy@infradead.org>
parent 169b480e
...@@ -46,7 +46,7 @@ static int pty_limit = NR_UNIX98_PTY_DEFAULT; ...@@ -46,7 +46,7 @@ static int pty_limit = NR_UNIX98_PTY_DEFAULT;
static int pty_reserve = NR_UNIX98_PTY_RESERVE; static int pty_reserve = NR_UNIX98_PTY_RESERVE;
static int pty_limit_min; static int pty_limit_min;
static int pty_limit_max = INT_MAX; static int pty_limit_max = INT_MAX;
static int pty_count; static atomic_t pty_count = ATOMIC_INIT(0);
static struct ctl_table pty_table[] = { static struct ctl_table pty_table[] = {
{ {
...@@ -93,8 +93,6 @@ static struct ctl_table pty_root_table[] = { ...@@ -93,8 +93,6 @@ static struct ctl_table pty_root_table[] = {
{} {}
}; };
static DEFINE_MUTEX(allocated_ptys_lock);
struct pts_mount_opts { struct pts_mount_opts {
int setuid; int setuid;
int setgid; int setgid;
...@@ -533,44 +531,25 @@ static struct file_system_type devpts_fs_type = { ...@@ -533,44 +531,25 @@ static struct file_system_type devpts_fs_type = {
int devpts_new_index(struct pts_fs_info *fsi) int devpts_new_index(struct pts_fs_info *fsi)
{ {
int index; int index = -ENOSPC;
int ida_ret;
retry:
if (!ida_pre_get(&fsi->allocated_ptys, GFP_KERNEL))
return -ENOMEM;
mutex_lock(&allocated_ptys_lock);
if (pty_count >= (pty_limit -
(fsi->mount_opts.reserve ? 0 : pty_reserve))) {
mutex_unlock(&allocated_ptys_lock);
return -ENOSPC;
}
ida_ret = ida_get_new(&fsi->allocated_ptys, &index); if (atomic_inc_return(&pty_count) >= (pty_limit -
if (ida_ret < 0) { (fsi->mount_opts.reserve ? 0 : pty_reserve)))
mutex_unlock(&allocated_ptys_lock); goto out;
if (ida_ret == -EAGAIN)
goto retry;
return -EIO;
}
if (index >= fsi->mount_opts.max) { index = ida_alloc_max(&fsi->allocated_ptys, fsi->mount_opts.max - 1,
ida_remove(&fsi->allocated_ptys, index); GFP_KERNEL);
mutex_unlock(&allocated_ptys_lock);
return -ENOSPC; out:
} if (index < 0)
pty_count++; atomic_dec(&pty_count);
mutex_unlock(&allocated_ptys_lock);
return index; return index;
} }
void devpts_kill_index(struct pts_fs_info *fsi, int idx) void devpts_kill_index(struct pts_fs_info *fsi, int idx)
{ {
mutex_lock(&allocated_ptys_lock); ida_free(&fsi->allocated_ptys, idx);
ida_remove(&fsi->allocated_ptys, idx); atomic_dec(&pty_count);
pty_count--;
mutex_unlock(&allocated_ptys_lock);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment