diff options
Diffstat (limited to 'mm/slub.c')
| -rw-r--r-- | mm/slub.c | 4 |
1 files changed, 3 insertions, 1 deletions
| @@ -1628,9 +1628,11 @@ static __always_inline void *slab_alloc(struct kmem_cache *s, | |||
| 1628 | void **object; | 1628 | void **object; |
| 1629 | struct kmem_cache_cpu *c; | 1629 | struct kmem_cache_cpu *c; |
| 1630 | unsigned long flags; | 1630 | unsigned long flags; |
| 1631 | unsigned int objsize; | ||
| 1631 | 1632 | ||
| 1632 | local_irq_save(flags); | 1633 | local_irq_save(flags); |
| 1633 | c = get_cpu_slab(s, smp_processor_id()); | 1634 | c = get_cpu_slab(s, smp_processor_id()); |
| 1635 | objsize = c->objsize; | ||
| 1634 | if (unlikely(!c->freelist || !node_match(c, node))) | 1636 | if (unlikely(!c->freelist || !node_match(c, node))) |
| 1635 | 1637 | ||
| 1636 | object = __slab_alloc(s, gfpflags, node, addr, c); | 1638 | object = __slab_alloc(s, gfpflags, node, addr, c); |
| @@ -1643,7 +1645,7 @@ static __always_inline void *slab_alloc(struct kmem_cache *s, | |||
| 1643 | local_irq_restore(flags); | 1645 | local_irq_restore(flags); |
| 1644 | 1646 | ||
| 1645 | if (unlikely((gfpflags & __GFP_ZERO) && object)) | 1647 | if (unlikely((gfpflags & __GFP_ZERO) && object)) |
| 1646 | memset(object, 0, c->objsize); | 1648 | memset(object, 0, objsize); |
| 1647 | 1649 | ||
| 1648 | return object; | 1650 | return object; |
| 1649 | } | 1651 | } |
