Commit 22f19f67 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'xarray-5.18a' of git://git.infradead.org/users/willy/xarray

Pull xarray fixes from Matthew Wilcox:
 "Syzbot found a nasty race between large page splitting and page
  lookup. Details in the commit log, but fortunately it has a reliable
  reproducer. I thought it better to send this one to you straight away.

  Also fix the test suite build for kmem_cache_alloc_lru()"

* tag 'xarray-5.18a' of git://git.infradead.org/users/willy/xarray:
  XArray: Disallow sibling entries of nodes
  tools: Add kmem_cache_alloc_lru()
parents 88c5060d 63b1898f
...@@ -207,6 +207,8 @@ static void *xas_descend(struct xa_state *xas, struct xa_node *node) ...@@ -207,6 +207,8 @@ static void *xas_descend(struct xa_state *xas, struct xa_node *node)
if (xa_is_sibling(entry)) { if (xa_is_sibling(entry)) {
offset = xa_to_sibling(entry); offset = xa_to_sibling(entry);
entry = xa_entry(xas->xa, node, offset); entry = xa_entry(xas->xa, node, offset);
if (node->shift && xa_is_node(entry))
entry = XA_RETRY_ENTRY;
} }
xas->xa_offset = offset; xas->xa_offset = offset;
......
...@@ -28,7 +28,13 @@ static inline void *kzalloc(size_t size, gfp_t gfp) ...@@ -28,7 +28,13 @@ static inline void *kzalloc(size_t size, gfp_t gfp)
return kmalloc(size, gfp | __GFP_ZERO); return kmalloc(size, gfp | __GFP_ZERO);
} }
void *kmem_cache_alloc(struct kmem_cache *cachep, int flags); struct list_lru;
void *kmem_cache_alloc_lru(struct kmem_cache *cachep, struct list_lru *, int flags);
static inline void *kmem_cache_alloc(struct kmem_cache *cachep, int flags)
{
return kmem_cache_alloc_lru(cachep, NULL, flags);
}
void kmem_cache_free(struct kmem_cache *cachep, void *objp); void kmem_cache_free(struct kmem_cache *cachep, void *objp);
struct kmem_cache *kmem_cache_create(const char *name, unsigned int size, struct kmem_cache *kmem_cache_create(const char *name, unsigned int size,
......
...@@ -25,7 +25,8 @@ struct kmem_cache { ...@@ -25,7 +25,8 @@ struct kmem_cache {
void (*ctor)(void *); void (*ctor)(void *);
}; };
void *kmem_cache_alloc(struct kmem_cache *cachep, int gfp) void *kmem_cache_alloc_lru(struct kmem_cache *cachep, struct list_lru *lru,
int gfp)
{ {
void *p; void *p;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment