aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/fsync.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4/fsync.c')
-rw-r--r--fs/ext4/fsync.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
index 851ac5b3cec..00a2cb753ef 100644
--- a/fs/ext4/fsync.c
+++ b/fs/ext4/fsync.c
@@ -88,6 +88,7 @@ int ext4_flush_completed_IO(struct inode *inode)
88 while (!list_empty(&ei->i_completed_io_list)){ 88 while (!list_empty(&ei->i_completed_io_list)){
89 io = list_entry(ei->i_completed_io_list.next, 89 io = list_entry(ei->i_completed_io_list.next,
90 ext4_io_end_t, list); 90 ext4_io_end_t, list);
91 list_del_init(&io->list);
91 /* 92 /*
92 * Calling ext4_end_io_nolock() to convert completed 93 * Calling ext4_end_io_nolock() to convert completed
93 * IO to written. 94 * IO to written.
@@ -104,11 +105,9 @@ int ext4_flush_completed_IO(struct inode *inode)
104 */ 105 */
105 spin_unlock_irqrestore(&ei->i_completed_io_lock, flags); 106 spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
106 ret = ext4_end_io_nolock(io); 107 ret = ext4_end_io_nolock(io);
107 spin_lock_irqsave(&ei->i_completed_io_lock, flags);
108 if (ret < 0) 108 if (ret < 0)
109 ret2 = ret; 109 ret2 = ret;
110 else 110 spin_lock_irqsave(&ei->i_completed_io_lock, flags);
111 list_del_init(&io->list);
112 } 111 }
113 spin_unlock_irqrestore(&ei->i_completed_io_lock, flags); 112 spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
114 return (ret2 < 0) ? ret2 : 0; 113 return (ret2 < 0) ? ret2 : 0;