]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
mmc: core: switch to ida_simple_ functions in block.c
authorHeiner Kallweit <hkallweit1@gmail.com>
Wed, 1 Feb 2017 18:44:22 +0000 (19:44 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 13 Feb 2017 12:20:56 +0000 (13:20 +0100)
ida code in block.c can be significantly simplified by switching to
the ida_simple_ functions.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/core/block.c

index 6c8be1a80551416ea03793b1df469ea43a4fbec5..00c55841a7c4c351e9adf6bacc76849cbf250945 100644 (file)
@@ -90,7 +90,6 @@ static int max_devices;
 #define MAX_DEVICES 256
 
 static DEFINE_IDA(mmc_blk_ida);
-static DEFINE_SPINLOCK(mmc_blk_lock);
 
 /*
  * There is one mmc_blk_data per slot.
@@ -163,11 +162,7 @@ static void mmc_blk_put(struct mmc_blk_data *md)
        if (md->usage == 0) {
                int devidx = mmc_get_devidx(md->disk);
                blk_cleanup_queue(md->queue.queue);
-
-               spin_lock(&mmc_blk_lock);
-               ida_remove(&mmc_blk_ida, devidx);
-               spin_unlock(&mmc_blk_lock);
-
+               ida_simple_remove(&mmc_blk_ida, devidx);
                put_disk(md->disk);
                kfree(md);
        }
@@ -1839,23 +1834,9 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
        struct mmc_blk_data *md;
        int devidx, ret;
 
-again:
-       if (!ida_pre_get(&mmc_blk_ida, GFP_KERNEL))
-               return ERR_PTR(-ENOMEM);
-
-       spin_lock(&mmc_blk_lock);
-       ret = ida_get_new(&mmc_blk_ida, &devidx);
-       spin_unlock(&mmc_blk_lock);
-
-       if (ret == -EAGAIN)
-               goto again;
-       else if (ret)
-               return ERR_PTR(ret);
-
-       if (devidx >= max_devices) {
-               ret = -ENOSPC;
-               goto out;
-       }
+       devidx = ida_simple_get(&mmc_blk_ida, 0, max_devices, GFP_KERNEL);
+       if (devidx < 0)
+               return ERR_PTR(devidx);
 
        md = kzalloc(sizeof(struct mmc_blk_data), GFP_KERNEL);
        if (!md) {
@@ -1944,9 +1925,7 @@ again:
  err_kfree:
        kfree(md);
  out:
-       spin_lock(&mmc_blk_lock);
-       ida_remove(&mmc_blk_ida, devidx);
-       spin_unlock(&mmc_blk_lock);
+       ida_simple_remove(&mmc_blk_ida, devidx);
        return ERR_PTR(ret);
 }