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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]