diff options
Diffstat (limited to 'net/tipc/crypto.c')
| -rw-r--r-- | net/tipc/crypto.c | 27 | 
1 files changed, 8 insertions, 19 deletions
| diff --git a/net/tipc/crypto.c b/net/tipc/crypto.c index b4d9419a015b..9325479295b8 100644 --- a/net/tipc/crypto.c +++ b/net/tipc/crypto.c @@ -524,7 +524,7 @@ static int tipc_aead_init(struct tipc_aead **aead, struct tipc_aead_key *ukey,  		return -EEXIST;  	/* Allocate a new AEAD */ -	tmp = kzalloc(sizeof(*tmp), GFP_KERNEL); +	tmp = kzalloc(sizeof(*tmp), GFP_ATOMIC);  	if (unlikely(!tmp))  		return -ENOMEM; @@ -761,21 +761,10 @@ static int tipc_aead_encrypt(struct tipc_aead *aead, struct sk_buff *skb,  			 skb_tailroom(skb), tailen);  	} -	if (unlikely(!skb_cloned(skb) && tailen <= skb_tailroom(skb))) { -		nsg = 1; -		trailer = skb; -	} else { -		/* TODO: We could avoid skb_cow_data() if skb has no frag_list -		 * e.g. by skb_fill_page_desc() to add another page to the skb -		 * with the wanted tailen... However, page skbs look not often, -		 * so take it easy now! -		 * Cloned skbs e.g. from link_xmit() seems no choice though :( -		 */ -		nsg = skb_cow_data(skb, tailen, &trailer); -		if (unlikely(nsg < 0)) { -			pr_err("TX: skb_cow_data() returned %d\n", nsg); -			return nsg; -		} +	nsg = skb_cow_data(skb, tailen, &trailer); +	if (unlikely(nsg < 0)) { +		pr_err("TX: skb_cow_data() returned %d\n", nsg); +		return nsg;  	}  	pskb_put(skb, trailer, tailen); @@ -1474,7 +1463,7 @@ int tipc_crypto_start(struct tipc_crypto **crypto, struct net *net,  		return -EEXIST;  	/* Allocate crypto */ -	c = kzalloc(sizeof(*c), GFP_KERNEL); +	c = kzalloc(sizeof(*c), GFP_ATOMIC);  	if (!c)  		return -ENOMEM; @@ -1488,7 +1477,7 @@ int tipc_crypto_start(struct tipc_crypto **crypto, struct net *net,  	}  	/* Allocate statistic structure */ -	c->stats = alloc_percpu(struct tipc_crypto_stats); +	c->stats = alloc_percpu_gfp(struct tipc_crypto_stats, GFP_ATOMIC);  	if (!c->stats) {  		if (c->wq)  			destroy_workqueue(c->wq); @@ -2461,7 +2450,7 @@ static void tipc_crypto_work_tx(struct work_struct *work)  	}  	/* Lets duplicate it first */ -	skey = kmemdup(aead->key, tipc_aead_key_size(aead->key), GFP_KERNEL); +	skey = kmemdup(aead->key, tipc_aead_key_size(aead->key), GFP_ATOMIC);  	rcu_read_unlock();  	/* Now, generate new key, initiate & distribute it */ |