diff options
author | Bart Van Assche <bvanassche@acm.org> | 2013-08-14 17:42:46 +0200 |
---|---|---|
committer | Robert Love <robert.w.love@intel.com> | 2013-09-04 23:14:21 +0200 |
commit | 1c2c1b4fbd413fd814807768d2aba9023722ed76 (patch) | |
tree | dee7a87acd4deba4343d26a9e8e285a12bb7c1ef /drivers/scsi | |
parent | fcoe: Add missing newlines in debug messages (diff) | |
download | linux-1c2c1b4fbd413fd814807768d2aba9023722ed76.tar.xz linux-1c2c1b4fbd413fd814807768d2aba9023722ed76.zip |
fcoe: Reduce fcoe_sysfs_fcf_add() stack usage
This patch fixes the following compiler warning:
drivers/scsi/fcoe/fcoe_ctlr.c: In function fcoe_sysfs_fcf_add:
drivers/scsi/fcoe/fcoe_ctlr.c:211:1: warning: the frame size of 1480 bytes is larger than 1024 bytes [-Wframe-larger-than=]
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Cc: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/fcoe/fcoe_ctlr.c | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c index 9e83a790aa6b..692c6535fe75 100644 --- a/drivers/scsi/fcoe/fcoe_ctlr.c +++ b/drivers/scsi/fcoe/fcoe_ctlr.c @@ -164,28 +164,30 @@ static int fcoe_sysfs_fcf_add(struct fcoe_fcf *new) { struct fcoe_ctlr *fip = new->fip; struct fcoe_ctlr_device *ctlr_dev = fcoe_ctlr_to_ctlr_dev(fip); - struct fcoe_fcf_device temp, *fcf_dev; - int rc = 0; + struct fcoe_fcf_device *temp, *fcf_dev; + int rc = -ENOMEM; LIBFCOE_FIP_DBG(fip, "New FCF fab %16.16llx mac %pM\n", new->fabric_name, new->fcf_mac); + temp = kzalloc(sizeof(*temp), GFP_KERNEL); + if (!temp) + goto out; + mutex_lock(&ctlr_dev->lock); - temp.fabric_name = new->fabric_name; - temp.switch_name = new->switch_name; - temp.fc_map = new->fc_map; - temp.vfid = new->vfid; - memcpy(temp.mac, new->fcf_mac, ETH_ALEN); - temp.priority = new->pri; - temp.fka_period = new->fka_period; - temp.selected = 0; /* default to unselected */ - - fcf_dev = fcoe_fcf_device_add(ctlr_dev, &temp); - if (unlikely(!fcf_dev)) { - rc = -ENOMEM; - goto out; - } + temp->fabric_name = new->fabric_name; + temp->switch_name = new->switch_name; + temp->fc_map = new->fc_map; + temp->vfid = new->vfid; + memcpy(temp->mac, new->fcf_mac, ETH_ALEN); + temp->priority = new->pri; + temp->fka_period = new->fka_period; + temp->selected = 0; /* default to unselected */ + + fcf_dev = fcoe_fcf_device_add(ctlr_dev, temp); + if (unlikely(!fcf_dev)) + goto unlock; /* * The fcoe_sysfs layer can return a CONNECTED fcf that @@ -204,9 +206,13 @@ static int fcoe_sysfs_fcf_add(struct fcoe_fcf *new) list_add(&new->list, &fip->fcfs); fip->fcf_count++; + rc = 0; -out: +unlock: mutex_unlock(&ctlr_dev->lock); + +out: + kfree(temp); return rc; } |