mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-03 17:44:54 +00:00
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: Matthew Wilcox <willy@infradead.org>
This commit is contained in:
parent
169b480e4c
commit
0f0a0e54a2
@ -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[] = {
|
|||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
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 = {
|
|||||||
|
|
||||||
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 (atomic_inc_return(&pty_count) >= (pty_limit -
|
||||||
if (!ida_pre_get(&fsi->allocated_ptys, GFP_KERNEL))
|
(fsi->mount_opts.reserve ? 0 : pty_reserve)))
|
||||||
return -ENOMEM;
|
goto out;
|
||||||
|
|
||||||
mutex_lock(&allocated_ptys_lock);
|
index = ida_alloc_max(&fsi->allocated_ptys, fsi->mount_opts.max - 1,
|
||||||
if (pty_count >= (pty_limit -
|
GFP_KERNEL);
|
||||||
(fsi->mount_opts.reserve ? 0 : pty_reserve))) {
|
|
||||||
mutex_unlock(&allocated_ptys_lock);
|
|
||||||
return -ENOSPC;
|
|
||||||
}
|
|
||||||
|
|
||||||
ida_ret = ida_get_new(&fsi->allocated_ptys, &index);
|
out:
|
||||||
if (ida_ret < 0) {
|
if (index < 0)
|
||||||
mutex_unlock(&allocated_ptys_lock);
|
atomic_dec(&pty_count);
|
||||||
if (ida_ret == -EAGAIN)
|
|
||||||
goto retry;
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (index >= fsi->mount_opts.max) {
|
|
||||||
ida_remove(&fsi->allocated_ptys, index);
|
|
||||||
mutex_unlock(&allocated_ptys_lock);
|
|
||||||
return -ENOSPC;
|
|
||||||
}
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user