10b61f8a4SDave Chinner // SPDX-License-Identifier: GPL-2.0
2c59d87c4SChristoph Hellwig /*
3c59d87c4SChristoph Hellwig * Copyright (c) 2000-2005 Silicon Graphics, Inc.
4c59d87c4SChristoph Hellwig * All Rights Reserved.
5c59d87c4SChristoph Hellwig */
60ad95687SDave Chinner #include "xfs.h"
7c59d87c4SChristoph Hellwig #include "xfs_message.h"
80ad95687SDave Chinner #include "xfs_trace.h"
9c59d87c4SChristoph Hellwig
10c59d87c4SChristoph Hellwig void *
kmem_alloc(size_t size,xfs_km_flags_t flags)1177ba7877SAl Viro kmem_alloc(size_t size, xfs_km_flags_t flags)
12c59d87c4SChristoph Hellwig {
13c59d87c4SChristoph Hellwig int retries = 0;
14c59d87c4SChristoph Hellwig gfp_t lflags = kmem_flags_convert(flags);
15c59d87c4SChristoph Hellwig void *ptr;
16c59d87c4SChristoph Hellwig
170ad95687SDave Chinner trace_kmem_alloc(size, flags, _RET_IP_);
180ad95687SDave Chinner
19c59d87c4SChristoph Hellwig do {
20c59d87c4SChristoph Hellwig ptr = kmalloc(size, lflags);
21707e0ddaSTetsuo Handa if (ptr || (flags & KM_MAYFAIL))
22c59d87c4SChristoph Hellwig return ptr;
23c59d87c4SChristoph Hellwig if (!(++retries % 100))
24c59d87c4SChristoph Hellwig xfs_err(NULL,
25847f9f68SEric Sandeen "%s(%u) possible memory allocation deadlock size %u in %s (mode:0x%x)",
265bf97b1cSTetsuo Handa current->comm, current->pid,
27847f9f68SEric Sandeen (unsigned int)size, __func__, lflags);
28*4034247aSNeilBrown memalloc_retry_wait(lflags);
29c59d87c4SChristoph Hellwig } while (1);
30c59d87c4SChristoph Hellwig }
31