diff options
Diffstat (limited to 'fs/btrfs')
| -rw-r--r-- | fs/btrfs/ctree.h | 4 | ||||
| -rw-r--r-- | fs/btrfs/disk-io.c | 8 | ||||
| -rw-r--r-- | fs/btrfs/inode.c | 40 | ||||
| -rw-r--r-- | fs/btrfs/super.c | 2 | ||||
| -rw-r--r-- | fs/btrfs/volumes.c | 18 |
5 files changed, 39 insertions, 33 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 29c20092847e..eaf286abad17 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
| @@ -2389,13 +2389,13 @@ unsigned long btrfs_force_ra(struct address_space *mapping, | |||
| 2389 | pgoff_t offset, pgoff_t last_index); | 2389 | pgoff_t offset, pgoff_t last_index); |
| 2390 | int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); | 2390 | int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf); |
| 2391 | int btrfs_readpage(struct file *file, struct page *page); | 2391 | int btrfs_readpage(struct file *file, struct page *page); |
| 2392 | void btrfs_delete_inode(struct inode *inode); | 2392 | void btrfs_evict_inode(struct inode *inode); |
| 2393 | void btrfs_put_inode(struct inode *inode); | 2393 | void btrfs_put_inode(struct inode *inode); |
| 2394 | int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc); | 2394 | int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc); |
| 2395 | void btrfs_dirty_inode(struct inode *inode); | 2395 | void btrfs_dirty_inode(struct inode *inode); |
| 2396 | struct inode *btrfs_alloc_inode(struct super_block *sb); | 2396 | struct inode *btrfs_alloc_inode(struct super_block *sb); |
| 2397 | void btrfs_destroy_inode(struct inode *inode); | 2397 | void btrfs_destroy_inode(struct inode *inode); |
| 2398 | void btrfs_drop_inode(struct inode *inode); | 2398 | int btrfs_drop_inode(struct inode *inode); |
| 2399 | int btrfs_init_cachep(void); | 2399 | int btrfs_init_cachep(void); |
| 2400 | void btrfs_destroy_cachep(void); | 2400 | void btrfs_destroy_cachep(void); |
| 2401 | long btrfs_ioctl_trans_end(struct file *file); | 2401 | long btrfs_ioctl_trans_end(struct file *file); |
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 34f7c375567e..64f10082f048 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
| @@ -480,7 +480,7 @@ static void end_workqueue_bio(struct bio *bio, int err) | |||
| 480 | end_io_wq->work.func = end_workqueue_fn; | 480 | end_io_wq->work.func = end_workqueue_fn; |
| 481 | end_io_wq->work.flags = 0; | 481 | end_io_wq->work.flags = 0; |
| 482 | 482 | ||
| 483 | if (bio->bi_rw & (1 << BIO_RW)) { | 483 | if (bio->bi_rw & REQ_WRITE) { |
| 484 | if (end_io_wq->metadata) | 484 | if (end_io_wq->metadata) |
| 485 | btrfs_queue_worker(&fs_info->endio_meta_write_workers, | 485 | btrfs_queue_worker(&fs_info->endio_meta_write_workers, |
| 486 | &end_io_wq->work); | 486 | &end_io_wq->work); |
| @@ -604,7 +604,7 @@ int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode, | |||
| 604 | 604 | ||
| 605 | atomic_inc(&fs_info->nr_async_submits); | 605 | atomic_inc(&fs_info->nr_async_submits); |
| 606 | 606 | ||
| 607 | if (rw & (1 << BIO_RW_SYNCIO)) | 607 | if (rw & REQ_SYNC) |
| 608 | btrfs_set_work_high_prio(&async->work); | 608 | btrfs_set_work_high_prio(&async->work); |
| 609 | 609 | ||
| 610 | btrfs_queue_worker(&fs_info->workers, &async->work); | 610 | btrfs_queue_worker(&fs_info->workers, &async->work); |
| @@ -668,7 +668,7 @@ static int btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, | |||
| 668 | bio, 1); | 668 | bio, 1); |
| 669 | BUG_ON(ret); | 669 | BUG_ON(ret); |
| 670 | 670 | ||
| 671 | if (!(rw & (1 << BIO_RW))) { | 671 | if (!(rw & REQ_WRITE)) { |
| 672 | /* | 672 | /* |
| 673 | * called for a read, do the setup so that checksum validation | 673 | * called for a read, do the setup so that checksum validation |
| 674 | * can happen in the async kernel threads | 674 | * can happen in the async kernel threads |
| @@ -1427,7 +1427,7 @@ static void end_workqueue_fn(struct btrfs_work *work) | |||
| 1427 | * ram and up to date before trying to verify things. For | 1427 | * ram and up to date before trying to verify things. For |
| 1428 | * blocksize <= pagesize, it is basically a noop | 1428 | * blocksize <= pagesize, it is basically a noop |
| 1429 | */ | 1429 | */ |
| 1430 | if (!(bio->bi_rw & (1 << BIO_RW)) && end_io_wq->metadata && | 1430 | if (!(bio->bi_rw & REQ_WRITE) && end_io_wq->metadata && |
| 1431 | !bio_ready_for_csum(bio)) { | 1431 | !bio_ready_for_csum(bio)) { |
| 1432 | btrfs_queue_worker(&fs_info->endio_meta_workers, | 1432 | btrfs_queue_worker(&fs_info->endio_meta_workers, |
| 1433 | &end_io_wq->work); | 1433 | &end_io_wq->work); |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 1bff92ad4744..c03864406af3 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
| @@ -1429,7 +1429,7 @@ static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, | |||
| 1429 | ret = btrfs_bio_wq_end_io(root->fs_info, bio, 0); | 1429 | ret = btrfs_bio_wq_end_io(root->fs_info, bio, 0); |
| 1430 | BUG_ON(ret); | 1430 | BUG_ON(ret); |
| 1431 | 1431 | ||
| 1432 | if (!(rw & (1 << BIO_RW))) { | 1432 | if (!(rw & REQ_WRITE)) { |
| 1433 | if (bio_flags & EXTENT_BIO_COMPRESSED) { | 1433 | if (bio_flags & EXTENT_BIO_COMPRESSED) { |
| 1434 | return btrfs_submit_compressed_read(inode, bio, | 1434 | return btrfs_submit_compressed_read(inode, bio, |
| 1435 | mirror_num, bio_flags); | 1435 | mirror_num, bio_flags); |
| @@ -1841,7 +1841,7 @@ static int btrfs_io_failed_hook(struct bio *failed_bio, | |||
| 1841 | bio->bi_size = 0; | 1841 | bio->bi_size = 0; |
| 1842 | 1842 | ||
| 1843 | bio_add_page(bio, page, failrec->len, start - page_offset(page)); | 1843 | bio_add_page(bio, page, failrec->len, start - page_offset(page)); |
| 1844 | if (failed_bio->bi_rw & (1 << BIO_RW)) | 1844 | if (failed_bio->bi_rw & REQ_WRITE) |
| 1845 | rw = WRITE; | 1845 | rw = WRITE; |
| 1846 | else | 1846 | else |
| 1847 | rw = READ; | 1847 | rw = READ; |
| @@ -2938,7 +2938,6 @@ int btrfs_unlink_subvol(struct btrfs_trans_handle *trans, | |||
| 2938 | dir->i_mtime = dir->i_ctime = CURRENT_TIME; | 2938 | dir->i_mtime = dir->i_ctime = CURRENT_TIME; |
| 2939 | ret = btrfs_update_inode(trans, root, dir); | 2939 | ret = btrfs_update_inode(trans, root, dir); |
| 2940 | BUG_ON(ret); | 2940 | BUG_ON(ret); |
| 2941 | dir->i_sb->s_dirt = 1; | ||
| 2942 | 2941 | ||
| 2943 | btrfs_free_path(path); | 2942 | btrfs_free_path(path); |
| 2944 | return 0; | 2943 | return 0; |
| @@ -3656,17 +3655,19 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr) | |||
| 3656 | if (err) | 3655 | if (err) |
| 3657 | return err; | 3656 | return err; |
| 3658 | } | 3657 | } |
| 3659 | attr->ia_valid &= ~ATTR_SIZE; | ||
| 3660 | 3658 | ||
| 3661 | if (attr->ia_valid) | 3659 | if (attr->ia_valid) { |
| 3662 | err = inode_setattr(inode, attr); | 3660 | setattr_copy(inode, attr); |
| 3661 | mark_inode_dirty(inode); | ||
| 3662 | |||
| 3663 | if (attr->ia_valid & ATTR_MODE) | ||
| 3664 | err = btrfs_acl_chmod(inode); | ||
| 3665 | } | ||
| 3663 | 3666 | ||
| 3664 | if (!err && ((attr->ia_valid & ATTR_MODE))) | ||
| 3665 | err = btrfs_acl_chmod(inode); | ||
| 3666 | return err; | 3667 | return err; |
| 3667 | } | 3668 | } |
| 3668 | 3669 | ||
| 3669 | void btrfs_delete_inode(struct inode *inode) | 3670 | void btrfs_evict_inode(struct inode *inode) |
| 3670 | { | 3671 | { |
| 3671 | struct btrfs_trans_handle *trans; | 3672 | struct btrfs_trans_handle *trans; |
| 3672 | struct btrfs_root *root = BTRFS_I(inode)->root; | 3673 | struct btrfs_root *root = BTRFS_I(inode)->root; |
| @@ -3674,10 +3675,14 @@ void btrfs_delete_inode(struct inode *inode) | |||
| 3674 | int ret; | 3675 | int ret; |
| 3675 | 3676 | ||
| 3676 | truncate_inode_pages(&inode->i_data, 0); | 3677 | truncate_inode_pages(&inode->i_data, 0); |
| 3678 | if (inode->i_nlink && btrfs_root_refs(&root->root_item) != 0) | ||
| 3679 | goto no_delete; | ||
| 3680 | |||
| 3677 | if (is_bad_inode(inode)) { | 3681 | if (is_bad_inode(inode)) { |
| 3678 | btrfs_orphan_del(NULL, inode); | 3682 | btrfs_orphan_del(NULL, inode); |
| 3679 | goto no_delete; | 3683 | goto no_delete; |
| 3680 | } | 3684 | } |
| 3685 | /* do we really want it for ->i_nlink > 0 and zero btrfs_root_refs? */ | ||
| 3681 | btrfs_wait_ordered_range(inode, 0, (u64)-1); | 3686 | btrfs_wait_ordered_range(inode, 0, (u64)-1); |
| 3682 | 3687 | ||
| 3683 | if (root->fs_info->log_root_recovering) { | 3688 | if (root->fs_info->log_root_recovering) { |
| @@ -3727,7 +3732,7 @@ void btrfs_delete_inode(struct inode *inode) | |||
| 3727 | btrfs_end_transaction(trans, root); | 3732 | btrfs_end_transaction(trans, root); |
| 3728 | btrfs_btree_balance_dirty(root, nr); | 3733 | btrfs_btree_balance_dirty(root, nr); |
| 3729 | no_delete: | 3734 | no_delete: |
| 3730 | clear_inode(inode); | 3735 | end_writeback(inode); |
| 3731 | return; | 3736 | return; |
| 3732 | } | 3737 | } |
| 3733 | 3738 | ||
| @@ -3858,7 +3863,7 @@ again: | |||
| 3858 | p = &parent->rb_right; | 3863 | p = &parent->rb_right; |
| 3859 | else { | 3864 | else { |
| 3860 | WARN_ON(!(entry->vfs_inode.i_state & | 3865 | WARN_ON(!(entry->vfs_inode.i_state & |
| 3861 | (I_WILL_FREE | I_FREEING | I_CLEAR))); | 3866 | (I_WILL_FREE | I_FREEING))); |
| 3862 | rb_erase(parent, &root->inode_tree); | 3867 | rb_erase(parent, &root->inode_tree); |
| 3863 | RB_CLEAR_NODE(parent); | 3868 | RB_CLEAR_NODE(parent); |
| 3864 | spin_unlock(&root->inode_lock); | 3869 | spin_unlock(&root->inode_lock); |
| @@ -3937,7 +3942,7 @@ again: | |||
| 3937 | if (atomic_read(&inode->i_count) > 1) | 3942 | if (atomic_read(&inode->i_count) > 1) |
| 3938 | d_prune_aliases(inode); | 3943 | d_prune_aliases(inode); |
| 3939 | /* | 3944 | /* |
| 3940 | * btrfs_drop_inode will remove it from | 3945 | * btrfs_drop_inode will have it removed from |
| 3941 | * the inode cache when its usage count | 3946 | * the inode cache when its usage count |
| 3942 | * hits zero. | 3947 | * hits zero. |
| 3943 | */ | 3948 | */ |
| @@ -5642,7 +5647,7 @@ static void btrfs_submit_direct(int rw, struct bio *bio, struct inode *inode, | |||
| 5642 | struct bio_vec *bvec = bio->bi_io_vec; | 5647 | struct bio_vec *bvec = bio->bi_io_vec; |
| 5643 | u64 start; | 5648 | u64 start; |
| 5644 | int skip_sum; | 5649 | int skip_sum; |
| 5645 | int write = rw & (1 << BIO_RW); | 5650 | int write = rw & REQ_WRITE; |
| 5646 | int ret = 0; | 5651 | int ret = 0; |
| 5647 | 5652 | ||
| 5648 | skip_sum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM; | 5653 | skip_sum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM; |
| @@ -6331,13 +6336,14 @@ free: | |||
| 6331 | kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode)); | 6336 | kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode)); |
| 6332 | } | 6337 | } |
| 6333 | 6338 | ||
| 6334 | void btrfs_drop_inode(struct inode *inode) | 6339 | int btrfs_drop_inode(struct inode *inode) |
| 6335 | { | 6340 | { |
| 6336 | struct btrfs_root *root = BTRFS_I(inode)->root; | 6341 | struct btrfs_root *root = BTRFS_I(inode)->root; |
| 6337 | if (inode->i_nlink > 0 && btrfs_root_refs(&root->root_item) == 0) | 6342 | |
| 6338 | generic_delete_inode(inode); | 6343 | if (btrfs_root_refs(&root->root_item) == 0) |
| 6344 | return 1; | ||
| 6339 | else | 6345 | else |
| 6340 | generic_drop_inode(inode); | 6346 | return generic_drop_inode(inode); |
| 6341 | } | 6347 | } |
| 6342 | 6348 | ||
| 6343 | static void init_once(void *foo) | 6349 | static void init_once(void *foo) |
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index f2393b390318..1776dbd8dc98 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
| @@ -797,7 +797,7 @@ static int btrfs_unfreeze(struct super_block *sb) | |||
| 797 | 797 | ||
| 798 | static const struct super_operations btrfs_super_ops = { | 798 | static const struct super_operations btrfs_super_ops = { |
| 799 | .drop_inode = btrfs_drop_inode, | 799 | .drop_inode = btrfs_drop_inode, |
| 800 | .delete_inode = btrfs_delete_inode, | 800 | .evict_inode = btrfs_evict_inode, |
| 801 | .put_super = btrfs_put_super, | 801 | .put_super = btrfs_put_super, |
| 802 | .sync_fs = btrfs_sync_fs, | 802 | .sync_fs = btrfs_sync_fs, |
| 803 | .show_options = btrfs_show_options, | 803 | .show_options = btrfs_show_options, |
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index d6e3af8be95b..dd318ff280b2 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c | |||
| @@ -258,7 +258,7 @@ loop_lock: | |||
| 258 | 258 | ||
| 259 | BUG_ON(atomic_read(&cur->bi_cnt) == 0); | 259 | BUG_ON(atomic_read(&cur->bi_cnt) == 0); |
| 260 | 260 | ||
| 261 | if (bio_rw_flagged(cur, BIO_RW_SYNCIO)) | 261 | if (cur->bi_rw & REQ_SYNC) |
| 262 | num_sync_run++; | 262 | num_sync_run++; |
| 263 | 263 | ||
| 264 | submit_bio(cur->bi_rw, cur); | 264 | submit_bio(cur->bi_rw, cur); |
| @@ -2651,7 +2651,7 @@ static int __btrfs_map_block(struct btrfs_mapping_tree *map_tree, int rw, | |||
| 2651 | int max_errors = 0; | 2651 | int max_errors = 0; |
| 2652 | struct btrfs_multi_bio *multi = NULL; | 2652 | struct btrfs_multi_bio *multi = NULL; |
| 2653 | 2653 | ||
| 2654 | if (multi_ret && !(rw & (1 << BIO_RW))) | 2654 | if (multi_ret && !(rw & REQ_WRITE)) |
| 2655 | stripes_allocated = 1; | 2655 | stripes_allocated = 1; |
| 2656 | again: | 2656 | again: |
| 2657 | if (multi_ret) { | 2657 | if (multi_ret) { |
| @@ -2687,7 +2687,7 @@ again: | |||
| 2687 | mirror_num = 0; | 2687 | mirror_num = 0; |
| 2688 | 2688 | ||
| 2689 | /* if our multi bio struct is too small, back off and try again */ | 2689 | /* if our multi bio struct is too small, back off and try again */ |
| 2690 | if (rw & (1 << BIO_RW)) { | 2690 | if (rw & REQ_WRITE) { |
| 2691 | if (map->type & (BTRFS_BLOCK_GROUP_RAID1 | | 2691 | if (map->type & (BTRFS_BLOCK_GROUP_RAID1 | |
| 2692 | BTRFS_BLOCK_GROUP_DUP)) { | 2692 | BTRFS_BLOCK_GROUP_DUP)) { |
| 2693 | stripes_required = map->num_stripes; | 2693 | stripes_required = map->num_stripes; |
| @@ -2697,7 +2697,7 @@ again: | |||
| 2697 | max_errors = 1; | 2697 | max_errors = 1; |
| 2698 | } | 2698 | } |
| 2699 | } | 2699 | } |
| 2700 | if (multi_ret && (rw & (1 << BIO_RW)) && | 2700 | if (multi_ret && (rw & REQ_WRITE) && |
| 2701 | stripes_allocated < stripes_required) { | 2701 | stripes_allocated < stripes_required) { |
| 2702 | stripes_allocated = map->num_stripes; | 2702 | stripes_allocated = map->num_stripes; |
| 2703 | free_extent_map(em); | 2703 | free_extent_map(em); |
| @@ -2733,7 +2733,7 @@ again: | |||
| 2733 | num_stripes = 1; | 2733 | num_stripes = 1; |
| 2734 | stripe_index = 0; | 2734 | stripe_index = 0; |
| 2735 | if (map->type & BTRFS_BLOCK_GROUP_RAID1) { | 2735 | if (map->type & BTRFS_BLOCK_GROUP_RAID1) { |
| 2736 | if (unplug_page || (rw & (1 << BIO_RW))) | 2736 | if (unplug_page || (rw & REQ_WRITE)) |
| 2737 | num_stripes = map->num_stripes; | 2737 | num_stripes = map->num_stripes; |
| 2738 | else if (mirror_num) | 2738 | else if (mirror_num) |
| 2739 | stripe_index = mirror_num - 1; | 2739 | stripe_index = mirror_num - 1; |
| @@ -2744,7 +2744,7 @@ again: | |||
| 2744 | } | 2744 | } |
| 2745 | 2745 | ||
| 2746 | } else if (map->type & BTRFS_BLOCK_GROUP_DUP) { | 2746 | } else if (map->type & BTRFS_BLOCK_GROUP_DUP) { |
| 2747 | if (rw & (1 << BIO_RW)) | 2747 | if (rw & REQ_WRITE) |
| 2748 | num_stripes = map->num_stripes; | 2748 | num_stripes = map->num_stripes; |
| 2749 | else if (mirror_num) | 2749 | else if (mirror_num) |
| 2750 | stripe_index = mirror_num - 1; | 2750 | stripe_index = mirror_num - 1; |
| @@ -2755,7 +2755,7 @@ again: | |||
| 2755 | stripe_index = do_div(stripe_nr, factor); | 2755 | stripe_index = do_div(stripe_nr, factor); |
| 2756 | stripe_index *= map->sub_stripes; | 2756 | stripe_index *= map->sub_stripes; |
| 2757 | 2757 | ||
| 2758 | if (unplug_page || (rw & (1 << BIO_RW))) | 2758 | if (unplug_page || (rw & REQ_WRITE)) |
| 2759 | num_stripes = map->sub_stripes; | 2759 | num_stripes = map->sub_stripes; |
| 2760 | else if (mirror_num) | 2760 | else if (mirror_num) |
| 2761 | stripe_index += mirror_num - 1; | 2761 | stripe_index += mirror_num - 1; |
| @@ -2945,7 +2945,7 @@ static noinline int schedule_bio(struct btrfs_root *root, | |||
| 2945 | struct btrfs_pending_bios *pending_bios; | 2945 | struct btrfs_pending_bios *pending_bios; |
| 2946 | 2946 | ||
| 2947 | /* don't bother with additional async steps for reads, right now */ | 2947 | /* don't bother with additional async steps for reads, right now */ |
| 2948 | if (!(rw & (1 << BIO_RW))) { | 2948 | if (!(rw & REQ_WRITE)) { |
| 2949 | bio_get(bio); | 2949 | bio_get(bio); |
| 2950 | submit_bio(rw, bio); | 2950 | submit_bio(rw, bio); |
| 2951 | bio_put(bio); | 2951 | bio_put(bio); |
| @@ -2964,7 +2964,7 @@ static noinline int schedule_bio(struct btrfs_root *root, | |||
| 2964 | bio->bi_rw |= rw; | 2964 | bio->bi_rw |= rw; |
| 2965 | 2965 | ||
| 2966 | spin_lock(&device->io_lock); | 2966 | spin_lock(&device->io_lock); |
| 2967 | if (bio_rw_flagged(bio, BIO_RW_SYNCIO)) | 2967 | if (bio->bi_rw & REQ_SYNC) |
| 2968 | pending_bios = &device->pending_sync_bios; | 2968 | pending_bios = &device->pending_sync_bios; |
| 2969 | else | 2969 | else |
| 2970 | pending_bios = &device->pending_bios; | 2970 | pending_bios = &device->pending_bios; |
