mlx4: fix race accessing page->_count
This is illegal to use atomic_set(&page->_count, ...) even if we 'own' the page. Other entities in the kernel need to use get_page_unless_zero() to get a reference to the page before testing page properties, so we could loose a refcount increment. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ec91698360
commit
98226208c8
|
@ -76,10 +76,10 @@ static int mlx4_alloc_pages(struct mlx4_en_priv *priv,
|
|||
page_alloc->dma = dma;
|
||||
page_alloc->page_offset = frag_info->frag_align;
|
||||
/* Not doing get_page() for each frag is a big win
|
||||
* on asymetric workloads.
|
||||
* on asymetric workloads. Note we can not use atomic_set().
|
||||
*/
|
||||
atomic_set(&page->_count,
|
||||
page_alloc->page_size / frag_info->frag_stride);
|
||||
atomic_add(page_alloc->page_size / frag_info->frag_stride - 1,
|
||||
&page->_count);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue