[Ocfs2-commits] mfasheh commits r1302 - trunk/src

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Thu Jul 22 22:05:18 CDT 2004


Author: mfasheh
Date: 2004-07-22 21:05:16 -0500 (Thu, 22 Jul 2004)
New Revision: 1302

Modified:
   trunk/src/nm.c
   trunk/src/vote.c
Log:
* fix the readdir locking:
   - we weren't flushing the journal in the case of a busy directory.
   - set the node bit on a "try again" response from the other node
   - don't print an error in the "try again" case...

* make the error message in ocfs_send_dlm_request_msg more
  informative.



Modified: trunk/src/nm.c
===================================================================
--- trunk/src/nm.c	2004-07-23 01:17:22 UTC (rev 1301)
+++ trunk/src/nm.c	2004-07-23 02:05:16 UTC (rev 1302)
@@ -959,6 +959,22 @@
 			OCFS_ASSERT(lockres->readonly_node==osb->node_num ||
 				    lockres->readonly_node==OCFS_INVALID_NODE_NUM);
 
+			if (lockres->lock_holders > 0) {
+#ifdef VERBOSE_PROCESS_VOTE
+				printk("process_vote: (readdir) Lock id (%llu) has %u "
+				       "holders\n",
+				       OCFS_I(inode)->ip_blkno << inode->i_sb->s_blocksize_bits,
+				       lockres->lock_holders);
+#endif
+				// kick the commit thread
+				atomic_set(&osb->flush_event_woken, 1);
+				wake_up(&osb->flush_event);
+
+				vote_response = FLAG_VOTE_UPDATE_RETRY;
+				status = 0;
+				break;
+			}
+
 			// if the requestor just wants to do readdir, we 
 			// drop our buffers, so switch to readonly and done
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)

Modified: trunk/src/vote.c
===================================================================
--- trunk/src/vote.c	2004-07-23 01:17:22 UTC (rev 1301)
+++ trunk/src/vote.c	2004-07-23 02:05:16 UTC (rev 1302)
@@ -909,9 +909,16 @@
 			if (openmap)
 				ocfs_node_map_set(openmap, &obj->tmp_openmap);
 		LOG_TRACE_ARGS ("OK vote, lockid=%llu\n", lock_id);
-	} else {
-		LOG_ERROR_ARGS("vote_status=%d, vote_state=%d, lockid=%llu\n",
-			       obj->vote_status, obj->vote_state, lock_id);
+	} else if (obj->vote_status != -EAGAIN || obj->vote_state != VOTE_OBJ_STATE_FULL_REPLY) {
+#warning "should we even be erroring here at all!"
+		LOG_ERROR_ARGS("inode %llu, vote_status=%d, vote_state=%d, "
+			       "lockid=%llu, flags = 0x%x, asked type = %u "
+			       "master = %d, state = 0x%x, type = %u\n",
+			       OCFS_I(inode)->ip_blkno, obj->vote_status, 
+			       obj->vote_state, lock_id, flags, lock_type, 
+			       GET_INODE_LOCKRES(inode)->master_node_num, 
+			       GET_INODE_LOCKRES(inode)->lock_state, 
+			       GET_INODE_LOCKRES(inode)->lock_type);
 	}
 	*vote_status = obj->vote_status;
 	obj->vote_state = VOTE_OBJ_STATE_DESTROYING;
@@ -974,9 +981,11 @@
 			ocfs_node_map_set_bit(ctxt->got_vote_map, node_num);
 			break;
 		case FLAG_VOTE_UPDATE_RETRY:
+			ocfs_node_map_set_bit(ctxt->got_vote_map, node_num);
 			status = -EAGAIN;
 			break;
 		case FLAG_VOTE_FILE_DEL:
+#warning "don't we need to set the node map bit here?"
 			status = -ENOENT;
 			break;
 	}



More information about the Ocfs2-commits mailing list