|
@@ -141,14 +141,14 @@ static int ipcomp_compress(struct xfrm_state *x, struct sk_buff *skb)
|
|
|
const int plen = skb->len;
|
|
|
int dlen = IPCOMP_SCRATCH_SIZE;
|
|
|
u8 *start = skb->data;
|
|
|
- const int cpu = get_cpu();
|
|
|
- u8 *scratch = *per_cpu_ptr(ipcomp_scratches, cpu);
|
|
|
- struct crypto_comp *tfm = *per_cpu_ptr(ipcd->tfms, cpu);
|
|
|
+ struct crypto_comp *tfm;
|
|
|
+ u8 *scratch;
|
|
|
int err;
|
|
|
|
|
|
local_bh_disable();
|
|
|
+ scratch = *this_cpu_ptr(ipcomp_scratches);
|
|
|
+ tfm = *this_cpu_ptr(ipcd->tfms);
|
|
|
err = crypto_comp_compress(tfm, start, plen, scratch, &dlen);
|
|
|
- local_bh_enable();
|
|
|
if (err)
|
|
|
goto out;
|
|
|
|
|
@@ -158,13 +158,13 @@ static int ipcomp_compress(struct xfrm_state *x, struct sk_buff *skb)
|
|
|
}
|
|
|
|
|
|
memcpy(start + sizeof(struct ip_comp_hdr), scratch, dlen);
|
|
|
- put_cpu();
|
|
|
+ local_bh_enable();
|
|
|
|
|
|
pskb_trim(skb, dlen + sizeof(struct ip_comp_hdr));
|
|
|
return 0;
|
|
|
|
|
|
out:
|
|
|
- put_cpu();
|
|
|
+ local_bh_enable();
|
|
|
return err;
|
|
|
}
|
|
|
|