mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-19 10:06:08 +07:00
CacheFiles: Downgrade the requirements passed to the allocator
Downgrade the requirements passed to the allocator in the gfp flags parameter. FS-Cache/CacheFiles can handle OOM conditions simply by aborting the attempt to store an object or a page in the cache. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
c4d6d8dbf3
commit
5f4f9f4af1
@ -41,12 +41,12 @@ static struct fscache_object *cachefiles_alloc_object(
|
|||||||
|
|
||||||
_enter("{%s},%p,", cache->cache.identifier, cookie);
|
_enter("{%s},%p,", cache->cache.identifier, cookie);
|
||||||
|
|
||||||
lookup_data = kmalloc(sizeof(*lookup_data), GFP_KERNEL);
|
lookup_data = kmalloc(sizeof(*lookup_data), cachefiles_gfp);
|
||||||
if (!lookup_data)
|
if (!lookup_data)
|
||||||
goto nomem_lookup_data;
|
goto nomem_lookup_data;
|
||||||
|
|
||||||
/* create a new object record and a temporary leaf image */
|
/* create a new object record and a temporary leaf image */
|
||||||
object = kmem_cache_alloc(cachefiles_object_jar, GFP_KERNEL);
|
object = kmem_cache_alloc(cachefiles_object_jar, cachefiles_gfp);
|
||||||
if (!object)
|
if (!object)
|
||||||
goto nomem_object;
|
goto nomem_object;
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ static struct fscache_object *cachefiles_alloc_object(
|
|||||||
* - stick the length on the front and leave space on the back for the
|
* - stick the length on the front and leave space on the back for the
|
||||||
* encoder
|
* encoder
|
||||||
*/
|
*/
|
||||||
buffer = kmalloc((2 + 512) + 3, GFP_KERNEL);
|
buffer = kmalloc((2 + 512) + 3, cachefiles_gfp);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
goto nomem_buffer;
|
goto nomem_buffer;
|
||||||
|
|
||||||
@ -219,7 +219,7 @@ static void cachefiles_update_object(struct fscache_object *_object)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auxdata = kmalloc(2 + 512 + 3, GFP_KERNEL);
|
auxdata = kmalloc(2 + 512 + 3, cachefiles_gfp);
|
||||||
if (!auxdata) {
|
if (!auxdata) {
|
||||||
_leave(" [nomem]");
|
_leave(" [nomem]");
|
||||||
return;
|
return;
|
||||||
|
@ -23,6 +23,8 @@ extern unsigned cachefiles_debug;
|
|||||||
#define CACHEFILES_DEBUG_KLEAVE 2
|
#define CACHEFILES_DEBUG_KLEAVE 2
|
||||||
#define CACHEFILES_DEBUG_KDEBUG 4
|
#define CACHEFILES_DEBUG_KDEBUG 4
|
||||||
|
|
||||||
|
#define cachefiles_gfp (__GFP_WAIT | __GFP_NORETRY | __GFP_NOMEMALLOC)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* node records
|
* node records
|
||||||
*/
|
*/
|
||||||
|
@ -78,7 +78,7 @@ char *cachefiles_cook_key(const u8 *raw, int keylen, uint8_t type)
|
|||||||
|
|
||||||
_debug("max: %d", max);
|
_debug("max: %d", max);
|
||||||
|
|
||||||
key = kmalloc(max, GFP_KERNEL);
|
key = kmalloc(max, cachefiles_gfp);
|
||||||
if (!key)
|
if (!key)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ static int cachefiles_read_backing_file_one(struct cachefiles_object *object,
|
|||||||
_debug("read back %p{%lu,%d}",
|
_debug("read back %p{%lu,%d}",
|
||||||
netpage, netpage->index, page_count(netpage));
|
netpage, netpage->index, page_count(netpage));
|
||||||
|
|
||||||
monitor = kzalloc(sizeof(*monitor), GFP_KERNEL);
|
monitor = kzalloc(sizeof(*monitor), cachefiles_gfp);
|
||||||
if (!monitor)
|
if (!monitor)
|
||||||
goto nomem;
|
goto nomem;
|
||||||
|
|
||||||
@ -257,13 +257,14 @@ static int cachefiles_read_backing_file_one(struct cachefiles_object *object,
|
|||||||
goto backing_page_already_present;
|
goto backing_page_already_present;
|
||||||
|
|
||||||
if (!newpage) {
|
if (!newpage) {
|
||||||
newpage = page_cache_alloc_cold(bmapping);
|
newpage = __page_cache_alloc(cachefiles_gfp |
|
||||||
|
__GFP_COLD);
|
||||||
if (!newpage)
|
if (!newpage)
|
||||||
goto nomem_monitor;
|
goto nomem_monitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = add_to_page_cache(newpage, bmapping,
|
ret = add_to_page_cache(newpage, bmapping,
|
||||||
netpage->index, GFP_KERNEL);
|
netpage->index, cachefiles_gfp);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
goto installed_new_backing_page;
|
goto installed_new_backing_page;
|
||||||
if (ret != -EEXIST)
|
if (ret != -EEXIST)
|
||||||
@ -481,7 +482,7 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object,
|
|||||||
netpage, netpage->index, page_count(netpage));
|
netpage, netpage->index, page_count(netpage));
|
||||||
|
|
||||||
if (!monitor) {
|
if (!monitor) {
|
||||||
monitor = kzalloc(sizeof(*monitor), GFP_KERNEL);
|
monitor = kzalloc(sizeof(*monitor), cachefiles_gfp);
|
||||||
if (!monitor)
|
if (!monitor)
|
||||||
goto nomem;
|
goto nomem;
|
||||||
|
|
||||||
@ -496,13 +497,14 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object,
|
|||||||
goto backing_page_already_present;
|
goto backing_page_already_present;
|
||||||
|
|
||||||
if (!newpage) {
|
if (!newpage) {
|
||||||
newpage = page_cache_alloc_cold(bmapping);
|
newpage = __page_cache_alloc(cachefiles_gfp |
|
||||||
|
__GFP_COLD);
|
||||||
if (!newpage)
|
if (!newpage)
|
||||||
goto nomem;
|
goto nomem;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = add_to_page_cache(newpage, bmapping,
|
ret = add_to_page_cache(newpage, bmapping,
|
||||||
netpage->index, GFP_KERNEL);
|
netpage->index, cachefiles_gfp);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
goto installed_new_backing_page;
|
goto installed_new_backing_page;
|
||||||
if (ret != -EEXIST)
|
if (ret != -EEXIST)
|
||||||
@ -532,7 +534,7 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object,
|
|||||||
_debug("- monitor add");
|
_debug("- monitor add");
|
||||||
|
|
||||||
ret = add_to_page_cache(netpage, op->mapping, netpage->index,
|
ret = add_to_page_cache(netpage, op->mapping, netpage->index,
|
||||||
GFP_KERNEL);
|
cachefiles_gfp);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (ret == -EEXIST) {
|
if (ret == -EEXIST) {
|
||||||
page_cache_release(netpage);
|
page_cache_release(netpage);
|
||||||
@ -608,7 +610,7 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object,
|
|||||||
_debug("- uptodate");
|
_debug("- uptodate");
|
||||||
|
|
||||||
ret = add_to_page_cache(netpage, op->mapping, netpage->index,
|
ret = add_to_page_cache(netpage, op->mapping, netpage->index,
|
||||||
GFP_KERNEL);
|
cachefiles_gfp);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (ret == -EEXIST) {
|
if (ret == -EEXIST) {
|
||||||
page_cache_release(netpage);
|
page_cache_release(netpage);
|
||||||
|
@ -174,7 +174,7 @@ int cachefiles_check_object_xattr(struct cachefiles_object *object,
|
|||||||
ASSERT(dentry);
|
ASSERT(dentry);
|
||||||
ASSERT(dentry->d_inode);
|
ASSERT(dentry->d_inode);
|
||||||
|
|
||||||
auxbuf = kmalloc(sizeof(struct cachefiles_xattr) + 512, GFP_KERNEL);
|
auxbuf = kmalloc(sizeof(struct cachefiles_xattr) + 512, cachefiles_gfp);
|
||||||
if (!auxbuf) {
|
if (!auxbuf) {
|
||||||
_leave(" = -ENOMEM");
|
_leave(" = -ENOMEM");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -759,7 +759,7 @@ int __fscache_write_page(struct fscache_cookie *cookie,
|
|||||||
|
|
||||||
fscache_stat(&fscache_n_stores);
|
fscache_stat(&fscache_n_stores);
|
||||||
|
|
||||||
op = kzalloc(sizeof(*op), GFP_NOIO);
|
op = kzalloc(sizeof(*op), GFP_NOIO | __GFP_NOMEMALLOC | __GFP_NORETRY);
|
||||||
if (!op)
|
if (!op)
|
||||||
goto nomem;
|
goto nomem;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user