Messages in this thread | | | Date | Thu, 18 May 2006 10:25:45 +0200 | From | Zoltan Menyhart <> | Subject | re: [PATCH] Change ll_rw_block() calls in JBD |
| |
> We must be sure that the current data in buffer are sent to disk. > Hence we have to call ll_rw_block() with SWRITE.
Let's consider the following case:
while (commit_transaction->t_sync_datalist) { ...
// Assume a "bh" got locked before starting this loop
if (buffer_locked(bh)) { ... __journal_temp_unlink_buffer(jh); __journal_file_buffer(jh, commit_transaction, BJ_Locked); } else ... } ... while (commit_transaction->t_locked_list) { ...
// Assume our "bh" is not locked any more // Nothing has happened to this "bh", someone just wanted // to look at it in a safe way
if (buffer_jbd(bh) && jh->b_jlist == BJ_Locked) { __journal_unfile_buffer(jh); jbd_unlock_bh_state(bh); journal_remove_journal_head(bh); put_bh(bh); } else ... }
I.e. having an already locked "bh", it is missed out from the log.
Regards,
Zoltan Menyhart
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |