|
@@ -1140,6 +1140,10 @@ static int set_filter_wr(struct adapter *adapter, int fidx)
|
|
|
struct fw_filter_wr *fwr;
|
|
|
unsigned int ftid;
|
|
|
|
|
|
+ skb = alloc_skb(sizeof(*fwr), GFP_KERNEL);
|
|
|
+ if (!skb)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
/* If the new filter requires loopback Destination MAC and/or VLAN
|
|
|
* rewriting then we need to allocate a Layer 2 Table (L2T) entry for
|
|
|
* the filter.
|
|
@@ -1147,19 +1151,21 @@ static int set_filter_wr(struct adapter *adapter, int fidx)
|
|
|
if (f->fs.newdmac || f->fs.newvlan) {
|
|
|
/* allocate L2T entry for new filter */
|
|
|
f->l2t = t4_l2t_alloc_switching(adapter->l2t);
|
|
|
- if (f->l2t == NULL)
|
|
|
+ if (f->l2t == NULL) {
|
|
|
+ kfree_skb(skb);
|
|
|
return -EAGAIN;
|
|
|
+ }
|
|
|
if (t4_l2t_set_switching(adapter, f->l2t, f->fs.vlan,
|
|
|
f->fs.eport, f->fs.dmac)) {
|
|
|
cxgb4_l2t_release(f->l2t);
|
|
|
f->l2t = NULL;
|
|
|
+ kfree_skb(skb);
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ftid = adapter->tids.ftid_base + fidx;
|
|
|
|
|
|
- skb = alloc_skb(sizeof(*fwr), GFP_KERNEL | __GFP_NOFAIL);
|
|
|
fwr = (struct fw_filter_wr *)__skb_put(skb, sizeof(*fwr));
|
|
|
memset(fwr, 0, sizeof(*fwr));
|
|
|
|
|
@@ -1257,7 +1263,10 @@ static int del_filter_wr(struct adapter *adapter, int fidx)
|
|
|
len = sizeof(*fwr);
|
|
|
ftid = adapter->tids.ftid_base + fidx;
|
|
|
|
|
|
- skb = alloc_skb(len, GFP_KERNEL | __GFP_NOFAIL);
|
|
|
+ skb = alloc_skb(len, GFP_KERNEL);
|
|
|
+ if (!skb)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
fwr = (struct fw_filter_wr *)__skb_put(skb, len);
|
|
|
t4_mk_filtdelwr(ftid, fwr, adapter->sge.fw_evtq.abs_id);
|
|
|
|