Loading fs/xfs/linux-2.6/kmem.c +11 −6 Original line number Diff line number Diff line Loading @@ -73,14 +73,19 @@ kmem_zalloc_greedy(size_t *size, size_t minsize, size_t maxsize, unsigned int __nocast flags) { void *ptr; size_t kmsize = maxsize; unsigned int kmflags = (flags & ~KM_SLEEP) | KM_NOSLEEP; while (!(ptr = kmem_zalloc(maxsize, flags))) { if ((maxsize >>= 1) <= minsize) { maxsize = minsize; flags = KM_SLEEP; while (!(ptr = kmem_zalloc(kmsize, kmflags))) { if ((kmsize <= minsize) && (flags & KM_NOSLEEP)) break; if ((kmsize >>= 1) <= minsize) { kmsize = minsize; kmflags = flags; } } *size = maxsize; if (ptr) *size = kmsize; return ptr; } Loading Loading
fs/xfs/linux-2.6/kmem.c +11 −6 Original line number Diff line number Diff line Loading @@ -73,14 +73,19 @@ kmem_zalloc_greedy(size_t *size, size_t minsize, size_t maxsize, unsigned int __nocast flags) { void *ptr; size_t kmsize = maxsize; unsigned int kmflags = (flags & ~KM_SLEEP) | KM_NOSLEEP; while (!(ptr = kmem_zalloc(maxsize, flags))) { if ((maxsize >>= 1) <= minsize) { maxsize = minsize; flags = KM_SLEEP; while (!(ptr = kmem_zalloc(kmsize, kmflags))) { if ((kmsize <= minsize) && (flags & KM_NOSLEEP)) break; if ((kmsize >>= 1) <= minsize) { kmsize = minsize; kmflags = flags; } } *size = maxsize; if (ptr) *size = kmsize; return ptr; } Loading