Line data Source code
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 2955305298 : kmem_alloc(size_t size, xfs_km_flags_t flags) 12 : { 13 2955305298 : int retries = 0; 14 2955305298 : gfp_t lflags = kmem_flags_convert(flags); 15 2954888930 : void *ptr; 16 : 17 2954888930 : trace_kmem_alloc(size, flags, _RET_IP_); 18 : 19 2955041257 : do { 20 2955041257 : ptr = kmalloc(size, lflags); 21 2955824108 : if (ptr || (flags & KM_MAYFAIL)) 22 2955824108 : return ptr; 23 0 : if (!(++retries % 100)) 24 0 : 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 0 : memalloc_retry_wait(lflags); 29 : } while (1); 30 : }