lkml.org 
[lkml]   [2009]   [Oct]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 10/14] drivers/ata/libata: Move dereference after NULL test
    From: Julia Lawall <julia@diku.dk>

    In each case, if the NULL test on qc is needed, then the derefernce
    should be after the NULL test.

    A simplified version of the semantic match that detects this problem is as
    follows (http://coccinelle.lip6.fr/):

    // <smpl>
    @match exists@
    expression x, E;
    identifier fld;
    @@

    * x->fld
    ... when != \(x = E\|&x\)
    * x == NULL
    // </smpl>

    Signed-off-by: Julia Lawall <julia@diku.dk>

    ---
    drivers/ata/libata-core.c | 9 ++++++---
    1 files changed, 6 insertions(+), 3 deletions(-)

    diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
    index b525a09..d02c95c 100644
    --- a/drivers/ata/libata-core.c
    +++ b/drivers/ata/libata-core.c
    @@ -4919,10 +4919,11 @@ struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev)
    */
    void ata_qc_free(struct ata_queued_cmd *qc)
    {
    - struct ata_port *ap = qc->ap;
    + struct ata_port *ap;
    unsigned int tag;

    WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
    + ap = qc->ap;

    qc->flags = 0;
    tag = qc->tag;
    @@ -4934,11 +4935,13 @@ void ata_qc_free(struct ata_queued_cmd *qc)

    void __ata_qc_complete(struct ata_queued_cmd *qc)
    {
    - struct ata_port *ap = qc->ap;
    - struct ata_link *link = qc->dev->link;
    + struct ata_port *ap;
    + struct ata_link *link;

    WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
    WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE));
    + ap = qc->ap;
    + link = qc->dev->link;

    if (likely(qc->flags & ATA_QCFLAG_DMAMAP))
    ata_sg_clean(qc);

    \
     
     \ /
      Last update: 2009-10-17 08:45    [W:4.772 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site