ext4: remove vestiges of nobh support
PATCH 1/1 ext4: remove vestiges of nobh support
The nobh option was only supported for writeback mode, but given that all write paths actually create buffer heads it effectively was a no-op already.
Signed-off-by Christoph Hellwig <[email protected]>
fs/ext4/ext4.h +0 -1
@@ -873,7 +873,6 @@ struct ext4_inode_info {#define EXT4_MOUNT_POSIX_ACL 0x08000/* POSIX Access Control Lists */ #define EXT4_MOUNT_NO_AUTO_DA_ALLOC 0x10000/* No auto delalloc mapping */ #define EXT4_MOUNT_BARRIER 0x20000/* Use block barriers */ -#define EXT4_MOUNT_NOBH 0x40000/* No bufferheads */ #define EXT4_MOUNT_QUOTA 0x80000/* Some quota option set */ #define EXT4_MOUNT_USRQUOTA 0x100000/* "old" user quota */ #define EXT4_MOUNT_GRPQUOTA 0x200000/* "old" group quota */
fs/ext4/ext4_jbd2.h +4 -6
@@ -308,17 +308,15 @@ static inline int ext4_should_writeback_* This function controls whether or not we should try to go down the * dioread_nolock code paths, which makes it safe to avoid taking * i_mutex for direct I/O reads. This only works for extent-based -* files, and it doesn't work for nobh or if data journaling is -* enabled, since the dioread_nolock code uses b_private to pass -* information back to the I/O completion handler, and this conflicts -* with the jbd's use of b_private. +* files, and it doesn't work if data journaling is enabled, since the +* dioread_nolock code uses b_private to pass information back to the +* I/O completion handler, and this conflicts with the jbd's use of +* b_private. */ static inline int ext4_should_dioread_nolock (struct inode *inode) {if (!test_opt (inode->i_sb,DIOREAD_NOLOCK ))return 0 ; -if (test_opt (inode->i_sb,NOBH )) -return 0 ;if (!S_ISREG (inode->i_mode))return 0 ;if (!(ext4_test_inode_flag (inode,EXT4_INODE_EXTENTS )))
fs/ext4/inode.c +6 -21
@@ -2553,18 +2553,16 @@ static int ext4_da_get_block_prep(struct/* * This function is used as a standard get_block_t calback function * when there is no desire to allocate any blocks. It is used as a -* callback function for block_prepare_write(), nobh_writepage(), and -* block_write_full_page(). These functions should only try to map a -* single block at a time. +* callback function for block_prepare_write() and block_write_full_page(). +* These functions should only try to map a single block at a time. * * Since this function doesn't do block allocations even if the caller * requests it by passing in create=1, it is critically important that * any caller checks to make sure that any buffer heads are returned * by this function are either all already mapped or marked for -* delayed allocation before calling nobh_writepage() or -* block_write_full_page(). Otherwise, b_blocknr could be left -* unitialized, and the page write functions will be taken by -* surprise. +* delayed allocation before calling block_write_full_page(). Otherwise, +* b_blocknr could be left unitialized, and the page write functions will +* be taken by surprise. */ static int noalloc_get_block_write (struct inode *inode,sector_t iblock,struct buffer_head *bh_result,int create)
@@ -2749,9 +2747,7 @@ static int ext4_writepage(struct page *preturn __ext4_journalled_writepage (page, len); } -if (test_opt (inode->i_sb,NOBH ) &&ext4_should_writeback_data (inode)) - ret =nobh_writepage (page, noalloc_get_block_write, wbc); -else if (page_bufs &&buffer_uninit (page_bufs)) { +if (page_bufs &&buffer_uninit (page_bufs)) {ext4_set_bh_endio (page_bufs, inode); ret =block_write_full_page_endio (page, noalloc_get_block_write, wbc, ext4_end_io_buffer_write);
@@ -4128,17 +4124,6 @@ int ext4_block_truncate_page(handle_t *h length = blocksize - (offset & (blocksize -1 )); iblock = index << (PAGE_CACHE_SHIFT - inode->i_sb->s_blocksize_bits); -/* -* For "nobh" option, we can only work if we don't need to -* read-in the page - otherwise we create buffers to do the IO. -*/ -if (!page_has_buffers (page) &&test_opt (inode->i_sb,NOBH ) && -ext4_should_writeback_data (inode) &&PageUptodate (page)) { -zero_user (page, offset, length); -set_page_dirty (page); - goto unlock; - } -if (!page_has_buffers (page))create_empty_buffers (page, blocksize,0 );
fs/ext4/super.c +5 -16
@@ -946,8 +946,6 @@ static int ext4_show_options(struct seq_seq_puts (seq,",journal_async_commit" ); else if (test_opt(sb, JOURNAL_CHECKSUM)) seq_puts(seq, ",journal_checksum"); - if (test_opt(sb, NOBH)) - seq_puts(seq, ",nobh"); if (test_opt(sb, I_VERSION)) seq_puts(seq, ",i_version"); if (!test_opt(sb, DELALLOC))
@@ -1624,10 +1622,12 @@ set_qf_format: *n_blocks_count = option;break ;case Opt_nobh: -set_opt (sbi->s_mount_opt,NOBH ); +ext4_msg (sb,KERN_WARNING , +"Ignoring deprecated nobh option" );break ;case Opt_bh: -clear_opt (sbi->s_mount_opt,NOBH ); +ext4_msg (sb,KERN_WARNING , +"Ignoring deprecated bh option" );break ;case Opt_i_version:set_opt (sbi->s_mount_opt,I_VERSION );
@@ -2912,18 +2912,7 @@ no_journal:ext4_msg (sb,KERN_ERR ,"insufficient memory" ); goto failed_mount_wq; } -if (test_opt (sb,NOBH )) { -if (!(test_opt (sb,DATA_FLAGS ) ==EXT4_MOUNT_WRITEBACK_DATA )) { -ext4_msg (sb,KERN_WARNING ,"Ignoring nobh option - " -"its supported only with writeback mode" ); -clear_opt (sbi->s_mount_opt,NOBH ); - } -if (test_opt (sb,DIOREAD_NOLOCK )) { -ext4_msg (sb,KERN_WARNING ,"dioread_nolock option is " -"not supported with nobh mode" ); - goto failed_mount_wq; - } - } +EXT4_SB (sb)->dio_unwritten_wq =create_workqueue ("ext4-dio-unwritten" );if (!EXT4_SB (sb)->dio_unwritten_wq) {printk (KERN_ERR "EXT4-fs: failed to create DIO workqueue\n" );
[email protected]
maintainerQuoted 4 lines · Christoph Hellwig
The nobh option was only supported for writeback mode, but given that all write paths actually create buffer heads it effectively was a no-op already.
Signed-off-by Christoph Hellwig <[email protected]>
Added to the ext4 patch queue, thanks.
- Ted