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
10void *
11kmem_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, flags: 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(gfp_flags: lflags);
29 } while (1);
30}
31

source code of linux/fs/xfs/kmem.c