1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
4 * All Rights Reserved.
5 */
6 #include "xfs.h"
7 #include "xfs_message.h"
8 #include "xfs_trace.h"
9
10 void *
kmem_alloc(size_t size,xfs_km_flags_t flags)11 kmem_alloc(size_t size, xfs_km_flags_t flags)
12 {
13 int retries = 0;
14 gfp_t lflags = kmem_flags_convert(flags);
15 void *ptr;
16
17 trace_kmem_alloc(size, flags, _RET_IP_);
18
19 do {
20 ptr = kmalloc(size, lflags);
21 if (ptr || (flags & KM_MAYFAIL))
22 return ptr;
23 if (!(++retries % 100))
24 xfs_err(NULL,
25 "%s(%u) possible memory allocation deadlock size %u in %s (mode:0x%x)",
26 current->comm, current->pid,
27 (unsigned int)size, __func__, lflags);
28 memalloc_retry_wait(lflags);
29 } while (1);
30 }
31