Skip to content

Commit

Permalink
posix-timers: convert to idr_alloc()
Browse files Browse the repository at this point in the history
Convert to the much saner new idr interface.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Tejun Heo authored and Linus Torvalds committed Feb 28, 2013
1 parent 0e9c3be commit ee94d52
Showing 1 changed file with 8 additions and 10 deletions.
18 changes: 8 additions & 10 deletions kernel/posix-timers.c
Original file line number Diff line number Diff line change
Expand Up @@ -552,24 +552,22 @@ SYSCALL_DEFINE3(timer_create, const clockid_t, which_clock,
return -EAGAIN;

spin_lock_init(&new_timer->it_lock);
retry:
if (unlikely(!idr_pre_get(&posix_timers_id, GFP_KERNEL))) {
error = -EAGAIN;
goto out;
}

idr_preload(GFP_KERNEL);
spin_lock_irq(&idr_lock);
error = idr_get_new(&posix_timers_id, new_timer, &new_timer_id);
error = idr_alloc(&posix_timers_id, new_timer, 0, 0, GFP_NOWAIT);
spin_unlock_irq(&idr_lock);
if (error) {
if (error == -EAGAIN)
goto retry;
idr_preload_end();
if (error < 0) {
/*
* Weird looking, but we return EAGAIN if the IDR is
* full (proper POSIX return value for this)
*/
error = -EAGAIN;
if (error == -ENOSPC)
error = -EAGAIN;
goto out;
}
new_timer_id = error;

it_id_set = IT_ID_SET;
new_timer->it_id = (timer_t) new_timer_id;
Expand Down

0 comments on commit ee94d52

Please sign in to comment.