Remove branch hints
cover Remove branch hints
Two patches removing some 'unlikely' branch hints where it does not make much sense. Sent separately from the other cleanups in case they do not seem to fit.
You can pull from
git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git remove-unlikely
David Sterba (2):
btrfs: remove unlikely from NULL checks
btrfs: remove unlikely from data-dependent branches and slow paths
fs/btrfs/async-thread.c | 10 +++++----- fs/btrfs/extent-tree.c | 4 ++-- fs/btrfs/file.c | 4 ++-- fs/btrfs/inode.c | 10 +++++----- fs/btrfs/ioctl.c | 2 +- fs/btrfs/transaction.c | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-)
Signature · 1 line
1.8.4.5
PATCH 1/2 btrfs: remove unlikely from NULL checks
Unlikely is implicit for NULL checks of pointers.
--- fs/btrfs/async-thread.c | 10 +++++----- fs/btrfs/inode.c | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-)
fs/btrfs/async-thread.c +5 -5
@@ -92,7 +92,7 @@ __btrfs_alloc_workqueue(const char *name, int flags, int max_active, {struct __btrfs_workqueue *ret =kzalloc (sizeof (*ret),GFP_NOFS ); -if (unlikely (!ret)) +if (!ret)return NULL ; ret->max_active = max_active;
@@ -116,7 +116,7 @@ __btrfs_alloc_workqueue(const char *name, int flags, int max_active, ret->normal_wq =alloc_workqueue ("%s-%s" , flags, ret->max_active,"btrfs" , name); -if (unlikely (!ret->normal_wq)) { +if (!ret->normal_wq) {kfree (ret);return NULL ; }
@@ -138,12 +138,12 @@ struct btrfs_workqueue *btrfs_alloc_workqueue(const char *name, {struct btrfs_workqueue *ret =kzalloc (sizeof (*ret),GFP_NOFS ); -if (unlikely (!ret)) +if (!ret)return NULL ; ret->normal =__btrfs_alloc_workqueue (name, flags & ~WQ_HIGHPRI , max_active, thresh); -if (unlikely (!ret->normal)) { +if (!ret->normal) {kfree (ret);return NULL ; }
@@ -151,7 +151,7 @@ struct btrfs_workqueue *btrfs_alloc_workqueue(const char *name,if (flags &WQ_HIGHPRI ) { ret->high =__btrfs_alloc_workqueue (name, flags, max_active, thresh); -if (unlikely (!ret->high)) { +if (!ret->high) {__btrfs_destroy_workqueue (ret->normal);kfree (ret);return NULL ;
fs/btrfs/inode.c +1 -1
@@ -9013,7 +9013,7 @@ static int __start_delalloc_inodes(struct btrfs_root *root, int delay_iput,spin_unlock (&root->delalloc_lock); work =btrfs_alloc_delalloc_work (inode,0 , delay_iput); -if (unlikely (!work)) { +if (!work) {if (delay_iput)btrfs_add_delayed_iput (inode);else
Signature · 1 line
1.8.4.5
PATCH 2/2 btrfs: remove unlikely from data-dependent branches and slow paths
In reply to David SterbaThere are the branch hints that obviously depend on the data being processed, the CPU predictor will do better job according to the actual load. It also does not make sense to use the hints in slow paths that do a lot of other operations like locking, waiting or IO.
--- fs/btrfs/extent-tree.c | 4 ++-- fs/btrfs/file.c | 4 ++-- fs/btrfs/inode.c | 8 ++++---- fs/btrfs/ioctl.c | 2 +- fs/btrfs/transaction.c | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-)
fs/btrfs/extent-tree.c +2 -2
@@ -9694,7 +9694,7 @@ void btrfs_end_nocow_write(struct btrfs_root *root)int btrfs_start_nocow_write (struct btrfs_root *root) { -if (unlikely (atomic_read (&root->will_be_snapshoted))) +if (atomic_read (&root->will_be_snapshoted))return 0 ;percpu_counter_inc (&root->subv_writers->counter);
@@ -9702,7 +9702,7 @@ int btrfs_start_nocow_write(struct btrfs_root *root)* Make sure counter is updated before we check for snapshot creation. */ smp_mb (); -if (unlikely (atomic_read (&root->will_be_snapshoted))) { +if (atomic_read (&root->will_be_snapshoted)) {btrfs_end_nocow_write (root);return 0 ; }
fs/btrfs/file.c +2 -2
@@ -452,7 +452,7 @@ static noinline int btrfs_copy_from_user(loff_t pos, int num_pages,if (unlikely (copied ==0 ))break ; -if (unlikely (copied <PAGE_CACHE_SIZE - offset)) { +if (copied <PAGE_CACHE_SIZE - offset) { offset += copied; }else { pg++;
@@ -1792,7 +1792,7 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,if (sync)atomic_inc (&BTRFS_I (inode)->sync_writers); -if (unlikely (file->f_flags &O_DIRECT )) { +if (file->f_flags &O_DIRECT ) { num_written =__btrfs_direct_write (iocb, from, pos); }else { num_written =__btrfs_buffered_write (file, from, pos);
fs/btrfs/inode.c +4 -4
@@ -7802,9 +7802,9 @@ static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip,atomic_inc (&dip->pending_bios);while (bvec <= (orig_bio->bi_io_vec + orig_bio->bi_vcnt -1 )) { -if (unlikely (map_length < submit_len + bvec->bv_len || +if (map_length < submit_len + bvec->bv_len ||bio_add_page (bio, bvec->bv_page, bvec->bv_len, - bvec->bv_offset) < bvec->bv_len)) { + bvec->bv_offset) < bvec->bv_len) {/* * inc the count before we submit the bio so * we know the end IO handler won't happen before
@@ -8017,8 +8017,8 @@ static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb, ret =btrfs_delalloc_reserve_space (inode, count);if (ret) goto out; - }else if (unlikely (test_bit (BTRFS_INODE_READDIO_NEED_LOCK , - &BTRFS_I (inode)->runtime_flags))) { + }else if (test_bit (BTRFS_INODE_READDIO_NEED_LOCK , + &BTRFS_I (inode)->runtime_flags)) {inode_dio_done (inode); flags =DIO_LOCKING |DIO_SKIP_HOLES ; wakeup = false;
fs/btrfs/ioctl.c +1 -1
@@ -3167,7 +3167,7 @@ static void clone_update_extent_map(struct inode *inode, em->start + em->len - 1, 0); } -if (unlikely (ret)) +if (ret)set_bit (BTRFS_INODE_NEEDS_FULL_SYNC , &BTRFS_I (inode)->runtime_flags); }
fs/btrfs/transaction.c +1 -1
@@ -418,7 +418,7 @@ start_transaction(struct btrfs_root *root, u64 num_items, unsigned int type,/* * Do the reservation for the relocation root creation */ -if (unlikely (need_reserve_reloc_root (root))) { +if (need_reserve_reloc_root (root)) { num_bytes += root->nodesize; reloc_reserved = true; }
Signature · 1 line
1.8.4.5
Quoted 10 lines · David Sterba
Two patches removing some 'unlikely' branch hints where it does not make much sense. Sent separately from the other cleanups in case they do not seem to fit.
You can pull from
git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.gitremove-unlikelyDavid Sterba (2):
btrfs: remove unlikely from NULL checks
btrfs: remove unlikely from data-dependent branches and slow paths
- z