2.6 fixes in journal.c
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
@@ -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 (¤t->sighand->siglock);sigfillset (¤t->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
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_accessnow 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 anocfs_igetcall
* remaining call to daemonize that is moved to the 2.6 safeocfs_daemonizecall
* 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
@@ -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 (¤t->sighand->siglock);sigfillset (¤t->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
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
-1default :@@ -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]
PATCH 1/1 2.6 fixes in journal.c
In reply to Rusty LynchQuoted 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_accessnow 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 anocfs_igetcall
* remaining call to daemonize that is moved to the 2.6 safeocfs_daemonizecall
* 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
@@ -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 (¤t->sighand->siglock);sigfillset (¤t->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
PATCH 1/1 2.6 fixes in journal.c
Quoted 4 lines · Rusty Lynch
The following patch addes #if
LINUX_VERSION_CODEwrappers around thejournal_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]