[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