Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1104016 authored by Julia Lawall's avatar Julia Lawall Committed by Jeff Garzik
Browse files

drivers/ata/libata: Move dereference after NULL test

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: default avatarJulia Lawall <julia@diku.dk>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent e65cc194
Loading
Loading
Loading
Loading
+6 −3
Original line number Original line Diff line number Diff line
@@ -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)
void ata_qc_free(struct ata_queued_cmd *qc)
{
{
	struct ata_port *ap = qc->ap;
	struct ata_port *ap;
	unsigned int tag;
	unsigned int tag;


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


	qc->flags = 0;
	qc->flags = 0;
	tag = qc->tag;
	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)
void __ata_qc_complete(struct ata_queued_cmd *qc)
{
{
	struct ata_port *ap = qc->ap;
	struct ata_port *ap;
	struct ata_link *link = qc->dev->link;
	struct ata_link *link;


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


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