mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-04 01:57:59 +00:00
GFS2: Use GFP_NOFS when allocating glocks
Normally GFP_KERNEL is ok here, but there is now a rarely used code path relating to deallocation of unlinked inodes (in certain corner cases) which if hit at times of memory shortage can cause recursion while trying to free memory. One solution would be to try and move the gfs2_glock_get() call so that it is no longer called while another glock is held, but that doesn't look at all easy, so GFP_NOFS is the best solution for the time being. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
94a09a3999
commit
fe0bbd2986
@ -731,14 +731,14 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
|
||||
cachep = gfs2_glock_aspace_cachep;
|
||||
else
|
||||
cachep = gfs2_glock_cachep;
|
||||
gl = kmem_cache_alloc(cachep, GFP_KERNEL);
|
||||
gl = kmem_cache_alloc(cachep, GFP_NOFS);
|
||||
if (!gl)
|
||||
return -ENOMEM;
|
||||
|
||||
memset(&gl->gl_lksb, 0, sizeof(struct dlm_lksb));
|
||||
|
||||
if (glops->go_flags & GLOF_LVB) {
|
||||
gl->gl_lksb.sb_lvbptr = kzalloc(GFS2_MIN_LVB_SIZE, GFP_KERNEL);
|
||||
gl->gl_lksb.sb_lvbptr = kzalloc(GFS2_MIN_LVB_SIZE, GFP_NOFS);
|
||||
if (!gl->gl_lksb.sb_lvbptr) {
|
||||
kmem_cache_free(cachep, gl);
|
||||
return -ENOMEM;
|
||||
|
Loading…
x
Reference in New Issue
Block a user