|
@@ -1954,8 +1954,6 @@ static int nilfs_segctor_collect_dirty_files(struct nilfs_sc_info *sci,
|
|
err, ii->vfs_inode.i_ino);
|
|
err, ii->vfs_inode.i_ino);
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
- mark_buffer_dirty(ibh);
|
|
|
|
- nilfs_mdt_mark_dirty(ifile);
|
|
|
|
spin_lock(&nilfs->ns_inode_lock);
|
|
spin_lock(&nilfs->ns_inode_lock);
|
|
if (likely(!ii->i_bh))
|
|
if (likely(!ii->i_bh))
|
|
ii->i_bh = ibh;
|
|
ii->i_bh = ibh;
|
|
@@ -1964,6 +1962,10 @@ static int nilfs_segctor_collect_dirty_files(struct nilfs_sc_info *sci,
|
|
goto retry;
|
|
goto retry;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // Always redirty the buffer to avoid race condition
|
|
|
|
+ mark_buffer_dirty(ii->i_bh);
|
|
|
|
+ nilfs_mdt_mark_dirty(ifile);
|
|
|
|
+
|
|
clear_bit(NILFS_I_QUEUED, &ii->i_state);
|
|
clear_bit(NILFS_I_QUEUED, &ii->i_state);
|
|
set_bit(NILFS_I_BUSY, &ii->i_state);
|
|
set_bit(NILFS_I_BUSY, &ii->i_state);
|
|
list_move_tail(&ii->i_dirty, &sci->sc_dirty_files);
|
|
list_move_tail(&ii->i_dirty, &sci->sc_dirty_files);
|