Commit 5dc23bdd5f846ef868e82f789dfd9b13093f9ba6

Authored by Jan Kara
Committed by Theodore Ts'o
1 parent c724585b62

ext4: remove ext4_ioend_wait()

Now that we clear PageWriteback after extent conversion, there's no
need to wait for io_end processing in ext4_evict_inode().  Running
AIO/DIO keeps file reference until aio_complete() is called so
ext4_evict_inode() cannot be called.  For io_end structures resulting
from buffered IO waiting is happening because we wait for
PageWriteback in truncate_inode_pages().

Reviewed-by: Zheng Liu <wenqing.lz@taobao.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

Showing 3 changed files with 3 additions and 22 deletions Side-by-side Diff

... ... @@ -2651,7 +2651,6 @@
2651 2651 /* page-io.c */
2652 2652 extern int __init ext4_init_pageio(void);
2653 2653 extern void ext4_exit_pageio(void);
2654   -extern void ext4_ioend_shutdown(struct inode *);
2655 2654 extern ext4_io_end_t *ext4_init_io_end(struct inode *inode, gfp_t flags);
2656 2655 extern ext4_io_end_t *ext4_get_io_end(ext4_io_end_t *io_end);
2657 2656 extern int ext4_put_io_end(ext4_io_end_t *io_end);
... ... @@ -215,7 +215,8 @@
215 215 filemap_write_and_wait(&inode->i_data);
216 216 }
217 217 truncate_inode_pages(&inode->i_data, 0);
218   - ext4_ioend_shutdown(inode);
  218 +
  219 + WARN_ON(atomic_read(&EXT4_I(inode)->i_ioend_count));
219 220 goto no_delete;
220 221 }
221 222  
222 223  
... ... @@ -225,8 +226,8 @@
225 226 if (ext4_should_order_data(inode))
226 227 ext4_begin_ordered_truncate(inode, 0);
227 228 truncate_inode_pages(&inode->i_data, 0);
228   - ext4_ioend_shutdown(inode);
229 229  
  230 + WARN_ON(atomic_read(&EXT4_I(inode)->i_ioend_count));
230 231 if (is_bad_inode(inode))
231 232 goto no_delete;
232 233  
... ... @@ -46,25 +46,6 @@
46 46 }
47 47  
48 48 /*
49   - * This function is called by ext4_evict_inode() to make sure there is
50   - * no more pending I/O completion work left to do.
51   - */
52   -void ext4_ioend_shutdown(struct inode *inode)
53   -{
54   - wait_queue_head_t *wq = ext4_ioend_wq(inode);
55   -
56   - wait_event(*wq, (atomic_read(&EXT4_I(inode)->i_ioend_count) == 0));
57   - /*
58   - * We need to make sure the work structure is finished being
59   - * used before we let the inode get destroyed.
60   - */
61   - if (work_pending(&EXT4_I(inode)->i_rsv_conversion_work))
62   - cancel_work_sync(&EXT4_I(inode)->i_rsv_conversion_work);
63   - if (work_pending(&EXT4_I(inode)->i_unrsv_conversion_work))
64   - cancel_work_sync(&EXT4_I(inode)->i_unrsv_conversion_work);
65   -}
66   -
67   -/*
68 49 * Print an buffer I/O error compatible with the fs/buffer.c. This
69 50 * provides compatibility with dmesg scrapers that look for a specific
70 51 * buffer I/O error message. We really need a unified error reporting