소스 검색

[GFS2] Fix deadlock in memory allocation

We must not call GFP_KERNEL memory allocations while we
are holding the log lock (read or write) since that may
trigger a log flush resulting in a deadlock.

Eventually we need to fix the locking in log.c, for now
this solves the problem at the expense of freeing up memory
as fast as we would like to. This needs to be revisited
later on.

Cc: Kevin Anderson <kanderso@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Steven Whitehouse 19 년 전
부모
커밋
f3bba03fd1
1개의 변경된 파일1개의 추가작업 그리고 1개의 파일을 삭제
  1. 1 1
      fs/gfs2/meta_io.c

+ 1 - 1
fs/gfs2/meta_io.c

@@ -75,7 +75,7 @@ struct inode *gfs2_aspace_get(struct gfs2_sbd *sdp)
 
 	aspace = new_inode(sdp->sd_vfs);
 	if (aspace) {
-		mapping_set_gfp_mask(aspace->i_mapping, GFP_KERNEL);
+		mapping_set_gfp_mask(aspace->i_mapping, GFP_NOFS);
 		aspace->i_mapping->a_ops = &aspace_aops;
 		aspace->i_size = ~0ULL;
 		aspace->u.generic_ip = NULL;