[PATCH 07/13] This patch only fixes the ridr_get_empty_slot() portion of ridr.c, to make it RCU based. Signed-off-by: Nadia Derbey --- lib/ridr.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) Index: linux-2.6.25-rc8-mm1/lib/ridr.c =================================================================== --- linux-2.6.25-rc8-mm1.orig/lib/ridr.c 2008-04-11 17:51:34.000000000 +0200 +++ linux-2.6.25-rc8-mm1/lib/ridr.c 2008-04-11 17:55:37.000000000 +0200 @@ -198,7 +198,6 @@ static int ridr_get_empty_slot(struct ri { struct ridr_layer *p, *new; int layers, v, id; - unsigned long flags; id = starting_id; build_up: @@ -224,23 +223,21 @@ build_up: * The allocation failed. If we built part of * the structure tear it down. */ - spin_lock_irqsave(&idp->lock, flags); for (new = p; p && p != idp->top; new = p) { p = p->ary[0]; new->ary[0] = NULL; new->bitmap = new->count = 0; free_layer(new); } - spin_unlock_irqrestore(&idp->lock, flags); return -1; } - new->ary[0] = p; + rcu_assign_pointer(new->ary[0], p); new->count = 1; if (p->bitmap == IDR_FULL) __set_bit(0, &new->bitmap); - p = new; + rcu_assign_pointer(p, new); } - idp->top = p; + rcu_assign_pointer(idp->top, p); idp->layers = layers; v = sub_alloc(idp, &id, pa); if (v == -2) -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/