mmc: card: block.c cleanup for host claim/release.
authorAndrei Warkentin <andreiw@motorola.com>
Mon, 11 Apr 2011 23:10:24 +0000 (18:10 -0500)
committerChris Ball <cjb@laptop.org>
Wed, 25 May 2011 01:01:16 +0000 (21:01 -0400)
Move host claim/release into mmc_blk_issue_rq.

(This is helpful so that selecting partition only has to happen
in one place for these commands.)

Signed-off-by: Andrei Warkentin <andreiw@motorola.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/card/block.c

index 91a67677360807da48a3ae3e33d15ea404d3bb5c..3e9082b729ff9772cb8edcdf1bddeb391d6818cf 100644 (file)
@@ -273,8 +273,6 @@ static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req)
        unsigned int from, nr, arg;
        int err = 0;
 
-       mmc_claim_host(card->host);
-
        if (!mmc_can_erase(card)) {
                err = -EOPNOTSUPP;
                goto out;
@@ -294,8 +292,6 @@ out:
        __blk_end_request(req, err, blk_rq_bytes(req));
        spin_unlock_irq(&md->lock);
 
-       mmc_release_host(card->host);
-
        return err ? 0 : 1;
 }
 
@@ -307,8 +303,6 @@ static int mmc_blk_issue_secdiscard_rq(struct mmc_queue *mq,
        unsigned int from, nr, arg;
        int err = 0;
 
-       mmc_claim_host(card->host);
-
        if (!mmc_can_secure_erase_trim(card)) {
                err = -EOPNOTSUPP;
                goto out;
@@ -330,8 +324,6 @@ out:
        __blk_end_request(req, err, blk_rq_bytes(req));
        spin_unlock_irq(&md->lock);
 
-       mmc_release_host(card->host);
-
        return err ? 0 : 1;
 }
 
@@ -402,8 +394,6 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *req)
                (rq_data_dir(req) == WRITE) &&
                REL_WRITES_SUPPORTED(card);
 
-       mmc_claim_host(card->host);
-
        do {
                struct mmc_command cmd;
                u32 readcmd, writecmd, status = 0;
@@ -589,8 +579,6 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *req)
                spin_unlock_irq(&md->lock);
        } while (ret);
 
-       mmc_release_host(card->host);
-
        return 1;
 
  cmd_err:
@@ -617,8 +605,6 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *req)
                spin_unlock_irq(&md->lock);
        }
 
-       mmc_release_host(card->host);
-
        spin_lock_irq(&md->lock);
        while (ret)
                ret = __blk_end_request(req, -EIO, blk_rq_cur_bytes(req));
@@ -629,16 +615,25 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *req)
 
 static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
 {
+       int ret;
+       struct mmc_blk_data *md = mq->data;
+       struct mmc_card *card = md->queue.card;
+
+       mmc_claim_host(card->host);
+
        if (req->cmd_flags & REQ_DISCARD) {
                if (req->cmd_flags & REQ_SECURE)
-                       return mmc_blk_issue_secdiscard_rq(mq, req);
+                       ret = mmc_blk_issue_secdiscard_rq(mq, req);
                else
-                       return mmc_blk_issue_discard_rq(mq, req);
+                       ret = mmc_blk_issue_discard_rq(mq, req);
        } else if (req->cmd_flags & REQ_FLUSH) {
-               return mmc_blk_issue_flush(mq, req);
+               ret = mmc_blk_issue_flush(mq, req);
        } else {
-               return mmc_blk_issue_rw_rq(mq, req);
+               ret = mmc_blk_issue_rw_rq(mq, req);
        }
+
+       mmc_release_host(card->host);
+       return ret;
 }
 
 static inline int mmc_blk_readonly(struct mmc_card *card)