From a73d15e85ea5a2a95d2060d207262333087ecda3 Mon Sep 17 00:00:00 2001 From: "Stephen M. Cameron" Date: Mon, 23 Nov 2009 09:31:48 +0100 Subject: [PATCH] --- yaml --- r: 172961 b: refs/heads/master c: d61c42690c6e2ff093a3d01338dad49f35b1e27b h: refs/heads/master i: 172959: 6685012a2e720835cc9abcdc265f48fbac011785 v: v3 --- [refs] | 2 +- trunk/drivers/block/cciss.c | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 1be9c8016d1e..d3b864c6f865 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 87038c2d5bda2418fda8b1456a0ae81cc3ff5bd8 +refs/heads/master: d61c42690c6e2ff093a3d01338dad49f35b1e27b diff --git a/trunk/drivers/block/cciss.c b/trunk/drivers/block/cciss.c index eab81c6c0ca5..873e594860d3 100644 --- a/trunk/drivers/block/cciss.c +++ b/trunk/drivers/block/cciss.c @@ -4326,10 +4326,15 @@ static int __devinit cciss_init_one(struct pci_dev *pdev, for (k = 0; k < hba[i]->nr_cmds; k++) kfree(hba[i]->scatter_list[k]); kfree(hba[i]->scatter_list); - for (j = 0; j < hba[i]->nr_cmds; j++) { - if (hba[i]->cmd_sg_list[j]) - kfree(hba[i]->cmd_sg_list[j]->sgchain); - kfree(hba[i]->cmd_sg_list[j]); + /* Only free up extra s/g lists if controller supports them */ + if (hba[i]->chainsize > 0) { + for (j = 0; j < hba[i]->nr_cmds; j++) { + if (hba[i]->cmd_sg_list[j]) { + kfree(hba[i]->cmd_sg_list[j]->sgchain); + kfree(hba[i]->cmd_sg_list[j]); + } + } + kfree(hba[i]->cmd_sg_list); } if (hba[i]->cmd_pool) pci_free_consistent(hba[i]->pdev, @@ -4448,9 +4453,15 @@ static void __devexit cciss_remove_one(struct pci_dev *pdev) for (j = 0; j < hba[i]->nr_cmds; j++) kfree(hba[i]->scatter_list[j]); kfree(hba[i]->scatter_list); - for (j = 0; j < hba[i]->nr_cmds; j++) { - kfree(hba[i]->cmd_sg_list[j]->sgchain); - kfree(hba[i]->cmd_sg_list[j]); + /* Only free up extra s/g lists if controller supports them */ + if (hba[i]->chainsize > 0) { + for (j = 0; j < hba[i]->nr_cmds; j++) { + if (hba[i]->cmd_sg_list[j]) { + kfree(hba[i]->cmd_sg_list[j]->sgchain); + kfree(hba[i]->cmd_sg_list[j]); + } + } + kfree(hba[i]->cmd_sg_list); } /* * Deliberately omit pci_disable_device(): it does something nasty to