[Ocfs2-commits] smushran commits r2895 - branches/ocfs2-1.2/fs/ocfs2/dlm

svn-commits@oss.oracle.com svn-commits at oss.oracle.com
Thu Apr 20 13:41:42 CDT 2006


Author: smushran
Signed-off-by: mfasheh
Signed-off-by: khackel
Date: 2006-04-20 13:41:40 -0500 (Thu, 20 Apr 2006)
New Revision: 2895

Modified:
   branches/ocfs2-1.2/fs/ocfs2/dlm/dlmdebug.c
   branches/ocfs2-1.2/fs/ocfs2/dlm/dlmdomain.c
   branches/ocfs2-1.2/fs/ocfs2/dlm/dlmfs.c
   branches/ocfs2-1.2/fs/ocfs2/dlm/dlmlock.c
   branches/ocfs2-1.2/fs/ocfs2/dlm/dlmmaster.c
   branches/ocfs2-1.2/fs/ocfs2/dlm/dlmrecovery.c
   branches/ocfs2-1.2/fs/ocfs2/dlm/userdlm.c
Log:
Change mem allocs in DLM from GFP_KERNEL to GFP_NOFS
to avoid deadlocks during dlm operations:
dlmrecovery ==> alloc ==> vm reaping ==> iput ==> dlmlock ==> wait_on_recovery...
Signed-off-by: mfasheh
Signed-off-by: khackel

Modified: branches/ocfs2-1.2/fs/ocfs2/dlm/dlmdebug.c
===================================================================
--- branches/ocfs2-1.2/fs/ocfs2/dlm/dlmdebug.c	2006-04-20 18:21:07 UTC (rev 2894)
+++ branches/ocfs2-1.2/fs/ocfs2/dlm/dlmdebug.c	2006-04-20 18:41:40 UTC (rev 2895)
@@ -177,7 +177,7 @@
 		mlog(ML_ERROR, "user passed too little data: %d bytes\n", len);
 		goto leave;
 	}
-	buf = kmalloc(len+1, GFP_KERNEL);
+	buf = kmalloc(len+1, GFP_NOFS);
 	if (!buf) {
 		mlog(ML_ERROR, "could not alloc %d bytes\n", len+1);
 		ret = -ENOMEM;
@@ -436,7 +436,7 @@
 		mlog(ML_ERROR, "user passed too little data: %d bytes\n", len);
 		goto leave;
 	}
-	buf = kmalloc(len+1, GFP_KERNEL);
+	buf = kmalloc(len+1, GFP_NOFS);
 	if (!buf) {
 		mlog(ML_ERROR, "could not alloc %d bytes\n", len+1);
 		ret = -ENOMEM;

Modified: branches/ocfs2-1.2/fs/ocfs2/dlm/dlmdomain.c
===================================================================
--- branches/ocfs2-1.2/fs/ocfs2/dlm/dlmdomain.c	2006-04-20 18:21:07 UTC (rev 2894)
+++ branches/ocfs2-1.2/fs/ocfs2/dlm/dlmdomain.c	2006-04-20 18:41:40 UTC (rev 2895)
@@ -892,7 +892,7 @@
 
 	mlog_entry("%p", dlm);
 
-	ctxt = kcalloc(1, sizeof(*ctxt), GFP_KERNEL);
+	ctxt = kcalloc(1, sizeof(*ctxt), GFP_NOFS);
 	if (!ctxt) {
 		status = -ENOMEM;
 		mlog_errno(status);
@@ -1187,13 +1187,13 @@
 	int i;
 	struct dlm_ctxt *dlm = NULL;
 
-	dlm = kcalloc(1, sizeof(*dlm), GFP_KERNEL);
+	dlm = kcalloc(1, sizeof(*dlm), GFP_NOFS);
 	if (!dlm) {
 		mlog_errno(-ENOMEM);
 		goto leave;
 	}
 
-	dlm->name = kmalloc(strlen(domain) + 1, GFP_KERNEL);
+	dlm->name = kmalloc(strlen(domain) + 1, GFP_NOFS);
 	if (dlm->name == NULL) {
 		mlog_errno(-ENOMEM);
 		kfree(dlm);
@@ -1201,7 +1201,7 @@
 		goto leave;
 	}
 
-	dlm->lockres_hash = (struct hlist_head *) __get_free_page(GFP_KERNEL);
+	dlm->lockres_hash = (struct hlist_head *) __get_free_page(GFP_NOFS);
 	if (!dlm->lockres_hash) {
 		mlog_errno(-ENOMEM);
 		kfree(dlm->name);

Modified: branches/ocfs2-1.2/fs/ocfs2/dlm/dlmfs.c
===================================================================
--- branches/ocfs2-1.2/fs/ocfs2/dlm/dlmfs.c	2006-04-20 18:21:07 UTC (rev 2894)
+++ branches/ocfs2-1.2/fs/ocfs2/dlm/dlmfs.c	2006-04-20 18:41:40 UTC (rev 2895)
@@ -116,7 +116,7 @@
 	 * doesn't make sense for LVB writes. */
 	file->f_flags &= ~O_APPEND;
 
-	fp = kmalloc(sizeof(*fp), GFP_KERNEL);
+	fp = kmalloc(sizeof(*fp), GFP_NOFS);
 	if (!fp) {
 		status = -ENOMEM;
 		goto bail;
@@ -196,7 +196,7 @@
 	else
 		readlen = count - *ppos;
 
-	lvb_buf = kmalloc(readlen, GFP_KERNEL);
+	lvb_buf = kmalloc(readlen, GFP_NOFS);
 	if (!lvb_buf)
 		return -ENOMEM;
 
@@ -240,7 +240,7 @@
 	else
 		writelen = count - *ppos;
 
-	lvb_buf = kmalloc(writelen, GFP_KERNEL);
+	lvb_buf = kmalloc(writelen, GFP_NOFS);
 	if (!lvb_buf)
 		return -ENOMEM;
 

Modified: branches/ocfs2-1.2/fs/ocfs2/dlm/dlmlock.c
===================================================================
--- branches/ocfs2-1.2/fs/ocfs2/dlm/dlmlock.c	2006-04-20 18:21:07 UTC (rev 2894)
+++ branches/ocfs2-1.2/fs/ocfs2/dlm/dlmlock.c	2006-04-20 18:41:40 UTC (rev 2895)
@@ -408,13 +408,13 @@
 	struct dlm_lock *lock;
 	int kernel_allocated = 0;
 
-	lock = kcalloc(1, sizeof(*lock), GFP_KERNEL);
+	lock = kcalloc(1, sizeof(*lock), GFP_NOFS);
 	if (!lock)
 		return NULL;
 
 	if (!lksb) {
 		/* zero memory only if kernel-allocated */
-		lksb = kcalloc(1, sizeof(*lksb), GFP_KERNEL);
+		lksb = kcalloc(1, sizeof(*lksb), GFP_NOFS);
 		if (!lksb) {
 			kfree(lock);
 			return NULL;

Modified: branches/ocfs2-1.2/fs/ocfs2/dlm/dlmmaster.c
===================================================================
--- branches/ocfs2-1.2/fs/ocfs2/dlm/dlmmaster.c	2006-04-20 18:21:07 UTC (rev 2894)
+++ branches/ocfs2-1.2/fs/ocfs2/dlm/dlmmaster.c	2006-04-20 18:41:40 UTC (rev 2895)
@@ -707,11 +707,11 @@
 {
 	struct dlm_lock_resource *res;
 
-	res = kmalloc(sizeof(struct dlm_lock_resource), GFP_KERNEL);
+	res = kmalloc(sizeof(struct dlm_lock_resource), GFP_NOFS);
 	if (!res)
 		return NULL;
 
-	res->lockname.name = kmalloc(namelen, GFP_KERNEL);
+	res->lockname.name = kmalloc(namelen, GFP_NOFS);
 	if (!res->lockname.name) {
 		kfree(res);
 		return NULL;
@@ -774,7 +774,7 @@
 		mlog(0, "allocating a new resource\n");
 		/* nothing found and we need to allocate one. */
 		alloc_mle = (struct dlm_master_list_entry *)
-			kmem_cache_alloc(dlm_mle_cache, GFP_KERNEL);
+			kmem_cache_alloc(dlm_mle_cache, GFP_NOFS);
 		if (!alloc_mle)
 			goto leave;
 		res = dlm_new_lockres(dlm, lockid, namelen);
@@ -1529,7 +1529,7 @@
 			spin_unlock(&dlm->spinlock);
 
 			mle = (struct dlm_master_list_entry *)
-				kmem_cache_alloc(dlm_mle_cache, GFP_KERNEL);
+				kmem_cache_alloc(dlm_mle_cache, GFP_NOFS);
 			if (!mle) {
 				response = DLM_MASTER_RESP_ERROR;
 				mlog_errno(-ENOMEM);
@@ -1936,7 +1936,7 @@
 			       int ignore_higher, u8 request_from, u32 flags)
 {
 	struct dlm_work_item *item;
-	item = kcalloc(1, sizeof(*item), GFP_KERNEL);
+	item = kcalloc(1, sizeof(*item), GFP_NOFS);
 	if (!item)
 		return -ENOMEM;
 
@@ -2171,14 +2171,14 @@
 	 */
 
 	ret = -ENOMEM;
-	mres = (struct dlm_migratable_lockres *) __get_free_page(GFP_KERNEL);
+	mres = (struct dlm_migratable_lockres *) __get_free_page(GFP_NOFS);
 	if (!mres) {
 		mlog_errno(ret);
 		goto leave;
 	}
 
 	mle = (struct dlm_master_list_entry *) kmem_cache_alloc(dlm_mle_cache,
-								GFP_KERNEL);
+								GFP_NOFS);
 	if (!mle) {
 		mlog_errno(ret);
 		goto leave;
@@ -2632,7 +2632,7 @@
 
 	/* preallocate.. if this fails, abort */
 	mle = (struct dlm_master_list_entry *) kmem_cache_alloc(dlm_mle_cache,
-							 GFP_KERNEL);
+							 GFP_NOFS);
 
 	if (!mle) {
 		ret = -ENOMEM;

Modified: branches/ocfs2-1.2/fs/ocfs2/dlm/dlmrecovery.c
===================================================================
--- branches/ocfs2-1.2/fs/ocfs2/dlm/dlmrecovery.c	2006-04-20 18:21:07 UTC (rev 2894)
+++ branches/ocfs2-1.2/fs/ocfs2/dlm/dlmrecovery.c	2006-04-20 18:41:40 UTC (rev 2895)
@@ -737,7 +737,7 @@
 		}
 		BUG_ON(num == dead_node);
 
-		ndata = kcalloc(1, sizeof(*ndata), GFP_KERNEL);
+		ndata = kcalloc(1, sizeof(*ndata), GFP_NOFS);
 		if (!ndata) {
 			dlm_destroy_recovery_area(dlm, dead_node);
 			return -ENOMEM;
@@ -821,14 +821,14 @@
 	}
 	BUG_ON(lr->dead_node != dlm->reco.dead_node);
 
-	item = kcalloc(1, sizeof(*item), GFP_KERNEL);
+	item = kcalloc(1, sizeof(*item), GFP_NOFS);
 	if (!item) {
 		dlm_put(dlm);
 		return -ENOMEM;
 	}
 
 	/* this will get freed by dlm_request_all_locks_worker */
-	buf = (char *) __get_free_page(GFP_KERNEL);
+	buf = (char *) __get_free_page(GFP_NOFS);
 	if (!buf) {
 		kfree(item);
 		dlm_put(dlm);
@@ -1303,8 +1303,8 @@
 		mlog(0, "all done flag.  all lockres data received!\n");
 
 	ret = -ENOMEM;
-	buf = kmalloc(be16_to_cpu(msg->data_len), GFP_KERNEL);
-	item = kcalloc(1, sizeof(*item), GFP_KERNEL);
+	buf = kmalloc(be16_to_cpu(msg->data_len), GFP_NOFS);
+	item = kcalloc(1, sizeof(*item), GFP_NOFS);
 	if (!buf || !item)
 		goto leave;
 

Modified: branches/ocfs2-1.2/fs/ocfs2/dlm/userdlm.c
===================================================================
--- branches/ocfs2-1.2/fs/ocfs2/dlm/userdlm.c	2006-04-20 18:21:07 UTC (rev 2894)
+++ branches/ocfs2-1.2/fs/ocfs2/dlm/userdlm.c	2006-04-20 18:41:40 UTC (rev 2895)
@@ -672,7 +672,7 @@
 	u32 dlm_key;
 	char *domain;
 
-	domain = kmalloc(name->len + 1, GFP_KERNEL);
+	domain = kmalloc(name->len + 1, GFP_NOFS);
 	if (!domain) {
 		mlog_errno(-ENOMEM);
 		return ERR_PTR(-ENOMEM);




More information about the Ocfs2-commits mailing list