diff options
Diffstat (limited to 'fs/ext4/fsync.c')
-rw-r--r-- | fs/ext4/fsync.c | 5 |
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; |