Commit fb0d1eb8 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs

Pull btrfs fixes from Chris Mason:
 "Almost all of these are bug fixes.  Dave Sterba's documentation update
  is the big exception because he removed our promises to set any
  machine running Btrfs on fire"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
  Documentation: filesystems: update btrfs tools section
  Documentation: filesystems: add new btrfs mount options
  btrfs: update kconfig help text
  btrfs: fix bio_size_ok() for max_sectors > 0xffff
  btrfs: Use trace condition for get_extent tracepoint
  btrfs: fix typo in the log message
  Btrfs: fix list delete warning when removing ordered root from the list
  Btrfs: print bytenr instead of page pointer in check-int
  Btrfs: remove dead codes from ctree.h
  Btrfs: don't wait for ordered data outside desired range
  Btrfs: fix lockdep error in async commit
  Btrfs: avoid heavy operations in btrfs_commit_super
  Btrfs: fix __btrfs_start_workers retval
  Btrfs: disable online raid-repair on ro mounts
  Btrfs: do not inc uncorrectable_errors counter on ro scrubs
  Btrfs: only drop modified extents if we logged the whole inode
  Btrfs: make sure to copy everything if we rename
  Btrfs: don't BUG_ON() if we get an error walking backrefs
parents 6ea9786e c7501796
...@@ -70,6 +70,12 @@ Unless otherwise specified, all options default to off. ...@@ -70,6 +70,12 @@ Unless otherwise specified, all options default to off.
See comments at the top of fs/btrfs/check-integrity.c for more info. See comments at the top of fs/btrfs/check-integrity.c for more info.
commit=<seconds>
Set the interval of periodic commit, 30 seconds by default. Higher
values defer data being synced to permanent storage with obvious
consequences when the system crashes. The upper bound is not forced,
but a warning is printed if it's more than 300 seconds (5 minutes).
compress compress
compress=<type> compress=<type>
compress-force compress-force
...@@ -154,6 +160,10 @@ Unless otherwise specified, all options default to off. ...@@ -154,6 +160,10 @@ Unless otherwise specified, all options default to off.
Currently this scans a list of several previous tree roots and tries to Currently this scans a list of several previous tree roots and tries to
use the first readable. use the first readable.
rescan_uuid_tree
Force check and rebuild procedure of the UUID tree. This should not
normally be needed.
skip_balance skip_balance
Skip automatic resume of interrupted balance operation after mount. Skip automatic resume of interrupted balance operation after mount.
May be resumed with "btrfs balance resume." May be resumed with "btrfs balance resume."
...@@ -234,24 +244,14 @@ available from the git repository at the following location: ...@@ -234,24 +244,14 @@ available from the git repository at the following location:
These include the following tools: These include the following tools:
mkfs.btrfs: create a filesystem * mkfs.btrfs: create a filesystem
btrfsctl: control program to create snapshots and subvolumes:
mount /dev/sda2 /mnt * btrfs: a single tool to manage the filesystems, refer to the manpage for more details
btrfsctl -s new_subvol_name /mnt
btrfsctl -s snapshot_of_default /mnt/default
btrfsctl -s snapshot_of_new_subvol /mnt/new_subvol_name
btrfsctl -s snapshot_of_a_snapshot /mnt/snapshot_of_new_subvol
ls /mnt
default snapshot_of_a_snapshot snapshot_of_new_subvol
new_subvol_name snapshot_of_default
Snapshots and subvolumes cannot be deleted right now, but you can * 'btrfsck' or 'btrfs check': do a consistency check of the filesystem
rm -rf all the files and directories inside them.
btrfsck: do a limited check of the FS extent trees. Other tools for specific tasks:
btrfs-debug-tree: print all of the FS metadata in text form. Example: * btrfs-convert: in-place conversion from ext2/3/4 filesystems
btrfs-debug-tree /dev/sda2 >& big_output_file * btrfs-image: dump filesystem metadata for debugging
...@@ -9,12 +9,17 @@ config BTRFS_FS ...@@ -9,12 +9,17 @@ config BTRFS_FS
select XOR_BLOCKS select XOR_BLOCKS
help help
Btrfs is a new filesystem with extents, writable snapshotting, Btrfs is a general purpose copy-on-write filesystem with extents,
support for multiple devices and many more features. writable snapshotting, support for multiple devices and many more
features focused on fault tolerance, repair and easy administration.
Btrfs is highly experimental, and THE DISK FORMAT IS NOT YET The filesystem disk format is no longer unstable, and it's not
FINALIZED. You should say N here unless you are interested in expected to change unless there are strong reasons to do so. If there
testing Btrfs with non-critical data. is a format change, file systems with a unchanged format will
continue to be mountable and usable by newer kernels.
For more information, please see the web pages at
http://btrfs.wiki.kernel.org.
To compile this file system support as a module, choose M here. The To compile this file system support as a module, choose M here. The
module will be called btrfs. module will be called btrfs.
......
...@@ -495,6 +495,7 @@ static int __btrfs_start_workers(struct btrfs_workers *workers) ...@@ -495,6 +495,7 @@ static int __btrfs_start_workers(struct btrfs_workers *workers)
spin_lock_irq(&workers->lock); spin_lock_irq(&workers->lock);
if (workers->stopping) { if (workers->stopping) {
spin_unlock_irq(&workers->lock); spin_unlock_irq(&workers->lock);
ret = -EINVAL;
goto fail_kthread; goto fail_kthread;
} }
list_add_tail(&worker->worker_list, &workers->idle_list); list_add_tail(&worker->worker_list, &workers->idle_list);
......
...@@ -77,6 +77,15 @@ ...@@ -77,6 +77,15 @@
* the integrity of (super)-block write requests, do not * the integrity of (super)-block write requests, do not
* enable the config option BTRFS_FS_CHECK_INTEGRITY to * enable the config option BTRFS_FS_CHECK_INTEGRITY to
* include and compile the integrity check tool. * include and compile the integrity check tool.
*
* Expect millions of lines of information in the kernel log with an
* enabled check_int_print_mask. Therefore set LOG_BUF_SHIFT in the
* kernel config to at least 26 (which is 64MB). Usually the value is
* limited to 21 (which is 2MB) in init/Kconfig. The file needs to be
* changed like this before LOG_BUF_SHIFT can be set to a high value:
* config LOG_BUF_SHIFT
* int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
* range 12 30
*/ */
#include <linux/sched.h> #include <linux/sched.h>
...@@ -124,6 +133,7 @@ ...@@ -124,6 +133,7 @@
#define BTRFSIC_PRINT_MASK_INITIAL_DATABASE 0x00000400 #define BTRFSIC_PRINT_MASK_INITIAL_DATABASE 0x00000400
#define BTRFSIC_PRINT_MASK_NUM_COPIES 0x00000800 #define BTRFSIC_PRINT_MASK_NUM_COPIES 0x00000800
#define BTRFSIC_PRINT_MASK_TREE_WITH_ALL_MIRRORS 0x00001000 #define BTRFSIC_PRINT_MASK_TREE_WITH_ALL_MIRRORS 0x00001000
#define BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH_VERBOSE 0x00002000
struct btrfsic_dev_state; struct btrfsic_dev_state;
struct btrfsic_state; struct btrfsic_state;
...@@ -3015,6 +3025,7 @@ void btrfsic_submit_bio(int rw, struct bio *bio) ...@@ -3015,6 +3025,7 @@ void btrfsic_submit_bio(int rw, struct bio *bio)
(rw & WRITE) && NULL != bio->bi_io_vec) { (rw & WRITE) && NULL != bio->bi_io_vec) {
unsigned int i; unsigned int i;
u64 dev_bytenr; u64 dev_bytenr;
u64 cur_bytenr;
int bio_is_patched; int bio_is_patched;
char **mapped_datav; char **mapped_datav;
...@@ -3033,6 +3044,7 @@ void btrfsic_submit_bio(int rw, struct bio *bio) ...@@ -3033,6 +3044,7 @@ void btrfsic_submit_bio(int rw, struct bio *bio)
GFP_NOFS); GFP_NOFS);
if (!mapped_datav) if (!mapped_datav)
goto leave; goto leave;
cur_bytenr = dev_bytenr;
for (i = 0; i < bio->bi_vcnt; i++) { for (i = 0; i < bio->bi_vcnt; i++) {
BUG_ON(bio->bi_io_vec[i].bv_len != PAGE_CACHE_SIZE); BUG_ON(bio->bi_io_vec[i].bv_len != PAGE_CACHE_SIZE);
mapped_datav[i] = kmap(bio->bi_io_vec[i].bv_page); mapped_datav[i] = kmap(bio->bi_io_vec[i].bv_page);
...@@ -3044,16 +3056,13 @@ void btrfsic_submit_bio(int rw, struct bio *bio) ...@@ -3044,16 +3056,13 @@ void btrfsic_submit_bio(int rw, struct bio *bio)
kfree(mapped_datav); kfree(mapped_datav);
goto leave; goto leave;
} }
if ((BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH | if (dev_state->state->print_mask &
BTRFSIC_PRINT_MASK_VERBOSE) == BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH_VERBOSE)
(dev_state->state->print_mask &
(BTRFSIC_PRINT_MASK_SUBMIT_BIO_BH |
BTRFSIC_PRINT_MASK_VERBOSE)))
printk(KERN_INFO printk(KERN_INFO
"#%u: page=%p, len=%u, offset=%u\n", "#%u: bytenr=%llu, len=%u, offset=%u\n",
i, bio->bi_io_vec[i].bv_page, i, cur_bytenr, bio->bi_io_vec[i].bv_len,
bio->bi_io_vec[i].bv_len,
bio->bi_io_vec[i].bv_offset); bio->bi_io_vec[i].bv_offset);
cur_bytenr += bio->bi_io_vec[i].bv_len;
} }
btrfsic_process_written_block(dev_state, dev_bytenr, btrfsic_process_written_block(dev_state, dev_bytenr,
mapped_datav, bio->bi_vcnt, mapped_datav, bio->bi_vcnt,
......
...@@ -3613,9 +3613,6 @@ int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans, ...@@ -3613,9 +3613,6 @@ int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans,
struct btrfs_ordered_sum *sums); struct btrfs_ordered_sum *sums);
int btrfs_csum_one_bio(struct btrfs_root *root, struct inode *inode, int btrfs_csum_one_bio(struct btrfs_root *root, struct inode *inode,
struct bio *bio, u64 file_start, int contig); struct bio *bio, u64 file_start, int contig);
int btrfs_csum_truncate(struct btrfs_trans_handle *trans,
struct btrfs_root *root, struct btrfs_path *path,
u64 isize);
int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end, int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end,
struct list_head *list, int search_commit); struct list_head *list, int search_commit);
/* inode.c */ /* inode.c */
...@@ -3744,9 +3741,6 @@ void btrfs_cleanup_defrag_inodes(struct btrfs_fs_info *fs_info); ...@@ -3744,9 +3741,6 @@ void btrfs_cleanup_defrag_inodes(struct btrfs_fs_info *fs_info);
int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync); int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync);
void btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, void btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end,
int skip_pinned); int skip_pinned);
int btrfs_replace_extent_cache(struct inode *inode, struct extent_map *replace,
u64 start, u64 end, int skip_pinned,
int modified);
extern const struct file_operations btrfs_file_operations; extern const struct file_operations btrfs_file_operations;
int __btrfs_drop_extents(struct btrfs_trans_handle *trans, int __btrfs_drop_extents(struct btrfs_trans_handle *trans,
struct btrfs_root *root, struct inode *inode, struct btrfs_root *root, struct inode *inode,
......
...@@ -366,7 +366,7 @@ int btrfs_dev_replace_start(struct btrfs_root *root, ...@@ -366,7 +366,7 @@ int btrfs_dev_replace_start(struct btrfs_root *root,
dev_replace->tgtdev = tgt_device; dev_replace->tgtdev = tgt_device;
printk_in_rcu(KERN_INFO printk_in_rcu(KERN_INFO
"btrfs: dev_replace from %s (devid %llu) to %s) started\n", "btrfs: dev_replace from %s (devid %llu) to %s started\n",
src_device->missing ? "<missing disk>" : src_device->missing ? "<missing disk>" :
rcu_str_deref(src_device->name), rcu_str_deref(src_device->name),
src_device->devid, src_device->devid,
......
...@@ -3517,7 +3517,6 @@ int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info) ...@@ -3517,7 +3517,6 @@ int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info)
int btrfs_commit_super(struct btrfs_root *root) int btrfs_commit_super(struct btrfs_root *root)
{ {
struct btrfs_trans_handle *trans; struct btrfs_trans_handle *trans;
int ret;
mutex_lock(&root->fs_info->cleaner_mutex); mutex_lock(&root->fs_info->cleaner_mutex);
btrfs_run_delayed_iputs(root); btrfs_run_delayed_iputs(root);
...@@ -3531,25 +3530,7 @@ int btrfs_commit_super(struct btrfs_root *root) ...@@ -3531,25 +3530,7 @@ int btrfs_commit_super(struct btrfs_root *root)
trans = btrfs_join_transaction(root); trans = btrfs_join_transaction(root);
if (IS_ERR(trans)) if (IS_ERR(trans))
return PTR_ERR(trans); return PTR_ERR(trans);
ret = btrfs_commit_transaction(trans, root); return btrfs_commit_transaction(trans, root);
if (ret)
return ret;
/* run commit again to drop the original snapshot */
trans = btrfs_join_transaction(root);
if (IS_ERR(trans))
return PTR_ERR(trans);
ret = btrfs_commit_transaction(trans, root);
if (ret)
return ret;
ret = btrfs_write_and_wait_transaction(NULL, root);
if (ret) {
btrfs_error(root->fs_info, ret,
"Failed to sync btree inode to disk.");
return ret;
}
ret = write_ctree_super(NULL, root, 0);
return ret;
} }
int close_ctree(struct btrfs_root *root) int close_ctree(struct btrfs_root *root)
......
...@@ -1980,6 +1980,7 @@ int repair_io_failure(struct btrfs_fs_info *fs_info, u64 start, ...@@ -1980,6 +1980,7 @@ int repair_io_failure(struct btrfs_fs_info *fs_info, u64 start,
struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree; struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree;
int ret; int ret;
ASSERT(!(fs_info->sb->s_flags & MS_RDONLY));
BUG_ON(!mirror_num); BUG_ON(!mirror_num);
/* we can't repair anything in raid56 yet */ /* we can't repair anything in raid56 yet */
...@@ -2036,6 +2037,9 @@ int repair_eb_io_failure(struct btrfs_root *root, struct extent_buffer *eb, ...@@ -2036,6 +2037,9 @@ int repair_eb_io_failure(struct btrfs_root *root, struct extent_buffer *eb,
unsigned long i, num_pages = num_extent_pages(eb->start, eb->len); unsigned long i, num_pages = num_extent_pages(eb->start, eb->len);
int ret = 0; int ret = 0;
if (root->fs_info->sb->s_flags & MS_RDONLY)
return -EROFS;
for (i = 0; i < num_pages; i++) { for (i = 0; i < num_pages; i++) {
struct page *p = extent_buffer_page(eb, i); struct page *p = extent_buffer_page(eb, i);
ret = repair_io_failure(root->fs_info, start, PAGE_CACHE_SIZE, ret = repair_io_failure(root->fs_info, start, PAGE_CACHE_SIZE,
...@@ -2057,12 +2061,12 @@ static int clean_io_failure(u64 start, struct page *page) ...@@ -2057,12 +2061,12 @@ static int clean_io_failure(u64 start, struct page *page)
u64 private; u64 private;
u64 private_failure; u64 private_failure;
struct io_failure_record *failrec; struct io_failure_record *failrec;
struct btrfs_fs_info *fs_info; struct inode *inode = page->mapping->host;
struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
struct extent_state *state; struct extent_state *state;
int num_copies; int num_copies;
int did_repair = 0; int did_repair = 0;
int ret; int ret;
struct inode *inode = page->mapping->host;
private = 0; private = 0;
ret = count_range_bits(&BTRFS_I(inode)->io_failure_tree, &private, ret = count_range_bits(&BTRFS_I(inode)->io_failure_tree, &private,
...@@ -2085,6 +2089,8 @@ static int clean_io_failure(u64 start, struct page *page) ...@@ -2085,6 +2089,8 @@ static int clean_io_failure(u64 start, struct page *page)
did_repair = 1; did_repair = 1;
goto out; goto out;
} }
if (fs_info->sb->s_flags & MS_RDONLY)
goto out;
spin_lock(&BTRFS_I(inode)->io_tree.lock); spin_lock(&BTRFS_I(inode)->io_tree.lock);
state = find_first_extent_bit_state(&BTRFS_I(inode)->io_tree, state = find_first_extent_bit_state(&BTRFS_I(inode)->io_tree,
...@@ -2094,7 +2100,6 @@ static int clean_io_failure(u64 start, struct page *page) ...@@ -2094,7 +2100,6 @@ static int clean_io_failure(u64 start, struct page *page)
if (state && state->start <= failrec->start && if (state && state->start <= failrec->start &&
state->end >= failrec->start + failrec->len - 1) { state->end >= failrec->start + failrec->len - 1) {
fs_info = BTRFS_I(inode)->root->fs_info;
num_copies = btrfs_num_copies(fs_info, failrec->logical, num_copies = btrfs_num_copies(fs_info, failrec->logical,
failrec->len); failrec->len);
if (num_copies > 1) { if (num_copies > 1) {
......
...@@ -2129,7 +2129,8 @@ static noinline bool record_extent_backrefs(struct btrfs_path *path, ...@@ -2129,7 +2129,8 @@ static noinline bool record_extent_backrefs(struct btrfs_path *path,
old->extent_offset, fs_info, old->extent_offset, fs_info,
path, record_one_backref, path, record_one_backref,
old); old);
BUG_ON(ret < 0 && ret != -ENOENT); if (ret < 0 && ret != -ENOENT)
return false;
/* no backref to be processed for this extent */ /* no backref to be processed for this extent */
if (!old->count) { if (!old->count) {
...@@ -6186,7 +6187,6 @@ struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page, ...@@ -6186,7 +6187,6 @@ struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
write_unlock(&em_tree->lock); write_unlock(&em_tree->lock);
out: out:
if (em)
trace_btrfs_get_extent(root, em); trace_btrfs_get_extent(root, em);
if (path) if (path)
......
...@@ -638,6 +638,7 @@ void btrfs_wait_ordered_roots(struct btrfs_fs_info *fs_info, int nr) ...@@ -638,6 +638,7 @@ void btrfs_wait_ordered_roots(struct btrfs_fs_info *fs_info, int nr)
WARN_ON(nr < 0); WARN_ON(nr < 0);
} }
} }
list_splice_tail(&splice, &fs_info->ordered_roots);
spin_unlock(&fs_info->ordered_root_lock); spin_unlock(&fs_info->ordered_root_lock);
} }
...@@ -803,7 +804,7 @@ int btrfs_wait_ordered_range(struct inode *inode, u64 start, u64 len) ...@@ -803,7 +804,7 @@ int btrfs_wait_ordered_range(struct inode *inode, u64 start, u64 len)
btrfs_put_ordered_extent(ordered); btrfs_put_ordered_extent(ordered);
break; break;
} }
if (ordered->file_offset + ordered->len < start) { if (ordered->file_offset + ordered->len <= start) {
btrfs_put_ordered_extent(ordered); btrfs_put_ordered_extent(ordered);
break; break;
} }
......
...@@ -938,8 +938,10 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check) ...@@ -938,8 +938,10 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
BTRFS_DEV_STAT_CORRUPTION_ERRS); BTRFS_DEV_STAT_CORRUPTION_ERRS);
} }
if (sctx->readonly && !sctx->is_dev_replace) if (sctx->readonly) {
goto did_not_correct_error; ASSERT(!sctx->is_dev_replace);
goto out;
}
if (!is_metadata && !have_csum) { if (!is_metadata && !have_csum) {
struct scrub_fixup_nodatasum *fixup_nodatasum; struct scrub_fixup_nodatasum *fixup_nodatasum;
......
...@@ -1480,7 +1480,7 @@ static void do_async_commit(struct work_struct *work) ...@@ -1480,7 +1480,7 @@ static void do_async_commit(struct work_struct *work)
* We've got freeze protection passed with the transaction. * We've got freeze protection passed with the transaction.
* Tell lockdep about it. * Tell lockdep about it.
*/ */
if (ac->newtrans->type < TRANS_JOIN_NOLOCK) if (ac->newtrans->type & __TRANS_FREEZABLE)
rwsem_acquire_read( rwsem_acquire_read(
&ac->root->fs_info->sb->s_writers.lock_map[SB_FREEZE_FS-1], &ac->root->fs_info->sb->s_writers.lock_map[SB_FREEZE_FS-1],
0, 1, _THIS_IP_); 0, 1, _THIS_IP_);
...@@ -1521,7 +1521,7 @@ int btrfs_commit_transaction_async(struct btrfs_trans_handle *trans, ...@@ -1521,7 +1521,7 @@ int btrfs_commit_transaction_async(struct btrfs_trans_handle *trans,
* Tell lockdep we've released the freeze rwsem, since the * Tell lockdep we've released the freeze rwsem, since the
* async commit thread will be the one to unlock it. * async commit thread will be the one to unlock it.
*/ */
if (trans->type < TRANS_JOIN_NOLOCK) if (ac->newtrans->type & __TRANS_FREEZABLE)
rwsem_release( rwsem_release(
&root->fs_info->sb->s_writers.lock_map[SB_FREEZE_FS-1], &root->fs_info->sb->s_writers.lock_map[SB_FREEZE_FS-1],
1, _THIS_IP_); 1, _THIS_IP_);
......
...@@ -3697,7 +3697,8 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans, ...@@ -3697,7 +3697,8 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
ret = btrfs_truncate_inode_items(trans, log, ret = btrfs_truncate_inode_items(trans, log,
inode, 0, 0); inode, 0, 0);
} else if (test_and_clear_bit(BTRFS_INODE_COPY_EVERYTHING, } else if (test_and_clear_bit(BTRFS_INODE_COPY_EVERYTHING,
&BTRFS_I(inode)->runtime_flags)) { &BTRFS_I(inode)->runtime_flags) ||
inode_only == LOG_INODE_EXISTS) {
if (inode_only == LOG_INODE_ALL) if (inode_only == LOG_INODE_ALL)
fast_search = true; fast_search = true;
max_key.type = BTRFS_XATTR_ITEM_KEY; max_key.type = BTRFS_XATTR_ITEM_KEY;
...@@ -3801,7 +3802,7 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans, ...@@ -3801,7 +3802,7 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
err = ret; err = ret;
goto out_unlock; goto out_unlock;
} }
} else { } else if (inode_only == LOG_INODE_ALL) {
struct extent_map_tree *tree = &BTRFS_I(inode)->extent_tree; struct extent_map_tree *tree = &BTRFS_I(inode)->extent_tree;
struct extent_map *em, *n; struct extent_map *em, *n;
......
...@@ -5394,7 +5394,7 @@ static int bio_size_ok(struct block_device *bdev, struct bio *bio, ...@@ -5394,7 +5394,7 @@ static int bio_size_ok(struct block_device *bdev, struct bio *bio,
{ {
struct bio_vec *prev; struct bio_vec *prev;
struct request_queue *q = bdev_get_queue(bdev); struct request_queue *q = bdev_get_queue(bdev);
unsigned short max_sectors = queue_max_sectors(q); unsigned int max_sectors = queue_max_sectors(q);
struct bvec_merge_data bvm = { struct bvec_merge_data bvm = {
.bi_bdev = bdev, .bi_bdev = bdev,
.bi_sector = sector, .bi_sector = sector,
......
...@@ -162,12 +162,14 @@ DEFINE_EVENT(btrfs__inode, btrfs_inode_evict, ...@@ -162,12 +162,14 @@ DEFINE_EVENT(btrfs__inode, btrfs_inode_evict,
{ EXTENT_FLAG_LOGGING, "LOGGING" }, \ { EXTENT_FLAG_LOGGING, "LOGGING" }, \
{ EXTENT_FLAG_FILLING, "FILLING" }) { EXTENT_FLAG_FILLING, "FILLING" })
TRACE_EVENT(btrfs_get_extent, TRACE_EVENT_CONDITION(btrfs_get_extent,
TP_PROTO(struct btrfs_root *root, struct extent_map *map), TP_PROTO(struct btrfs_root *root, struct extent_map *map),
TP_ARGS(root, map), TP_ARGS(root, map),
TP_CONDITION(map),
TP_STRUCT__entry( TP_STRUCT__entry(
__field( u64, root_objectid ) __field( u64, root_objectid )
__field( u64, start ) __field( u64, start )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment