|
@@ -554,8 +554,7 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
|
|
|
struct aio_ring *ring;
|
|
|
|
|
|
spin_lock(&mm->ioctx_lock);
|
|
|
- rcu_read_lock();
|
|
|
- table = rcu_dereference(mm->ioctx_table);
|
|
|
+ table = rcu_dereference_raw(mm->ioctx_table);
|
|
|
|
|
|
while (1) {
|
|
|
if (table)
|
|
@@ -563,7 +562,6 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
|
|
|
if (!table->table[i]) {
|
|
|
ctx->id = i;
|
|
|
table->table[i] = ctx;
|
|
|
- rcu_read_unlock();
|
|
|
spin_unlock(&mm->ioctx_lock);
|
|
|
|
|
|
/* While kioctx setup is in progress,
|
|
@@ -577,8 +575,6 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
|
|
|
}
|
|
|
|
|
|
new_nr = (table ? table->nr : 1) * 4;
|
|
|
-
|
|
|
- rcu_read_unlock();
|
|
|
spin_unlock(&mm->ioctx_lock);
|
|
|
|
|
|
table = kzalloc(sizeof(*table) + sizeof(struct kioctx *) *
|
|
@@ -589,8 +585,7 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
|
|
|
table->nr = new_nr;
|
|
|
|
|
|
spin_lock(&mm->ioctx_lock);
|
|
|
- rcu_read_lock();
|
|
|
- old = rcu_dereference(mm->ioctx_table);
|
|
|
+ old = rcu_dereference_raw(mm->ioctx_table);
|
|
|
|
|
|
if (!old) {
|
|
|
rcu_assign_pointer(mm->ioctx_table, table);
|
|
@@ -737,12 +732,9 @@ static int kill_ioctx(struct mm_struct *mm, struct kioctx *ctx,
|
|
|
|
|
|
|
|
|
spin_lock(&mm->ioctx_lock);
|
|
|
- rcu_read_lock();
|
|
|
- table = rcu_dereference(mm->ioctx_table);
|
|
|
-
|
|
|
+ table = rcu_dereference_raw(mm->ioctx_table);
|
|
|
WARN_ON(ctx != table->table[ctx->id]);
|
|
|
table->table[ctx->id] = NULL;
|
|
|
- rcu_read_unlock();
|
|
|
spin_unlock(&mm->ioctx_lock);
|
|
|
|
|
|
/* percpu_ref_kill() will do the necessary call_rcu() */
|