Skip to contentSkip to conversation

2.6 fixes in journal.c

PATCH New Rusty Lynch 2 participants 5 messages Feb 26, 2004 – Mar 1, 2004 OCFS2

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 2.6 fixes in journal.c

The following is a patch that fixes some small 2.6 issues with journal.c

* journal_get_write_access now has an additional "credits" argument that appears to be safe to pass in as null. (Other people are doing it and the code in the latest bk tree always test for null before attempting to incrementing it.)
* small typo in an ocfs_iget call
* remaining call to daemonize that is moved to the 2.6 safe ocfs_daemonize call
* WARNING!!! Here is the thing I am not sure about!
The lock_journal/unlock_journal calls do not exist anymore. There is a journal_[un]lock_updates() function, but it is unclear when to use that function.

I just removed the [un]lock_journal calls around a line where we were tweaking the commit interval.

    --rusty
journal.c +11 -5
Index: src/journal.c
===================================================================
@@ -656,7 +656,7 @@
 		break;
 
 	case OCFS_JOURNAL_ACCESS_WRITE:
-		status = journal_get_write_access(handle->k_handle, bh);
+		status = journal_get_write_access(handle->k_handle, bh, NULL);
 		break;
 
 	default:
@@ -898,7 +898,7 @@
 	OCFS_BH_PUT_DATA(bh);
 	fe = NULL;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-	inode = ocfs_iget (sb, &args);
+	inode = ocfs_iget (osb->sb, &args);
 #else
 	inode = ocfs_get_inode_from_offset(osb, args.offset, bh);
 #endif
@@ -934,9 +934,13 @@
 
 	LOG_TRACE_STR("Returned from journal_init_inode");
 	LOG_TRACE_ARGS("k_journal->j_maxlen = %u\n", k_journal->j_maxlen);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+	k_journal->j_commit_interval = OCFS_DEFAULT_COMMIT_INTERVAL;
+#else
 	lock_journal(k_journal);
 	k_journal->j_commit_interval = OCFS_DEFAULT_COMMIT_INTERVAL;
 	unlock_journal(k_journal);
+#endif
 
 	/* yay, pass the proper info back to our journal structure. */
 	osb->journal.osb = osb;
@@ -1368,12 +1372,14 @@
 	ocfs_super *osb = ((struct ocfs_recover_arg *) arg)->osb;
 	int node_num = ((struct ocfs_recover_arg *) arg)->node_num;
 	int status = 0;
+	char proc[16];
 
 	LOG_ENTRY_ARGS("(node_num=%d, osb->node_num = %d)\n", node_num,
 		       osb->node_num);
 
-	daemonize();
-	reparent_to_init();
+	sprintf (proc, "ocfs2rec-%d", osb->osb_id);
+	ocfs_daemonize (proc, strlen(proc));
+
 #ifdef HAVE_NPTL
 	spin_lock_irq (&current->sighand->siglock);
 	sigfillset(&current->blocked);
@@ -1522,7 +1528,7 @@
 	OCFS_BH_PUT_DATA(bh);
 	fe = NULL;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-	inode = ocfs_iget (sb, &args);
+	inode = ocfs_iget (osb->sb, &args);
 #else
 	inode = ocfs_get_inode_from_offset(osb, args.offset, bh);
 #endif
#1 lore raw

PATCH 1/1 2.6 fixes in journal.c

Quoted 15 lines · Rusty Lynch

The following is a patch that fixes some small 2.6 issues with journal.c

* journal_get_write_access now has an additional "credits" argument that appears to be safe to pass in as null. (Other people are doing it and the code in the latest bk tree always test for null before attempting to incrementing it.)
* small typo in an ocfs_iget call
* remaining call to daemonize that is moved to the 2.6 safe ocfs_daemonize call
* WARNING!!! Here is the thing I am not sure about!
The lock_journal/unlock_journal calls do not exist anymore. There is a journal_[un]lock_updates() function, but it is unclear when to use that function.

Quoted 5 lines

I just removed the [un]lock_journal calls around a line where we were tweaking the commit interval.

    --rusty

Here is the same patch cut against the new svn tree.

journal.c +11 -5
Index: src/journal.c
===================================================================
@@ -656,7 +656,7 @@
 		break;
 
 	case OCFS_JOURNAL_ACCESS_WRITE:
-		status = journal_get_write_access(handle->k_handle, bh);
+		status = journal_get_write_access(handle->k_handle, bh, NULL);
 		break;
 
 	default:
@@ -899,7 +899,7 @@
 	OCFS_BH_PUT_DATA(bh);
 	fe = NULL;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-	inode = ocfs_iget (sb, &args);
+	inode = ocfs_iget (osb->sb, &args);
 #else
 	inode = ocfs_get_inode_from_offset(osb, args.offset, bh);
 #endif
@@ -935,9 +935,13 @@
 
 	LOG_TRACE_STR("Returned from journal_init_inode");
 	LOG_TRACE_ARGS("k_journal->j_maxlen = %u\n", k_journal->j_maxlen);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+	k_journal->j_commit_interval = OCFS_DEFAULT_COMMIT_INTERVAL;
+#else
 	lock_journal(k_journal);
 	k_journal->j_commit_interval = OCFS_DEFAULT_COMMIT_INTERVAL;
 	unlock_journal(k_journal);
+#endif
 
 	/* yay, pass the proper info back to our journal structure. */
 	osb->journal.osb = osb;
@@ -1376,12 +1380,14 @@
 	ocfs_super *osb = ((struct ocfs_recover_arg *) arg)->osb;
 	int node_num = ((struct ocfs_recover_arg *) arg)->node_num;
 	int status = 0;
+	char proc[16];
 
 	LOG_ENTRY_ARGS("(node_num=%d, osb->node_num = %d)\n", node_num,
 		       osb->node_num);
 
-	daemonize();
-	reparent_to_init();
+	sprintf (proc, "ocfs2rec-%d", osb->osb_id);
+	ocfs_daemonize (proc, strlen(proc));
+
 #ifdef HAVE_NPTL
 	spin_lock_irq (&current->sighand->siglock);
 	sigfillset(&current->blocked);
@@ -1531,7 +1537,7 @@
 	OCFS_BH_PUT_DATA(bh);
 	fe = NULL;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-	inode = ocfs_iget (sb, &args);
+	inode = ocfs_iget (osb->sb, &args);
 #else
 	inode = ocfs_get_inode_from_offset(osb, args.offset, bh);
 #endif
#2 lore raw

PATCH 1/1 2.6 fixes in journal.c

Quoted 8 lines · Rusty Lynch

Here is the same patch cut against the new svn tree.

Index: src/journal.c
===================================================================

journal.c line 660

Quoted 6 lines
journal.c +1 -1
@@ -656,7 +656,7 @@
 		break;
 
 	case OCFS_JOURNAL_ACCESS_WRITE:
-		status = journal_get_write_access(handle->k_handle, bh);
+		status = journal_get_write_access(handle->k_handle, bh, NULL);
 		break;

Can we put an #if LINUX_VERSION_CODE around that one please? Passing NULL in 2.6 for the credits argument is fine.

Quoted 12 lines
journal.c +1 -1
 	default:
@@ -899,7 +899,7 @@
 	OCFS_BH_PUT_DATA(bh);
 	fe = NULL;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-	inode = ocfs_iget (sb, &args);
+	inode = ocfs_iget (osb->sb, &args);
 #else
 	inode = ocfs_get_inode_from_offset(osb, args.offset, bh);
 #endif

journal.c line 944

Quoted 10 lines
journal.c +4 -0
@@ -935,9 +935,13 @@
 
 	LOG_TRACE_STR("Returned from journal_init_inode");
 	LOG_TRACE_ARGS("k_journal->j_maxlen = %u\n", k_journal->j_maxlen);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+	k_journal->j_commit_interval = OCFS_DEFAULT_COMMIT_INTERVAL;
+#else
 	lock_journal(k_journal);
 	k_journal->j_commit_interval = OCFS_DEFAULT_COMMIT_INTERVAL;
 	unlock_journal(k_journal);
+#endif

Ok, you can actually just remove that lock_journal/unlock_journal pair. At that point in the JBD init cycle, we don't have to worry about protecting that variable.

The rest of the patch looks good, so if you could just fix those two things, I'll commit.

	--Mark

--
Mark Fasheh
Software Developer, Oracle Corp
[email protected]

#3 lore raw

PATCH 1/1 2.6 fixes in journal.c

In reply to Rusty Lynch
Quoted 16 lines · Rusty Lynch
Quoted 15 lines · Rusty Lynch

The following is a patch that fixes some small 2.6 issues with journal.c

* journal_get_write_access now has an additional "credits" argument that appears to be safe to pass in as null. (Other people are doing it and the code in the latest bk tree always test for null before attempting to incrementing it.)
* small typo in an ocfs_iget call
* remaining call to daemonize that is moved to the 2.6 safe ocfs_daemonize call
* WARNING!!! Here is the thing I am not sure about!
The lock_journal/unlock_journal calls do not exist anymore. There is a journal_[un]lock_updates() function, but it is unclear when to use that function.

Quoted 2 lines
Quoted 2 lines

I just removed the [un]lock_journal calls around a line where we were tweaking the commit interval.

The following patch addes #if LINUX_VERSION_CODE wrappers around the journal_get_write_access() call, and drops the journal locking calls for both the 2.4 and 2.6 code when the commit interval is set durring journal initialization.

journal.c +10 -6
Index: src/journal.c
===================================================================
@@ -656,7 +656,11 @@
 		break;
 
 	case OCFS_JOURNAL_ACCESS_WRITE:
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+		status = journal_get_write_access(handle->k_handle, bh, NULL);
+#else
 		status = journal_get_write_access(handle->k_handle, bh);
+#endif
 		break;
 
 	default:
@@ -899,7 +903,7 @@
 	OCFS_BH_PUT_DATA(bh);
 	fe = NULL;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-	inode = ocfs_iget (sb, &args);
+	inode = ocfs_iget (osb->sb, &args);
 #else
 	inode = ocfs_get_inode_from_offset(osb, args.offset, bh);
 #endif
@@ -935,9 +939,7 @@
 
 	LOG_TRACE_STR("Returned from journal_init_inode");
 	LOG_TRACE_ARGS("k_journal->j_maxlen = %u\n", k_journal->j_maxlen);
-	lock_journal(k_journal);
 	k_journal->j_commit_interval = OCFS_DEFAULT_COMMIT_INTERVAL;
-	unlock_journal(k_journal);
 
 	/* yay, pass the proper info back to our journal structure. */
 	osb->journal.osb = osb;
@@ -1376,12 +1378,14 @@
 	ocfs_super *osb = ((struct ocfs_recover_arg *) arg)->osb;
 	int node_num = ((struct ocfs_recover_arg *) arg)->node_num;
 	int status = 0;
+	char proc[16];
 
 	LOG_ENTRY_ARGS("(node_num=%d, osb->node_num = %d)\n", node_num,
 		       osb->node_num);
 
-	daemonize();
-	reparent_to_init();
+	sprintf (proc, "ocfs2rec-%d", osb->osb_id);
+	ocfs_daemonize (proc, strlen(proc));
+
 #ifdef HAVE_NPTL
 	spin_lock_irq (&current->sighand->siglock);
 	sigfillset(&current->blocked);
@@ -1531,7 +1535,7 @@
 	OCFS_BH_PUT_DATA(bh);
 	fe = NULL;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-	inode = ocfs_iget (sb, &args);
+	inode = ocfs_iget (osb->sb, &args);
 #else
 	inode = ocfs_get_inode_from_offset(osb, args.offset, bh);
 #endif
#4 lore raw

PATCH 1/1 2.6 fixes in journal.c

Quoted 4 lines · Rusty Lynch

The following patch addes #if LINUX_VERSION_CODE wrappers around the journal_get_write_access() call, and drops the journal locking calls for both the 2.4 and 2.6 code when the commit interval is set durring journal initialization.

Alright, committed.

	--Mark

--
Mark Fasheh
Software Developer, Oracle Corp
[email protected]