diff options
Diffstat (limited to 'fs/jbd/commit.c')
| -rw-r--r-- | fs/jbd/commit.c | 40 | 
1 files changed, 8 insertions, 32 deletions
| diff --git a/fs/jbd/commit.c b/fs/jbd/commit.c index 95d8c11c929..34a4861c14b 100644 --- a/fs/jbd/commit.c +++ b/fs/jbd/commit.c @@ -137,34 +137,10 @@ static int journal_write_commit_record(journal_t *journal,  	JBUFFER_TRACE(descriptor, "write commit block");  	set_buffer_dirty(bh); -	if (journal->j_flags & JFS_BARRIER) { -		ret = __sync_dirty_buffer(bh, WRITE_SYNC | WRITE_BARRIER); - -		/* -		 * Is it possible for another commit to fail at roughly -		 * the same time as this one?  If so, we don't want to -		 * trust the barrier flag in the super, but instead want -		 * to remember if we sent a barrier request -		 */ -		if (ret == -EOPNOTSUPP) { -			char b[BDEVNAME_SIZE]; - -			printk(KERN_WARNING -				"JBD: barrier-based sync failed on %s - " -				"disabling barriers\n", -				bdevname(journal->j_dev, b)); -			spin_lock(&journal->j_state_lock); -			journal->j_flags &= ~JFS_BARRIER; -			spin_unlock(&journal->j_state_lock); - -			/* And try again, without the barrier */ -			set_buffer_uptodate(bh); -			set_buffer_dirty(bh); -			ret = sync_dirty_buffer(bh); -		} -	} else { +	if (journal->j_flags & JFS_BARRIER) +		ret = __sync_dirty_buffer(bh, WRITE_SYNC | WRITE_FLUSH_FUA); +	else  		ret = sync_dirty_buffer(bh); -	}  	put_bh(bh);		/* One for getblk() */  	journal_put_journal_head(descriptor); @@ -318,7 +294,7 @@ void journal_commit_transaction(journal_t *journal)  	int first_tag = 0;  	int tag_flag;  	int i; -	int write_op = WRITE; +	int write_op = WRITE_SYNC;  	/*  	 * First job: lock down the current transaction and wait for @@ -611,13 +587,13 @@ void journal_commit_transaction(journal_t *journal)  		/* Bump b_count to prevent truncate from stumbling over                     the shadowed buffer!  @@@ This can go if we ever get                     rid of the BJ_IO/BJ_Shadow pairing of buffers. */ -		atomic_inc(&jh2bh(jh)->b_count); +		get_bh(jh2bh(jh));  		/* Make a temporary IO buffer with which to write it out                     (this will requeue both the metadata buffer and the                     temporary IO buffer). new_bh goes on BJ_IO*/ -		set_bit(BH_JWrite, &jh2bh(jh)->b_state); +		set_buffer_jwrite(jh2bh(jh));  		/*  		 * akpm: journal_write_metadata_buffer() sets  		 * new_bh->b_transaction to commit_transaction. @@ -627,7 +603,7 @@ void journal_commit_transaction(journal_t *journal)  		JBUFFER_TRACE(jh, "ph3: write metadata");  		flags = journal_write_metadata_buffer(commit_transaction,  						      jh, &new_jh, blocknr); -		set_bit(BH_JWrite, &jh2bh(new_jh)->b_state); +		set_buffer_jwrite(jh2bh(new_jh));  		wbuf[bufs++] = jh2bh(new_jh);  		/* Record the new block's tag in the current descriptor @@ -737,7 +713,7 @@ wait_for_iobuf:                     shadowed buffer */  		jh = commit_transaction->t_shadow_list->b_tprev;  		bh = jh2bh(jh); -		clear_bit(BH_JWrite, &bh->b_state); +		clear_buffer_jwrite(bh);  		J_ASSERT_BH(bh, buffer_jbddirty(bh));  		/* The metadata is now released for reuse, but we need | 
