Hi,

int journal_dirty_data(handle_t *handle, struct buffer_head *bh)
{
                       ..................
                       ..................

                        /*
                        * This buffer may be undergoing writeout in commit.  We
                        * can't return from here and let the caller dirty it
                        * again because that can cause the write-out loop in
                        * commit to never terminate.
                        */
                        if (buffer_dirty(bh)) {
                                get_bh(bh);
                                spin_unlock(&journal->j_list_lock);
                                jbd_unlock_bh_state(bh);
                                need_brelse = 1;
                                sync_dirty_buffer(bh);
                                jbd_lock_bh_state(bh);
                                spin_lock(&journal->j_list_lock);
                                /* The buffer may become locked again at any
                                   time if it is redirtied */
                        }
                        ..............................
                        ..............................
}


Can any body please explain how returning from the above function
cause write-out loop in commit to never terminate ?

If the current buffer is in the data_sync list of previous commiting
transaction, after returning from the journal_dirty_data,
generic_commit_write will redirty the buffer even though previous
commiting transaction commits the buffer to disk. Correct ?


-Ratna.
-
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to