{
        struct mmc_packed *packed = mqrq->packed;
 
-       BUG_ON(!packed);
-
        mqrq->cmd_type = MMC_PACKED_NONE;
        packed->nr_entries = MMC_PACKED_NR_ZERO;
        packed->idx_failure = MMC_PACKED_NR_IDX;
        int err, check, status;
        u8 *ext_csd;
 
-       BUG_ON(!packed);
-
        packed->retries--;
        check = mmc_blk_err_check(card, areq);
        err = get_card_status(card, &status, 0);
        u8 max_packed_rw = 0;
        u8 reqs = 0;
 
+       /*
+        * We don't need to check packed for any further
+        * operation of packed stuff as we set MMC_PACKED_NONE
+        * and return zero for reqs if geting null packed. Also
+        * we clean the flag of MMC_BLK_PACKED_CMD to avoid doing
+        * it again when removing blk req.
+        */
+       if (!mqrq->packed) {
+               md->flags &= (~MMC_BLK_PACKED_CMD);
+               goto no_packed;
+       }
+
        if (!(md->flags & MMC_BLK_PACKED_CMD))
                goto no_packed;
 
        u8 hdr_blocks;
        u8 i = 1;
 
-       BUG_ON(!packed);
-
        mqrq->cmd_type = MMC_PACKED_WRITE;
        packed->blocks = 0;
        packed->idx_failure = MMC_PACKED_NR_IDX;
        int idx = packed->idx_failure, i = 0;
        int ret = 0;
 
-       BUG_ON(!packed);
-
        while (!list_empty(&packed->list)) {
                prq = list_entry_rq(packed->list.next);
                if (idx == i) {
        struct request *prq;
        struct mmc_packed *packed = mq_rq->packed;
 
-       BUG_ON(!packed);
-
        while (!list_empty(&packed->list)) {
                prq = list_entry_rq(packed->list.next);
                list_del_init(&prq->queuelist);
        struct request_queue *q = mq->queue;
        struct mmc_packed *packed = mq_rq->packed;
 
-       BUG_ON(!packed);
-
        while (!list_empty(&packed->list)) {
                prq = list_entry_rq(packed->list.prev);
                if (prq->queuelist.prev != &packed->list) {