Avoid holding the journal's j_list_lock while copying the buffer_head's data.
We hold jbd_lock_bh_state() during the copy, which is all that is needed.



 25-akpm/fs/jbd/transaction.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff -puN fs/jbd/transaction.c~jbd-590-do_get_write_access-speedup fs/jbd/transaction.c
--- 25/fs/jbd/transaction.c~jbd-590-do_get_write_access-speedup	Thu Jun  5 15:14:38 2003
+++ 25-akpm/fs/jbd/transaction.c	Thu Jun  5 15:14:38 2003
@@ -699,6 +699,7 @@ repeat:
 	}
 	
 done_locked:
+	spin_unlock(&journal->j_list_lock);
 	if (need_copy) {
 		struct page *page;
 		int offset;
@@ -712,7 +713,6 @@ done_locked:
 		memcpy(jh->b_frozen_data, source+offset, jh2bh(jh)->b_size);
 		kunmap_atomic(source, KM_USER0);
 	}
-	spin_unlock(&journal->j_list_lock);
 	jbd_unlock_bh_state(bh);
 
 	/* If we are about to journal a buffer, then any revoke pending

_