Dear maintainers
     Some damaged sd card always report its state is PROGRAMMING.
     The code paste below in block.c(linux kernel 3.4) will be a dead loop.
     
     /*
         * Everything else is either success, or a data error of some
         * kind.  If it was a write, we may have transitioned to
         * program mode, which we have to wait for it to complete.
         */
        if (!mmc_host_is_spi(card->host) && rq_data_dir(req) != READ) {
                u32 status;
                do {
                        int err = get_card_status(card, &status, 5);
                        if (err) {
                                pr_err("%s: error %d requesting status\n",
                                       req->rq_disk->disk_name, err);
                                return MMC_BLK_CMD_ERR;
                        }
                        /*
                         * Some cards mishandle the status bits,
                         * so make sure to check both the busy
                         * indication and the card state.
                         */
                } while (!(status & R1_READY_FOR_DATA) ||
                         (R1_CURRENT_STATE(status) == R1_STATE_PRG));
        }

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to