Loading fs/ext3/inode.c +2 −1 Original line number Diff line number Diff line Loading @@ -218,7 +218,8 @@ void ext3_evict_inode (struct inode *inode) */ if (inode->i_nlink && ext3_should_journal_data(inode) && EXT3_SB(inode->i_sb)->s_journal && (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode))) { (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode)) && inode->i_ino != EXT3_JOURNAL_INO) { tid_t commit_tid = atomic_read(&ei->i_datasync_tid); journal_t *journal = EXT3_SB(inode->i_sb)->s_journal; Loading fs/jbd/journal.c +14 −5 Original line number Diff line number Diff line Loading @@ -564,6 +564,16 @@ int log_wait_commit(journal_t *journal, tid_t tid) spin_unlock(&journal->j_state_lock); #endif spin_lock(&journal->j_state_lock); /* * Not running or committing trans? Must be already committed. This * saves us from waiting for a *long* time when tid overflows. */ if (!((journal->j_running_transaction && journal->j_running_transaction->t_tid == tid) || (journal->j_committing_transaction && journal->j_committing_transaction->t_tid == tid))) goto out_unlock; if (!tid_geq(journal->j_commit_waited, tid)) journal->j_commit_waited = tid; while (tid_gt(tid, journal->j_commit_sequence)) { Loading @@ -575,6 +585,7 @@ int log_wait_commit(journal_t *journal, tid_t tid) !tid_gt(tid, journal->j_commit_sequence)); spin_lock(&journal->j_state_lock); } out_unlock: spin_unlock(&journal->j_state_lock); if (unlikely(is_journal_aborted(journal))) { Loading Loading @@ -1845,7 +1856,7 @@ static struct journal_head *journal_alloc_journal_head(void) #ifdef CONFIG_JBD_DEBUG atomic_inc(&nr_journal_heads); #endif ret = kmem_cache_alloc(journal_head_cache, GFP_NOFS); ret = kmem_cache_zalloc(journal_head_cache, GFP_NOFS); if (ret == NULL) { jbd_debug(1, "out of memory for journal_head\n"); printk_ratelimited(KERN_NOTICE "ENOMEM in %s, retrying.\n", Loading @@ -1853,7 +1864,7 @@ static struct journal_head *journal_alloc_journal_head(void) while (ret == NULL) { yield(); ret = kmem_cache_alloc(journal_head_cache, GFP_NOFS); ret = kmem_cache_zalloc(journal_head_cache, GFP_NOFS); } } return ret; Loading Loading @@ -1915,10 +1926,8 @@ struct journal_head *journal_add_journal_head(struct buffer_head *bh) struct journal_head *new_jh = NULL; repeat: if (!buffer_jbd(bh)) { if (!buffer_jbd(bh)) new_jh = journal_alloc_journal_head(); memset(new_jh, 0, sizeof(*new_jh)); } jbd_lock_bh_journal_head(bh); if (buffer_jbd(bh)) { Loading fs/jbd/transaction.c +0 −1 Original line number Diff line number Diff line Loading @@ -245,7 +245,6 @@ static handle_t *new_handle(int nblocks) handle_t *handle = jbd_alloc_handle(GFP_NOFS); if (!handle) return NULL; memset(handle, 0, sizeof(*handle)); handle->h_buffer_credits = nblocks; handle->h_ref = 1; Loading include/linux/jbd.h +1 −1 Original line number Diff line number Diff line Loading @@ -887,7 +887,7 @@ extern struct kmem_cache *jbd_handle_cache; static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) { return kmem_cache_alloc(jbd_handle_cache, gfp_flags); return kmem_cache_zalloc(jbd_handle_cache, gfp_flags); } static inline void jbd_free_handle(handle_t *handle) Loading Loading
fs/ext3/inode.c +2 −1 Original line number Diff line number Diff line Loading @@ -218,7 +218,8 @@ void ext3_evict_inode (struct inode *inode) */ if (inode->i_nlink && ext3_should_journal_data(inode) && EXT3_SB(inode->i_sb)->s_journal && (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode))) { (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode)) && inode->i_ino != EXT3_JOURNAL_INO) { tid_t commit_tid = atomic_read(&ei->i_datasync_tid); journal_t *journal = EXT3_SB(inode->i_sb)->s_journal; Loading
fs/jbd/journal.c +14 −5 Original line number Diff line number Diff line Loading @@ -564,6 +564,16 @@ int log_wait_commit(journal_t *journal, tid_t tid) spin_unlock(&journal->j_state_lock); #endif spin_lock(&journal->j_state_lock); /* * Not running or committing trans? Must be already committed. This * saves us from waiting for a *long* time when tid overflows. */ if (!((journal->j_running_transaction && journal->j_running_transaction->t_tid == tid) || (journal->j_committing_transaction && journal->j_committing_transaction->t_tid == tid))) goto out_unlock; if (!tid_geq(journal->j_commit_waited, tid)) journal->j_commit_waited = tid; while (tid_gt(tid, journal->j_commit_sequence)) { Loading @@ -575,6 +585,7 @@ int log_wait_commit(journal_t *journal, tid_t tid) !tid_gt(tid, journal->j_commit_sequence)); spin_lock(&journal->j_state_lock); } out_unlock: spin_unlock(&journal->j_state_lock); if (unlikely(is_journal_aborted(journal))) { Loading Loading @@ -1845,7 +1856,7 @@ static struct journal_head *journal_alloc_journal_head(void) #ifdef CONFIG_JBD_DEBUG atomic_inc(&nr_journal_heads); #endif ret = kmem_cache_alloc(journal_head_cache, GFP_NOFS); ret = kmem_cache_zalloc(journal_head_cache, GFP_NOFS); if (ret == NULL) { jbd_debug(1, "out of memory for journal_head\n"); printk_ratelimited(KERN_NOTICE "ENOMEM in %s, retrying.\n", Loading @@ -1853,7 +1864,7 @@ static struct journal_head *journal_alloc_journal_head(void) while (ret == NULL) { yield(); ret = kmem_cache_alloc(journal_head_cache, GFP_NOFS); ret = kmem_cache_zalloc(journal_head_cache, GFP_NOFS); } } return ret; Loading Loading @@ -1915,10 +1926,8 @@ struct journal_head *journal_add_journal_head(struct buffer_head *bh) struct journal_head *new_jh = NULL; repeat: if (!buffer_jbd(bh)) { if (!buffer_jbd(bh)) new_jh = journal_alloc_journal_head(); memset(new_jh, 0, sizeof(*new_jh)); } jbd_lock_bh_journal_head(bh); if (buffer_jbd(bh)) { Loading
fs/jbd/transaction.c +0 −1 Original line number Diff line number Diff line Loading @@ -245,7 +245,6 @@ static handle_t *new_handle(int nblocks) handle_t *handle = jbd_alloc_handle(GFP_NOFS); if (!handle) return NULL; memset(handle, 0, sizeof(*handle)); handle->h_buffer_credits = nblocks; handle->h_ref = 1; Loading
include/linux/jbd.h +1 −1 Original line number Diff line number Diff line Loading @@ -887,7 +887,7 @@ extern struct kmem_cache *jbd_handle_cache; static inline handle_t *jbd_alloc_handle(gfp_t gfp_flags) { return kmem_cache_alloc(jbd_handle_cache, gfp_flags); return kmem_cache_zalloc(jbd_handle_cache, gfp_flags); } static inline void jbd_free_handle(handle_t *handle) Loading