block: Fix secure erase
[linux-2.6-block.git] / drivers / mmc / card / block.c
index 10b553765ee7ecf8a80595236152db232074585c..82503e6f04b317fdfda01c9a0ee50c4249a44be1 100644 (file)
@@ -1726,6 +1726,7 @@ static u8 mmc_blk_prep_packed_list(struct mmc_queue *mq, struct request *req)
                        break;
 
                if (req_op(next) == REQ_OP_DISCARD ||
+                   req_op(next) == REQ_OP_SECURE_ERASE ||
                    req_op(next) == REQ_OP_FLUSH)
                        break;
 
@@ -1801,8 +1802,7 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq,
                do_data_tag = (card->ext_csd.data_tag_unit_size) &&
                        (prq->cmd_flags & REQ_META) &&
                        (rq_data_dir(prq) == WRITE) &&
-                       ((brq->data.blocks * brq->data.blksz) >=
-                        card->ext_csd.data_tag_unit_size);
+                       blk_rq_bytes(prq) >= card->ext_csd.data_tag_unit_size;
                /* Argument of CMD23 */
                packed_cmd_hdr[(i * 2)] = cpu_to_le32(
                        (do_rel_wr ? MMC_CMD23_ARG_REL_WR : 0) |
@@ -1977,8 +1977,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;
@@ -2501,12 +2501,6 @@ force_ro_fail:
        return ret;
 }
 
-#define CID_MANFID_SANDISK     0x2
-#define CID_MANFID_TOSHIBA     0x11
-#define CID_MANFID_MICRON      0x13
-#define CID_MANFID_SAMSUNG     0x15
-#define CID_MANFID_KINGSTON    0x70
-
 static const struct mmc_fixup blk_fixups[] =
 {
        MMC_FIXUP("SEM02G", CID_MANFID_SANDISK, 0x100, add_quirk,