lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Thu, 25 Aug 2011 00:21:03 +0900
From:	NamJae Jeon <linkinjeon@...il.com>
To:	Kyungmin Park <kmpark@...radead.org>
Cc:	linux-mmc@...r.kernel.org, linux-kernel@...r.kernel.org,
	Chris Ball <cjb@...top.org>, linus.walleij@...aro.org
Subject: Re: RFC : mmc: mmc_blk_issue_secdiscard_rq() and mmc_blk_issue_discard_rq()
 effectively merged into one.

Hi. Park.

I understand. Thanks for your reply.

2011/8/24 Kyungmin Park <kmpark@...radead.org>:
> Hi,
>
> On Wed, Aug 24, 2011 at 2:09 PM, NamJae Jeon <linkinjeon@...il.com> wrote:
>> Hi.
>>
>> I am wordering why mmc_blk_issue_secdiscard_rq() and
>> mmc_blk_issue_discard_rq() is seperated.
>> So I try to make mmc_blk_issue_secdiscard_rq() and
>> mmc_blk_issue_discard_rq() effectively merged into one.
>>
>> I want to know your opinion.
>
> I think not special reason. It can merge one function. but note that
> secdiscard function is rarely called. there's only one path from
> BLKSECDISCARD ioctl.
>
> however discard is different. it's called relatively frequently if you
> turn on discard mount option. or often when batched discard.
> So it's helpful to reduce the code size if one function is used. it's
> more helpful to optimize the code flow when discard is used.
>
> Thank you,
> Kyungmin Park
>>
>> Thanks.
>>
>> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req)
>> {
>>        struct mmc_blk_data *md = mq->data;
>>        struct mmc_card *card = md->queue.card;
>>        unsigned int from, nr, arg;
>>        int err = 0;
>>        from = blk_rq_pos(req);
>>        nr = blk_rq_sectors(req);
>>        if (req->cmd_flags & REQ_SECURE) {
>>                if (!mmc_can_secure_erase_trim(card)) {
>>                        err = -EOPNOTSUPP;
>>                        goto out;
>>                }
>>                if(mmc_can_trim(card) &&
>> !mmc_erase_group_aligned(card, from, nr))
>>                        arg = MMC_SECURE_TRIM1_ARG;
>>                else
>>                        arg = MMC_SECURE_ERASE_ARG;
>>        }
>>        else {
>>                if (!mmc_can_erase(card)) {
>>                        err = -EOPNOTSUPP;
>>                        goto out;
>>                }
>>                if (mmc_can_trim(card))
>>                        arg = MMC_TRIM_ARG;
>>                else
>>                        arg = MMC_ERASE_ARG;
>>        }
>>
>>        if (card->quirks & MMC_QUIRK_INAND_CMD38) {
>>                if(req->cmd_flags & REQ_SECURE)
>>                        err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>>                                        NAND_CMD38_ARG_EXT_CSD,
>>                                        arg == MMC_SECURE_TRIM1_ARG ?
>>                                        INAND_CMD38_ARG_SECTRIM1 :
>>                                        INAND_CMD38_ARG_SECERASE,
>>                                        0);
>>                else
>>                        err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>>                                        INAND_CMD38_ARG_EXT_CSD,
>>                                        arg == MMC_TRIM_ARG ?
>>                                        INAND_CMD38_ARG_TRIM :
>>                                        INAND_CMD38_ARG_ERASE,
>>                                        0);
>>                if (err)
>>                        goto out;
>>        }
>>        err = mmc_erase(card, from, nr, arg);
>>        if (!err && arg == MMC_SECURE_TRIM1_ARG) {
>>                if (card->quirks & MMC_QUIRK_INAND_CMD38) {
>>                        err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>>                                         INAND_CMD38_ARG_EXT_CSD,
>>                                         INAND_CMD38_ARG_SECTRIM2,
>>                                         0);
>>                        if (err)
>>                                goto out;
>>                }
>>                err = mmc_erase(card, from, nr, MMC_SECURE_TRIM2_ARG);
>>        }
>> out:
>>        spin_lock_irq(&md->lock);
>>        __blk_end_request(req, err, blk_rq_bytes(req));
>>        spin_unlock_irq(&md->lock);
>>        return err ? 0 : 1;
>> }
>>
>>
>> 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);
>>        ret = mmc_blk_part_switch(card, md);
>>        if (ret) {
>>                ret = 0;
>>                goto out;
>>        }
>>        if (req->cmd_flags & REQ_DISCARD) {
>>                ret = mmc_blk_issue_discard_rq(mq, req);
>>        } else if (req->cmd_flags & REQ_FLUSH) {
>>                ret = mmc_blk_issue_flush(mq, req);
>>        } else {
>>                ret = mmc_blk_issue_rw_rq(mq, req);
>>        }
>> out:
>>        mmc_release_host(card->host);
>>        return ret;
>> }
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>> the body of a message to majordomo@...r.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ