ext4: main fast-commit commit path
[linux-2.6-microblaze.git] / fs / ext4 / file.c
index 02ffbd2..d85412d 100644 (file)
@@ -260,6 +260,7 @@ static ssize_t ext4_buffered_write_iter(struct kiocb *iocb,
        if (iocb->ki_flags & IOCB_NOWAIT)
                return -EOPNOTSUPP;
 
+       ext4_fc_start_update(inode);
        inode_lock(inode);
        ret = ext4_write_checks(iocb, from);
        if (ret <= 0)
@@ -271,6 +272,7 @@ static ssize_t ext4_buffered_write_iter(struct kiocb *iocb,
 
 out:
        inode_unlock(inode);
+       ext4_fc_stop_update(inode);
        if (likely(ret > 0)) {
                iocb->ki_pos += ret;
                ret = generic_write_sync(iocb, ret);
@@ -534,7 +536,9 @@ static ssize_t ext4_dio_write_iter(struct kiocb *iocb, struct iov_iter *from)
                        goto out;
                }
 
+               ext4_fc_start_update(inode);
                ret = ext4_orphan_add(handle, inode);
+               ext4_fc_stop_update(inode);
                if (ret) {
                        ext4_journal_stop(handle);
                        goto out;
@@ -656,8 +660,8 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 #endif
        if (iocb->ki_flags & IOCB_DIRECT)
                return ext4_dio_write_iter(iocb, from);
-
-       return ext4_buffered_write_iter(iocb, from);
+       else
+               return ext4_buffered_write_iter(iocb, from);
 }
 
 #ifdef CONFIG_FS_DAX
@@ -757,6 +761,7 @@ static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma)
        if (!daxdev_mapping_supported(vma, dax_dev))
                return -EOPNOTSUPP;
 
+       ext4_fc_start_update(inode);
        file_accessed(file);
        if (IS_DAX(file_inode(file))) {
                vma->vm_ops = &ext4_dax_vm_ops;
@@ -764,6 +769,7 @@ static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma)
        } else {
                vma->vm_ops = &ext4_file_vm_ops;
        }
+       ext4_fc_stop_update(inode);
        return 0;
 }