X-Git-Url: http://git.monstr.eu/?a=blobdiff_plain;f=lib%2Fxarray.c;h=4acc88ea7c21744e6b1faa54af6f2029545a1b32;hb=80140a81f7f833998d732102eea0fea230b88067;hp=b95e92598b9c4ed00b1a47f28d38b694ac8f5b81;hpb=9ae2a143081fa8fba5042431007b33d9a855b7a2;p=linux-2.6-microblaze.git diff --git a/lib/xarray.c b/lib/xarray.c index b95e92598b9c..4acc88ea7c21 100644 --- a/lib/xarray.c +++ b/lib/xarray.c @@ -722,6 +722,8 @@ void xas_create_range(struct xa_state *xas) for (;;) { struct xa_node *node = xas->xa_node; + if (node->shift >= shift) + break; xas->xa_node = xa_parent_locked(xas->xa, node); xas->xa_offset = node->offset - 1; if (node->offset != 0) @@ -1079,6 +1081,7 @@ void xas_split(struct xa_state *xas, void *entry, unsigned int order) xa_mk_node(child)); if (xa_is_value(curr)) values--; + xas_update(xas, child); } else { unsigned int canon = offset - xas->xa_sibs; @@ -1093,6 +1096,7 @@ void xas_split(struct xa_state *xas, void *entry, unsigned int order) } while (offset-- > xas->xa_offset); node->nr_values += values; + xas_update(xas, node); } EXPORT_SYMBOL_GPL(xas_split); #endif