|
@@ -2482,13 +2482,14 @@ static int ext4_da_write_end(struct file *file,
|
|
int write_mode = (int)(unsigned long)fsdata;
|
|
int write_mode = (int)(unsigned long)fsdata;
|
|
|
|
|
|
if (write_mode == FALL_BACK_TO_NONDELALLOC) {
|
|
if (write_mode == FALL_BACK_TO_NONDELALLOC) {
|
|
- if (ext4_should_order_data(inode)) {
|
|
|
|
|
|
+ switch (ext4_inode_journal_mode(inode)) {
|
|
|
|
+ case EXT4_INODE_ORDERED_DATA_MODE:
|
|
return ext4_ordered_write_end(file, mapping, pos,
|
|
return ext4_ordered_write_end(file, mapping, pos,
|
|
len, copied, page, fsdata);
|
|
len, copied, page, fsdata);
|
|
- } else if (ext4_should_writeback_data(inode)) {
|
|
|
|
|
|
+ case EXT4_INODE_WRITEBACK_DATA_MODE:
|
|
return ext4_writeback_write_end(file, mapping, pos,
|
|
return ext4_writeback_write_end(file, mapping, pos,
|
|
len, copied, page, fsdata);
|
|
len, copied, page, fsdata);
|
|
- } else {
|
|
|
|
|
|
+ default:
|
|
BUG();
|
|
BUG();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -3086,18 +3087,25 @@ static const struct address_space_operations ext4_da_aops = {
|
|
|
|
|
|
void ext4_set_aops(struct inode *inode)
|
|
void ext4_set_aops(struct inode *inode)
|
|
{
|
|
{
|
|
- if (ext4_should_order_data(inode) &&
|
|
|
|
- test_opt(inode->i_sb, DELALLOC))
|
|
|
|
- inode->i_mapping->a_ops = &ext4_da_aops;
|
|
|
|
- else if (ext4_should_order_data(inode))
|
|
|
|
- inode->i_mapping->a_ops = &ext4_ordered_aops;
|
|
|
|
- else if (ext4_should_writeback_data(inode) &&
|
|
|
|
- test_opt(inode->i_sb, DELALLOC))
|
|
|
|
- inode->i_mapping->a_ops = &ext4_da_aops;
|
|
|
|
- else if (ext4_should_writeback_data(inode))
|
|
|
|
- inode->i_mapping->a_ops = &ext4_writeback_aops;
|
|
|
|
- else
|
|
|
|
|
|
+ switch (ext4_inode_journal_mode(inode)) {
|
|
|
|
+ case EXT4_INODE_ORDERED_DATA_MODE:
|
|
|
|
+ if (test_opt(inode->i_sb, DELALLOC))
|
|
|
|
+ inode->i_mapping->a_ops = &ext4_da_aops;
|
|
|
|
+ else
|
|
|
|
+ inode->i_mapping->a_ops = &ext4_ordered_aops;
|
|
|
|
+ break;
|
|
|
|
+ case EXT4_INODE_WRITEBACK_DATA_MODE:
|
|
|
|
+ if (test_opt(inode->i_sb, DELALLOC))
|
|
|
|
+ inode->i_mapping->a_ops = &ext4_da_aops;
|
|
|
|
+ else
|
|
|
|
+ inode->i_mapping->a_ops = &ext4_writeback_aops;
|
|
|
|
+ break;
|
|
|
|
+ case EXT4_INODE_JOURNAL_DATA_MODE:
|
|
inode->i_mapping->a_ops = &ext4_journalled_aops;
|
|
inode->i_mapping->a_ops = &ext4_journalled_aops;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ BUG();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|