Эх сурвалжийг харах

cifs: don't use GFP_KERNEL with GFP_NOFS

GFP_KERNEL and GFP_NOFS are mutually exclusive. If you combine them, you end up
with plain GFP_KERNEL which can deadlock in cases where you really want
GFP_NOFS.

Cc: Steve French <sfrench@samba.org>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Pekka Enberg 16 жил өмнө
parent
commit
232087cb73

+ 2 - 4
fs/cifs/misc.c

@@ -150,8 +150,7 @@ cifs_buf_get(void)
    but it may be more efficient to always alloc same size
    but it may be more efficient to always alloc same size
    albeit slightly larger than necessary and maxbuffersize
    albeit slightly larger than necessary and maxbuffersize
    defaults to this and can not be bigger */
    defaults to this and can not be bigger */
-	ret_buf = (struct smb_hdr *) mempool_alloc(cifs_req_poolp,
-						   GFP_KERNEL | GFP_NOFS);
+	ret_buf = mempool_alloc(cifs_req_poolp, GFP_NOFS);
 
 
 	/* clear the first few header bytes */
 	/* clear the first few header bytes */
 	/* for most paths, more is cleared in header_assemble */
 	/* for most paths, more is cleared in header_assemble */
@@ -188,8 +187,7 @@ cifs_small_buf_get(void)
    but it may be more efficient to always alloc same size
    but it may be more efficient to always alloc same size
    albeit slightly larger than necessary and maxbuffersize
    albeit slightly larger than necessary and maxbuffersize
    defaults to this and can not be bigger */
    defaults to this and can not be bigger */
-	ret_buf = (struct smb_hdr *) mempool_alloc(cifs_sm_req_poolp,
-						   GFP_KERNEL | GFP_NOFS);
+	ret_buf = mempool_alloc(cifs_sm_req_poolp, GFP_NOFS);
 	if (ret_buf) {
 	if (ret_buf) {
 	/* No need to clear memory here, cleared in header assemble */
 	/* No need to clear memory here, cleared in header assemble */
 	/*	memset(ret_buf, 0, sizeof(struct smb_hdr) + 27);*/
 	/*	memset(ret_buf, 0, sizeof(struct smb_hdr) + 27);*/

+ 1 - 2
fs/cifs/transport.c

@@ -50,8 +50,7 @@ AllocMidQEntry(const struct smb_hdr *smb_buffer, struct cifsSesInfo *ses)
 		return NULL;
 		return NULL;
 	}
 	}
 
 
-	temp = (struct mid_q_entry *) mempool_alloc(cifs_mid_poolp,
-						    GFP_KERNEL | GFP_NOFS);
+	temp = mempool_alloc(cifs_mid_poolp, GFP_NOFS);
 	if (temp == NULL)
 	if (temp == NULL)
 		return temp;
 		return temp;
 	else {
 	else {