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 * 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