Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
Pull ext4 updates from Ted Ts'o: - add GETFSMAP support - some performance improvements for very large file systems and for random write workloads into a preallocated file - bug fixes and cleanups. * tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: jbd2: cleanup write flags handling from jbd2_write_superblock() ext4: mark superblock writes synchronous for nobarrier mounts ext4: inherit encryption xattr before other xattrs ext4: replace BUG_ON with WARN_ONCE in ext4_end_bio() ext4: avoid unnecessary transaction stalls during writeback ext4: preload block group descriptors ext4: make ext4_shutdown() static ext4: support GETFSMAP ioctls vfs: add common GETFSMAP ioctl definitions ext4: evict inline data when writing to memory map ext4: remove ext4_xattr_check_entry() ext4: rename ext4_xattr_check_names() to ext4_xattr_check_entries() ext4: merge ext4_xattr_list() into ext4_listxattr() ext4: constify static data that is never modified ext4: trim return value and 'dir' argument from ext4_insert_dentry() jbd2: fix dbench4 performance regression for 'nobarrier' mounts jbd2: Fix lockdep splat with generic/270 test mm: retry writepages() on ENOMEM when doing an data integrity writeback
This commit is contained in:
@@ -700,8 +700,21 @@ int jbd2_log_wait_commit(journal_t *journal, tid_t tid)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
jbd2_might_wait_for_commit(journal);
|
||||
read_lock(&journal->j_state_lock);
|
||||
#ifdef CONFIG_PROVE_LOCKING
|
||||
/*
|
||||
* Some callers make sure transaction is already committing and in that
|
||||
* case we cannot block on open handles anymore. So don't warn in that
|
||||
* case.
|
||||
*/
|
||||
if (tid_gt(tid, journal->j_commit_sequence) &&
|
||||
(!journal->j_committing_transaction ||
|
||||
journal->j_committing_transaction->t_tid != tid)) {
|
||||
read_unlock(&journal->j_state_lock);
|
||||
jbd2_might_wait_for_commit(journal);
|
||||
read_lock(&journal->j_state_lock);
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_JBD2_DEBUG
|
||||
if (!tid_geq(journal->j_commit_request, tid)) {
|
||||
printk(KERN_ERR
|
||||
@@ -922,7 +935,8 @@ int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
|
||||
* space and if we lose sb update during power failure we'd replay
|
||||
* old transaction with possibly newly overwritten data.
|
||||
*/
|
||||
ret = jbd2_journal_update_sb_log_tail(journal, tid, block, REQ_FUA);
|
||||
ret = jbd2_journal_update_sb_log_tail(journal, tid, block,
|
||||
REQ_SYNC | REQ_FUA);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
@@ -1323,7 +1337,7 @@ static int journal_reset(journal_t *journal)
|
||||
jbd2_journal_update_sb_log_tail(journal,
|
||||
journal->j_tail_sequence,
|
||||
journal->j_tail,
|
||||
REQ_FUA);
|
||||
REQ_SYNC | REQ_FUA);
|
||||
mutex_unlock(&journal->j_checkpoint_mutex);
|
||||
}
|
||||
return jbd2_journal_start_thread(journal);
|
||||
@@ -1463,7 +1477,7 @@ void jbd2_journal_update_sb_errno(journal_t *journal)
|
||||
sb->s_errno = cpu_to_be32(journal->j_errno);
|
||||
read_unlock(&journal->j_state_lock);
|
||||
|
||||
jbd2_write_superblock(journal, REQ_FUA);
|
||||
jbd2_write_superblock(journal, REQ_SYNC | REQ_FUA);
|
||||
}
|
||||
EXPORT_SYMBOL(jbd2_journal_update_sb_errno);
|
||||
|
||||
@@ -1730,7 +1744,7 @@ int jbd2_journal_destroy(journal_t *journal)
|
||||
write_unlock(&journal->j_state_lock);
|
||||
|
||||
jbd2_mark_journal_empty(journal,
|
||||
REQ_PREFLUSH | REQ_FUA);
|
||||
REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
|
||||
mutex_unlock(&journal->j_checkpoint_mutex);
|
||||
} else
|
||||
err = -EIO;
|
||||
@@ -1989,7 +2003,7 @@ int jbd2_journal_flush(journal_t *journal)
|
||||
* the magic code for a fully-recovered superblock. Any future
|
||||
* commits of data to the journal will restore the current
|
||||
* s_start value. */
|
||||
jbd2_mark_journal_empty(journal, REQ_FUA);
|
||||
jbd2_mark_journal_empty(journal, REQ_SYNC | REQ_FUA);
|
||||
mutex_unlock(&journal->j_checkpoint_mutex);
|
||||
write_lock(&journal->j_state_lock);
|
||||
J_ASSERT(!journal->j_running_transaction);
|
||||
@@ -2035,7 +2049,7 @@ int jbd2_journal_wipe(journal_t *journal, int write)
|
||||
if (write) {
|
||||
/* Lock to make assertions happy... */
|
||||
mutex_lock(&journal->j_checkpoint_mutex);
|
||||
jbd2_mark_journal_empty(journal, REQ_FUA);
|
||||
jbd2_mark_journal_empty(journal, REQ_SYNC | REQ_FUA);
|
||||
mutex_unlock(&journal->j_checkpoint_mutex);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user