ext4: check return value of blkdev_issue_flush()
authorTheodore Ts'o <tytso@mit.edu>
Fri, 17 Aug 2012 13:58:17 +0000 (09:58 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 17 Aug 2012 13:58:17 +0000 (09:58 -0400)
blkdev_issue_flush() can fail; make sure the error gets properly
propagated.

This is a port of the equivalent ext3 patch from commit 44f4f729e7a1.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/fsync.c

index 2a1dcea4f12ef91fd94a154f0d1cad8816af7ed8..323eb15c2d94ca86f237881af336ea639c06d9dc 100644 (file)
@@ -203,7 +203,7 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
        struct inode *inode = file->f_mapping->host;
        struct ext4_inode_info *ei = EXT4_I(inode);
        journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;
-       int ret;
+       int ret, err;
        tid_t commit_tid;
        bool needs_barrier = false;
 
@@ -255,8 +255,11 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
                needs_barrier = true;
        jbd2_log_start_commit(journal, commit_tid);
        ret = jbd2_log_wait_commit(journal, commit_tid);
-       if (needs_barrier)
-               blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
+       if (needs_barrier) {
+               err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
+               if (!ret)
+                       ret = err;
+       }
  out:
        mutex_unlock(&inode->i_mutex);
        trace_ext4_sync_file_exit(inode, ret);