Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=adf66a0dc5e8be8d4e64f3c2114f9b175558235b
Commit:     adf66a0dc5e8be8d4e64f3c2114f9b175558235b
Parent:     17b0429dde9ab60f9cee8e07ab28c7dc6cfe6efd
Author:     Pierre Ossman <[EMAIL PROTECTED]>
AuthorDate: Sun Jul 22 23:08:30 2007 +0200
Committer:  Pierre Ossman <[EMAIL PROTECTED]>
CommitDate: Sun Sep 23 09:14:43 2007 +0200

    mmc: improve error code feedback
    
    Now that we use "normal" error codes, improve the reporting and response
    to error codes in the core.
    
    Signed-off-by: Pierre Ossman <[EMAIL PROTECTED]>
---
 drivers/mmc/core/mmc.c |   27 +++++++++++++++++++--------
 drivers/mmc/core/sd.c  |   22 +++++++++++++++++-----
 2 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index fe483d5..258fe73 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -176,14 +176,20 @@ static int mmc_read_ext_csd(struct mmc_card *card)
        ext_csd = kmalloc(512, GFP_KERNEL);
        if (!ext_csd) {
                printk(KERN_ERR "%s: could not allocate a buffer to "
-                       "receive the ext_csd. mmc v4 cards will be "
-                       "treated as v3.\n", mmc_hostname(card->host));
+                       "receive the ext_csd.\n", mmc_hostname(card->host));
                return -ENOMEM;
        }
 
        err = mmc_send_ext_csd(card, ext_csd);
        if (err) {
                /*
+                * We all hosts that cannot perform the command
+                * to fail more gracefully
+                */
+               if (err != -EINVAL)
+                       goto out;
+
+               /*
                 * High capacity cards should have this "magic" size
                 * stored in their CSD.
                 */
@@ -199,6 +205,7 @@ static int mmc_read_ext_csd(struct mmc_card *card)
                                mmc_hostname(card->host));
                        err = 0;
                }
+
                goto out;
        }
 
@@ -269,8 +276,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
                goto err;
 
        if (oldcard) {
-               if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
+               if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) {
+                       err = -ENOENT;
                        goto err;
+               }
 
                card = oldcard;
        } else {
@@ -278,8 +287,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
                 * Allocate card structure.
                 */
                card = mmc_alloc_card(host);
-               if (IS_ERR(card))
+               if (IS_ERR(card)) {
+                       err = PTR_ERR(card);
                        goto err;
+               }
 
                card->type = MMC_TYPE_MMC;
                card->rca = 1;
@@ -304,10 +315,10 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
                        goto free_card;
 
                err = mmc_decode_csd(card);
-               if (err < 0)
+               if (err)
                        goto free_card;
                err = mmc_decode_cid(card);
-               if (err < 0)
+               if (err)
                        goto free_card;
        }
 
@@ -379,7 +390,7 @@ free_card:
                mmc_remove_card(card);
 err:
 
-       return -EIO;
+       return err;
 }
 
 /*
@@ -587,6 +598,6 @@ err:
        printk(KERN_ERR "%s: error %d whilst initialising MMC card\n",
                mmc_hostname(host), err);
 
-       return 0;
+       return err;
 }
 
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index 00895c9..0a04a6e 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -213,10 +213,18 @@ static int mmc_read_switch(struct mmc_card *card)
 
        err = mmc_sd_switch(card, 0, 0, 1, status);
        if (err) {
+               /*
+                * We all hosts that cannot perform the command
+                * to fail more gracefully
+                */
+               if (err != -EINVAL)
+                       goto out;
+
                printk(KERN_WARNING "%s: problem reading switch "
                        "capabilities, performance might suffer.\n",
                        mmc_hostname(card->host));
                err = 0;
+
                goto out;
        }
 
@@ -324,8 +332,10 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
                goto err;
 
        if (oldcard) {
-               if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0)
+               if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) {
+                       err = -ENOENT;
                        goto err;
+               }
 
                card = oldcard;
        } else {
@@ -333,8 +343,10 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
                 * Allocate card structure.
                 */
                card = mmc_alloc_card(host);
-               if (IS_ERR(card))
+               if (IS_ERR(card)) {
+                       err = PTR_ERR(card);
                        goto err;
+               }
 
                card->type = MMC_TYPE_SD;
                memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
@@ -358,7 +370,7 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
                        goto free_card;
 
                err = mmc_decode_csd(card);
-               if (err < 0)
+               if (err)
                        goto free_card;
 
                mmc_decode_cid(card);
@@ -449,7 +461,7 @@ free_card:
                mmc_remove_card(card);
 err:
 
-       return -EIO;
+       return err;
 }
 
 /*
@@ -666,6 +678,6 @@ err:
        printk(KERN_ERR "%s: error %d whilst initialising SD card\n",
                mmc_hostname(host), err);
 
-       return 0;
+       return err;
 }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to