--- 25-akpm/drivers/i2c/i2c-core.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff -puN drivers/i2c/i2c-core.c~use-idr_get_new-to-allocate-a-bus-id-in-drivers-i2c-i2c-corec-update-to-new-api drivers/i2c/i2c-core.c --- 25/drivers/i2c/i2c-core.c~use-idr_get_new-to-allocate-a-bus-id-in-drivers-i2c-i2c-corec-update-to-new-api 2004-05-19 00:26:51.640913920 -0700 +++ 25-akpm/drivers/i2c/i2c-core.c 2004-05-19 00:27:42.080245976 -0700 @@ -126,7 +126,13 @@ int i2c_add_adapter(struct i2c_adapter * goto out_unlock; } - id = idr_get_new(&i2c_adapter_idr, NULL); + res = idr_get_new(&i2c_adapter_idr, NULL, &id); + if (res < 0) { + if (res == -EAGAIN) + res = -ENOMEM; + goto out_unlock; + } + adap->nr = id & MAX_ID_MASK; init_MUTEX(&adap->bus_lock); init_MUTEX(&adap->clist_lock); @@ -162,7 +168,7 @@ int i2c_add_adapter(struct i2c_adapter * dev_dbg(&adap->dev, "registered as adapter #%d\n", adap->nr); - out_unlock: +out_unlock: up(&core_lists); return res; } _