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>
This commit is contained in:
Bart Van Assche 2013-08-14 15:42:46 +00:00 committed by Robert Love
parent 465b87bfe9
commit 1c2c1b4fbd
1 changed files with 22 additions and 16 deletions

View File

@ -164,28 +164,30 @@ static int fcoe_sysfs_fcf_add(struct fcoe_fcf *new)
{ {
struct fcoe_ctlr *fip = new->fip; struct fcoe_ctlr *fip = new->fip;
struct fcoe_ctlr_device *ctlr_dev = fcoe_ctlr_to_ctlr_dev(fip); struct fcoe_ctlr_device *ctlr_dev = fcoe_ctlr_to_ctlr_dev(fip);
struct fcoe_fcf_device temp, *fcf_dev; struct fcoe_fcf_device *temp, *fcf_dev;
int rc = 0; int rc = -ENOMEM;
LIBFCOE_FIP_DBG(fip, "New FCF fab %16.16llx mac %pM\n", LIBFCOE_FIP_DBG(fip, "New FCF fab %16.16llx mac %pM\n",
new->fabric_name, new->fcf_mac); new->fabric_name, new->fcf_mac);
temp = kzalloc(sizeof(*temp), GFP_KERNEL);
if (!temp)
goto out;
mutex_lock(&ctlr_dev->lock); mutex_lock(&ctlr_dev->lock);
temp.fabric_name = new->fabric_name; temp->fabric_name = new->fabric_name;
temp.switch_name = new->switch_name; temp->switch_name = new->switch_name;
temp.fc_map = new->fc_map; temp->fc_map = new->fc_map;
temp.vfid = new->vfid; temp->vfid = new->vfid;
memcpy(temp.mac, new->fcf_mac, ETH_ALEN); memcpy(temp->mac, new->fcf_mac, ETH_ALEN);
temp.priority = new->pri; temp->priority = new->pri;
temp.fka_period = new->fka_period; temp->fka_period = new->fka_period;
temp.selected = 0; /* default to unselected */ temp->selected = 0; /* default to unselected */
fcf_dev = fcoe_fcf_device_add(ctlr_dev, &temp); fcf_dev = fcoe_fcf_device_add(ctlr_dev, temp);
if (unlikely(!fcf_dev)) { if (unlikely(!fcf_dev))
rc = -ENOMEM; goto unlock;
goto out;
}
/* /*
* The fcoe_sysfs layer can return a CONNECTED fcf that * 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); list_add(&new->list, &fip->fcfs);
fip->fcf_count++; fip->fcf_count++;
rc = 0;
unlock:
mutex_unlock(&ctlr_dev->lock);
out: out:
mutex_unlock(&ctlr_dev->lock); kfree(temp);
return rc; return rc;
} }