diff options
Diffstat (limited to 'fs/ext4/fsync.c')
| -rw-r--r-- | fs/ext4/fsync.c | 10 | 
1 files changed, 3 insertions, 7 deletions
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c index 036f78f7a1e..00a2cb753ef 100644 --- a/fs/ext4/fsync.c +++ b/fs/ext4/fsync.c @@ -75,7 +75,7 @@ static void dump_completed_IO(struct inode * inode)   * to written.   * The function return the number of pending IOs on success.   */ -extern int ext4_flush_completed_IO(struct inode *inode) +int ext4_flush_completed_IO(struct inode *inode)  {  	ext4_io_end_t *io;  	struct ext4_inode_info *ei = EXT4_I(inode); @@ -83,14 +83,12 @@ extern int ext4_flush_completed_IO(struct inode *inode)  	int ret = 0;  	int ret2 = 0; -	if (list_empty(&ei->i_completed_io_list)) -		return ret; -  	dump_completed_IO(inode);  	spin_lock_irqsave(&ei->i_completed_io_lock, flags);  	while (!list_empty(&ei->i_completed_io_list)){  		io = list_entry(ei->i_completed_io_list.next,  				ext4_io_end_t, list); +		list_del_init(&io->list);  		/*  		 * Calling ext4_end_io_nolock() to convert completed  		 * IO to written. @@ -107,11 +105,9 @@ extern int ext4_flush_completed_IO(struct inode *inode)  		 */  		spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);  		ret = ext4_end_io_nolock(io); -		spin_lock_irqsave(&ei->i_completed_io_lock, flags);  		if (ret < 0)  			ret2 = ret; -		else -			list_del_init(&io->list); +		spin_lock_irqsave(&ei->i_completed_io_lock, flags);  	}  	spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);  	return (ret2 < 0) ? ret2 : 0;  |