|
@@ -126,7 +126,7 @@ int nilfs_get_block(struct inode *inode, sector_t blkoff,
|
|
|
nilfs_transaction_abort(inode->i_sb);
|
|
|
goto out;
|
|
|
}
|
|
|
- nilfs_mark_inode_dirty(inode);
|
|
|
+ nilfs_mark_inode_dirty_sync(inode);
|
|
|
nilfs_transaction_commit(inode->i_sb); /* never fails */
|
|
|
/* Error handling should be detailed */
|
|
|
set_buffer_new(bh_result);
|
|
@@ -672,7 +672,7 @@ void nilfs_write_inode_common(struct inode *inode,
|
|
|
for substitutions of appended fields */
|
|
|
}
|
|
|
|
|
|
-void nilfs_update_inode(struct inode *inode, struct buffer_head *ibh)
|
|
|
+void nilfs_update_inode(struct inode *inode, struct buffer_head *ibh, int flags)
|
|
|
{
|
|
|
ino_t ino = inode->i_ino;
|
|
|
struct nilfs_inode_info *ii = NILFS_I(inode);
|
|
@@ -683,7 +683,8 @@ void nilfs_update_inode(struct inode *inode, struct buffer_head *ibh)
|
|
|
|
|
|
if (test_and_clear_bit(NILFS_I_NEW, &ii->i_state))
|
|
|
memset(raw_inode, 0, NILFS_MDT(ifile)->mi_entry_size);
|
|
|
- set_bit(NILFS_I_INODE_DIRTY, &ii->i_state);
|
|
|
+ if (flags & I_DIRTY_DATASYNC)
|
|
|
+ set_bit(NILFS_I_INODE_SYNC, &ii->i_state);
|
|
|
|
|
|
nilfs_write_inode_common(inode, raw_inode, 0);
|
|
|
/* XXX: call with has_bmap = 0 is a workaround to avoid
|
|
@@ -939,7 +940,7 @@ int nilfs_set_file_dirty(struct inode *inode, unsigned nr_dirty)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int nilfs_mark_inode_dirty(struct inode *inode)
|
|
|
+int __nilfs_mark_inode_dirty(struct inode *inode, int flags)
|
|
|
{
|
|
|
struct buffer_head *ibh;
|
|
|
int err;
|
|
@@ -950,7 +951,7 @@ int nilfs_mark_inode_dirty(struct inode *inode)
|
|
|
"failed to reget inode block.\n");
|
|
|
return err;
|
|
|
}
|
|
|
- nilfs_update_inode(inode, ibh);
|
|
|
+ nilfs_update_inode(inode, ibh, flags);
|
|
|
mark_buffer_dirty(ibh);
|
|
|
nilfs_mdt_mark_dirty(NILFS_I(inode)->i_root->ifile);
|
|
|
brelse(ibh);
|
|
@@ -983,7 +984,7 @@ void nilfs_dirty_inode(struct inode *inode, int flags)
|
|
|
return;
|
|
|
}
|
|
|
nilfs_transaction_begin(inode->i_sb, &ti, 0);
|
|
|
- nilfs_mark_inode_dirty(inode);
|
|
|
+ __nilfs_mark_inode_dirty(inode, flags);
|
|
|
nilfs_transaction_commit(inode->i_sb); /* never fails */
|
|
|
}
|
|
|
|