All of lore.kernel.org
 help / color / mirror / Atom feed
* BUG in writeback mode - from data journaling patch
@ 2004-08-19 18:32 Vijayan Prabhakaran
  2004-08-30 16:03 ` Dieter Nützel
  0 siblings, 1 reply; 7+ messages in thread
From: Vijayan Prabhakaran @ 2004-08-19 18:32 UTC (permalink / raw)
  To: mason, reiserfs-list; +Cc: vijayan

Dear Chris Mason,

I found a bug in writeback mode. In writeback mode, when a file block
was overwritten, the file's stat information was not getting updated.
For more details on this, please refer to my previous mail on the same
topic.

I tracked down the bug to the data journaling patch.

Bug description:
----------------

In file inode.c, there is a function called __commit_write(). In that
function, there is a "if" condition:

if (reiserfs_data_ordered(inode->i_sb)) {
  lock_kernel();
  add_to_flushlist(inode, bh);
  /* if we don't update the inode trans information,
   * an fsync(fd) might not catch these data blocks
   */

  reiserfs_update_inode_transaction(inode);
  unlock_kernel();
} else {
  buffer_insert_inode_data_queue(bh, inode);
}

If you look at the condition, for ordered mode, the inode transaction
information gets updated by the call
reiserfs_update_inode_transaction(). But, for writeback mode, this is
not done.

Since the inode transaction information is not updated, later in
function __commit_trans_jl() (which is in file journal.c), the
following "if" condition fails.

flush_commit_only:
if (journal_list_still_alive(inode->i_sb, id)) {
  ...
}

Because of this failure, the file's stat data, even though available
in the transaction list, did not get written to the disk.

Bug fix:
--------

If we add reiserfs_update_inode_transaction() call in __commit_write()
for the writeback mode, then it works fine. That is,

if (reiserfs_data_ordered(inode->i_sb)) {
  lock_kernel();
  add_to_flushlist(inode, bh);
  /* if we don't update the inode trans information,
   * an fsync(fd) might not catch these data blocks
   */

  reiserfs_update_inode_transaction(inode);
  unlock_kernel();
} else {
  reiserfs_update_inode_transaction(inode);
  buffer_insert_inode_data_queue(bh, inode);
}

Could you please verify this fix and if you think it is appropriate,
can you please add this to your patch.

I appreciate your help.

Thanks,
Vijayan

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2004-08-30 17:12 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-08-19 18:32 BUG in writeback mode - from data journaling patch Vijayan Prabhakaran
2004-08-30 16:03 ` Dieter Nützel
2004-08-30 16:32   ` Konstantin Besch
2004-08-30 16:42   ` Chris Mason
2004-08-30 16:50     ` Vijayan Prabhakaran
     [not found]       ` <2f9ccaae04083010074d49a0a0@mail.gmail.com>
2004-08-30 17:12         ` Vijayan Prabhakaran
2004-08-30 17:09     ` Vijayan Prabhakaran

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.