mmc: block: correct 4KB alignment check
authorYuan, Juntao <juntao.yuan@intel.com>
Fri, 13 May 2016 07:59:24 +0000 (07:59 +0000)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 25 Jul 2016 08:34:03 +0000 (10:34 +0200)
In sectors alignment check, brq->data.blocks means sectors of the
previous mqrq since data.blocks for mqrq_cur hasn't been updated yet.
data.blocks will be updated later in mmc_blk_packed_hdr_wrq_prep or
mmc_blk_rw_rq_prep.

static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, ......
        ......
    struct mmc_blk_request *brq = &mq->mqrq_cur->brq;

Signed-off-by: Yuan Juntao <juntao.yuan@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/card/block.c

index c5472e3..636843a 100644 (file)
@@ -1976,8 +1976,8 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
                         * When 4KB native sector is enabled, only 8 blocks
                         * multiple read or write is allowed
                         */
-                       if ((brq->data.blocks & 0x07) &&
-                           (card->ext_csd.data_sector_size == 4096)) {
+                       if (mmc_large_sector(card) &&
+                               !IS_ALIGNED(blk_rq_sectors(rqc), 8)) {
                                pr_err("%s: Transfer size is not 4KB sector size aligned\n",
                                        req->rq_disk->disk_name);
                                mq_rq = mq->mqrq_cur;