aio: fix rcu sparse warnings introduced by ioctx table lookup patch
authorBenjamin LaHaise <bcrl@kvack.org>
Fri, 30 Aug 2013 15:12:50 +0000 (11:12 -0400)
committerBenjamin LaHaise <bcrl@kvack.org>
Fri, 30 Aug 2013 15:12:50 +0000 (11:12 -0400)
Sseveral sparse warnings were caused by missing rcu_dereference() annotations
for dereferencing mm->ioctx_table.  Thankfully, none of those were actual bugs
as the deref was protected by a spin lock in all instances.

Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
Reported-by: Fengguang Wu <fengguang.wu@intel.com>
fs/aio.c

index d0defcb0a493d15ac83bb0438d5922b874b5423d..6e267553604c176e285efa799515ecca6483fd7e 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -470,7 +470,7 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
        struct aio_ring *ring;
 
        spin_lock(&mm->ioctx_lock);
-       table = mm->ioctx_table;
+       table = rcu_dereference(mm->ioctx_table);
 
        while (1) {
                if (table)
@@ -498,7 +498,7 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
                table->nr = new_nr;
 
                spin_lock(&mm->ioctx_lock);
-               old = mm->ioctx_table;
+               old = rcu_dereference(mm->ioctx_table);
 
                if (!old) {
                        rcu_assign_pointer(mm->ioctx_table, table);
@@ -622,7 +622,7 @@ static void kill_ioctx(struct mm_struct *mm, struct kioctx *ctx)
                struct kioctx_table *table;
 
                spin_lock(&mm->ioctx_lock);
-               table = mm->ioctx_table;
+               table = rcu_dereference(mm->ioctx_table);
 
                WARN_ON(ctx != table->table[ctx->id]);
                table->table[ctx->id] = NULL;