ret = __btrfs_setxattr(inode, name, value, size, 0);
out:
- if (value)
- kfree(value);
+ kfree(value);
if (!ret)
btrfs_update_cached_acl(inode, p_acl, acl);
}
static int btrfs_xattr_acl_default_set(struct inode *inode, const char *name,
- const void *value, size_t size, int flags)
+ const void *value, size_t size, int flags)
{
return btrfs_xattr_set_acl(inode, ACL_TYPE_DEFAULT, value, size);
}
spin_lock_irqsave(&workers->lock, flags);
- while(!list_empty(&workers->order_list)) {
+ while (!list_empty(&workers->order_list)) {
work = list_entry(workers->order_list.next,
struct btrfs_work, order_list);
struct btrfs_work *work;
do {
spin_lock_irq(&worker->lock);
- while(!list_empty(&worker->pending)) {
+ while (!list_empty(&worker->pending)) {
cur = worker->pending.next;
work = list_entry(cur, struct btrfs_work, list);
list_del(&work->list);
struct btrfs_worker_thread *worker;
list_splice_init(&workers->idle_list, &workers->worker_list);
- while(!list_empty(&workers->worker_list)) {
+ while (!list_empty(&workers->worker_list)) {
cur = workers->worker_list.next;
worker = list_entry(cur, struct btrfs_worker_thread,
worker_list);
#define btrfs_drop_nlink(inode) drop_nlink(inode)
#define btrfs_inc_nlink(inode) inc_nlink(inode)
-#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27)
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 27)
static inline struct dentry *d_obtain_alias(struct inode *inode)
{
struct dentry *d;
}
#endif
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28)
# define __pagevec_lru_add_file __pagevec_lru_add
# define open_bdev_exclusive open_bdev_excl
# define close_bdev_exclusive(bdev, mode) close_bdev_excl(bdev)
kunmap_atomic(kaddr, KM_USER0);
if (csum != *cb_sum) {
- printk("btrfs csum failed ino %lu extent %llu csum %u "
+ printk(KERN_INFO "btrfs csum failed ino %lu "
+ "extent %llu csum %u "
"wanted %u mirror %d\n", inode->i_ino,
(unsigned long long)disk_start,
csum, *cb_sum, cb->mirror_num);
* we have verified the checksum already, set page
* checked so the end_io handlers know about it
*/
- while(bio_index < cb->orig_bio->bi_vcnt) {
+ while (bio_index < cb->orig_bio->bi_vcnt) {
SetPageChecked(bvec->bv_page);
bvec++;
bio_index++;
int i;
int ret;
- while(nr_pages > 0) {
+ while (nr_pages > 0) {
ret = find_get_pages_contig(inode->i_mapping, index,
min_t(unsigned long,
nr_pages, ARRAY_SIZE(pages)), pages);
end_index = (i_size_read(inode) - 1) >> PAGE_CACHE_SHIFT;
pagevec_init(&pvec, 0);
- while(last_offset < compressed_end) {
+ while (last_offset < compressed_end) {
page_index = last_offset >> PAGE_CACHE_SHIFT;
if (page_index > end_index)
ret = btrfs_bio_wq_end_io(root->fs_info, comp_bio, 0);
BUG_ON(ret);
- if (!btrfs_test_flag(inode, NODATASUM)) {
+ if (!btrfs_test_flag(inode, NODATASUM))
btrfs_lookup_bio_sums(root, inode, comp_bio, sums);
- }
ret = btrfs_map_bio(root, READ, comp_bio, mirror_num, 0);
BUG_ON(ret);
*
* It is safe to call this on paths that no locks or extent buffers held.
*/
-void noinline btrfs_release_path(struct btrfs_root *root, struct btrfs_path *p)
+noinline void btrfs_release_path(struct btrfs_root *root, struct btrfs_path *p)
{
int i;
{
struct extent_buffer *eb;
- while(1) {
+ while (1) {
eb = btrfs_root_node(root);
btrfs_tree_lock(eb);
}
/*
- * does the dirty work in cow of a single block. The parent block
- * (if supplied) is updated to point to the new cow copy. The new
- * buffer is marked dirty and returned locked. If you modify the block
- * it needs to be marked dirty again.
+ * does the dirty work in cow of a single block. The parent block (if
+ * supplied) is updated to point to the new cow copy. The new buffer is marked
+ * dirty and returned locked. If you modify the block it needs to be marked
+ * dirty again.
*
* search_start -- an allocation hint for the new block
*
- * empty_size -- a hint that you plan on doing more cow. This is the size in bytes
- * the allocator should try to find free next to the block it returns. This is
- * just a hint and may be ignored by the allocator.
+ * empty_size -- a hint that you plan on doing more cow. This is the size in
+ * bytes the allocator should try to find free next to the block it returns.
+ * This is just a hint and may be ignored by the allocator.
*
* prealloc_dest -- if you have already reserved a destination for the cow,
- * this uses that block instead of allocating a new one. btrfs_alloc_reserved_extent
- * is used to finish the allocation.
+ * this uses that block instead of allocating a new one.
+ * btrfs_alloc_reserved_extent is used to finish the allocation.
*/
-static int noinline __btrfs_cow_block(struct btrfs_trans_handle *trans,
+static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct extent_buffer *buf,
struct extent_buffer *parent, int parent_slot,
* This version of it has extra checks so that a block isn't cow'd more than
* once per transaction, as long as it hasn't been written yet
*/
-int noinline btrfs_cow_block(struct btrfs_trans_handle *trans,
+noinline int btrfs_cow_block(struct btrfs_trans_handle *trans,
struct btrfs_root *root, struct extent_buffer *buf,
struct extent_buffer *parent, int parent_slot,
struct extent_buffer **cow_ret, u64 prealloc_dest)
int ret;
if (trans->transaction != root->fs_info->running_transaction) {
- printk(KERN_CRIT "trans %Lu running %Lu\n", trans->transid,
+ printk(KERN_CRIT "trans %llu running %llu\n",
+ (unsigned long long)trans->transid,
+ (unsigned long long)
root->fs_info->running_transaction->transid);
WARN_ON(1);
}
if (trans->transid != root->fs_info->generation) {
- printk(KERN_CRIT "trans %Lu running %Lu\n", trans->transid,
- root->fs_info->generation);
+ printk(KERN_CRIT "trans %llu running %llu\n",
+ (unsigned long long)trans->transid,
+ (unsigned long long)root->fs_info->generation);
WARN_ON(1);
}
if (cache_only && parent_level != 1)
return 0;
- if (trans->transaction != root->fs_info->running_transaction) {
- printk(KERN_CRIT "trans %Lu running %Lu\n", trans->transid,
- root->fs_info->running_transaction->transid);
+ if (trans->transaction != root->fs_info->running_transaction)
WARN_ON(1);
- }
- if (trans->transid != root->fs_info->generation) {
- printk(KERN_CRIT "trans %Lu running %Lu\n", trans->transid,
- root->fs_info->generation);
+ if (trans->transid != root->fs_info->generation)
WARN_ON(1);
- }
parent_nritems = btrfs_header_nritems(parent);
blocksize = btrfs_level_size(root, parent_level - 1);
BUG_ON(btrfs_node_blockptr(parent, parent_slot) !=
btrfs_header_bytenr(leaf));
}
-#if 0
- for (i = 0; nritems > 1 && i < nritems - 2; i++) {
- btrfs_item_key_to_cpu(leaf, &cpukey, i + 1);
- btrfs_item_key(leaf, &leaf_key, i);
- if (comp_keys(&leaf_key, &cpukey) >= 0) {
- btrfs_print_leaf(root, leaf);
- printk("slot %d offset bad key\n", i);
- BUG_ON(1);
- }
- if (btrfs_item_offset_nr(leaf, i) !=
- btrfs_item_end_nr(leaf, i + 1)) {
- btrfs_print_leaf(root, leaf);
- printk("slot %d offset bad\n", i);
- BUG_ON(1);
- }
- if (i == 0) {
- if (btrfs_item_offset_nr(leaf, i) +
- btrfs_item_size_nr(leaf, i) !=
- BTRFS_LEAF_DATA_SIZE(root)) {
- btrfs_print_leaf(root, leaf);
- printk("slot %d first offset bad\n", i);
- BUG_ON(1);
- }
- }
- }
- if (nritems > 0) {
- if (btrfs_item_size_nr(leaf, nritems - 1) > 4096) {
- btrfs_print_leaf(root, leaf);
- printk("slot %d bad size \n", nritems - 1);
- BUG_ON(1);
- }
- }
-#endif
if (slot != 0 && slot < nritems - 1) {
btrfs_item_key(leaf, &leaf_key, slot);
btrfs_item_key_to_cpu(leaf, &cpukey, slot - 1);
if (comp_keys(&leaf_key, &cpukey) <= 0) {
btrfs_print_leaf(root, leaf);
- printk("slot %d offset bad key\n", slot);
+ printk(KERN_CRIT "slot %d offset bad key\n", slot);
BUG_ON(1);
}
if (btrfs_item_offset_nr(leaf, slot - 1) !=
btrfs_item_end_nr(leaf, slot)) {
btrfs_print_leaf(root, leaf);
- printk("slot %d offset bad\n", slot);
+ printk(KERN_CRIT "slot %d offset bad\n", slot);
BUG_ON(1);
}
}
if (btrfs_item_offset_nr(leaf, slot) !=
btrfs_item_end_nr(leaf, slot + 1)) {
btrfs_print_leaf(root, leaf);
- printk("slot %d offset bad\n", slot);
+ printk(KERN_CRIT "slot %d offset bad\n", slot);
BUG_ON(1);
}
}
return 0;
}
-static int noinline check_block(struct btrfs_root *root,
+static noinline int check_block(struct btrfs_root *root,
struct btrfs_path *path, int level)
{
- u64 found_start;
return 0;
- if (btrfs_header_level(path->nodes[level]) != level)
- printk("warning: bad level %Lu wanted %d found %d\n",
- path->nodes[level]->start, level,
- btrfs_header_level(path->nodes[level]));
- found_start = btrfs_header_bytenr(path->nodes[level]);
- if (found_start != path->nodes[level]->start) {
- printk("warning: bad bytentr %Lu found %Lu\n",
- path->nodes[level]->start, found_start);
- }
-#if 0
- struct extent_buffer *buf = path->nodes[level];
-
- if (memcmp_extent_buffer(buf, root->fs_info->fsid,
- (unsigned long)btrfs_header_fsid(buf),
- BTRFS_FSID_SIZE)) {
- printk("warning bad block %Lu\n", buf->start);
- return 1;
- }
-#endif
if (level == 0)
return check_leaf(root, path, level);
return check_node(root, path, level);
unsigned long map_len = 0;
int err;
- while(low < high) {
+ while (low < high) {
mid = (low + high) / 2;
offset = p + mid * item_size;
* when they are completely full. This is also done top down, so we
* have to be pessimistic.
*/
-static int noinline push_nodes_for_insert(struct btrfs_trans_handle *trans,
+static noinline int push_nodes_for_insert(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path, int level)
{
nritems = btrfs_header_nritems(node);
nr = slot;
- while(1) {
+ while (1) {
if (direction < 0) {
if (nr == 0)
break;
nscan++;
if (path->reada < 2 && (nread > (64 * 1024) || nscan > 32))
break;
- if(nread > (256 * 1024) || nscan > 128)
+
+ if (nread > (256 * 1024) || nscan > 128)
break;
if (search < lowest_read)
}
/*
- * when we walk down the tree, it is usually safe to unlock the higher layers in
- * the tree. The exceptions are when our path goes through slot 0, because operations
- * on the tree might require changing key pointers higher up in the tree.
+ * when we walk down the tree, it is usually safe to unlock the higher layers
+ * in the tree. The exceptions are when our path goes through slot 0, because
+ * operations on the tree might require changing key pointers higher up in the
+ * tree.
*
- * callers might also have set path->keep_locks, which tells this code to
- * keep the lock if the path points to the last slot in the block. This is
- * part of walking through the tree, and selecting the next slot in the higher
- * block.
+ * callers might also have set path->keep_locks, which tells this code to keep
+ * the lock if the path points to the last slot in the block. This is part of
+ * walking through the tree, and selecting the next slot in the higher block.
*
- * lowest_unlock sets the lowest level in the tree we're allowed to unlock.
- * so if lowest_unlock is 1, level 0 won't be unlocked
+ * lowest_unlock sets the lowest level in the tree we're allowed to unlock. so
+ * if lowest_unlock is 1, level 0 won't be unlocked
*/
static noinline void unlock_up(struct btrfs_path *path, int level,
int lowest_unlock)
if (!empty && src_nritems <= 8)
return 1;
- if (push_items <= 0) {
+ if (push_items <= 0)
return 1;
- }
if (empty) {
push_items = min(src_nritems, push_items);
copy_extent_buffer(dst, src,
btrfs_node_key_ptr_offset(dst_nritems),
btrfs_node_key_ptr_offset(0),
- push_items * sizeof(struct btrfs_key_ptr));
+ push_items * sizeof(struct btrfs_key_ptr));
if (push_items < src_nritems) {
memmove_extent_buffer(src, btrfs_node_key_ptr_offset(0),
src_nritems = btrfs_header_nritems(src);
dst_nritems = btrfs_header_nritems(dst);
push_items = BTRFS_NODEPTRS_PER_BLOCK(root) - dst_nritems;
- if (push_items <= 0) {
+ if (push_items <= 0)
return 1;
- }
- if (src_nritems < 4) {
+ if (src_nritems < 4)
return 1;
- }
max_push = src_nritems / 2 + 1;
/* don't try to empty the node */
- if (max_push >= src_nritems) {
+ if (max_push >= src_nritems)
return 1;
- }
if (max_push < push_items)
push_items = max_push;
copy_extent_buffer(dst, src,
btrfs_node_key_ptr_offset(0),
btrfs_node_key_ptr_offset(src_nritems - push_items),
- push_items * sizeof(struct btrfs_key_ptr));
+ push_items * sizeof(struct btrfs_key_ptr));
btrfs_set_header_nritems(src, src_nritems - push_items);
btrfs_set_header_nritems(dst, dst_nritems + push_items);
*
* returns zero on success or < 0 on failure.
*/
-static int noinline insert_new_root(struct btrfs_trans_handle *trans,
+static noinline int insert_new_root(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path, int level)
{
* the start of the leaf data. IOW, how much room
* the leaf has left for both items and data
*/
-int noinline btrfs_leaf_free_space(struct btrfs_root *root,
+noinline int btrfs_leaf_free_space(struct btrfs_root *root,
struct extent_buffer *leaf)
{
int nritems = btrfs_header_nritems(leaf);
int ret;
ret = BTRFS_LEAF_DATA_SIZE(root) - leaf_space_used(leaf, 0, nritems);
if (ret < 0) {
- printk("leaf free space ret %d, leaf data size %lu, used %d nritems %d\n",
+ printk(KERN_CRIT "leaf free space ret %d, leaf data size %lu, "
+ "used %d nritems %d\n",
ret, (unsigned long) BTRFS_LEAF_DATA_SIZE(root),
leaf_space_used(leaf, 0, nritems), nritems);
}
int ret;
slot = path->slots[1];
- if (!path->nodes[1]) {
+ if (!path->nodes[1])
return 1;
- }
+
upper = path->nodes[1];
if (slot >= btrfs_header_nritems(upper) - 1)
return 1;
return 1;
right_nritems = btrfs_header_nritems(right);
- if (right_nritems == 0) {
+ if (right_nritems == 0)
return 1;
- }
WARN_ON(!btrfs_tree_locked(path->nodes[1]));
push_items * sizeof(struct btrfs_item));
push_space = BTRFS_LEAF_DATA_SIZE(root) -
- btrfs_item_offset_nr(right, push_items -1);
+ btrfs_item_offset_nr(right, push_items - 1);
copy_extent_buffer(left, right, btrfs_leaf_data(left) +
leaf_data_end(root, left) - push_space,
/* fixup right node */
if (push_items > right_nritems) {
- printk("push items %d nr %u\n", push_items, right_nritems);
+ printk(KERN_CRIT "push items %d nr %u\n", push_items,
+ right_nritems);
WARN_ON(1);
}
/* first try to make some room by pushing left and right */
if (data_size && ins_key->type != BTRFS_DIR_ITEM_KEY) {
wret = push_leaf_right(trans, root, path, data_size, 0);
- if (wret < 0) {
+ if (wret < 0)
return wret;
- }
if (wret) {
wret = push_leaf_left(trans, root, path, data_size, 0);
if (wret < 0)
l = path->nodes[0];
slot = path->slots[0];
nritems = btrfs_header_nritems(l);
- mid = (nritems + 1)/ 2;
+ mid = (nritems + 1) / 2;
right = btrfs_alloc_free_block(trans, root, root->leafsize,
path->nodes[1]->start,
path->slots[0] = 0;
if (path->slots[1] == 0) {
wret = fixup_low_keys(trans, root,
- path, &disk_key, 1);
+ path, &disk_key, 1);
if (wret)
ret = wret;
}
BTRFS_FILE_EXTENT_INLINE) {
ptr = btrfs_item_ptr_offset(leaf, slot);
memmove_extent_buffer(leaf, ptr,
- (unsigned long)fi,
- offsetof(struct btrfs_file_extent_item,
+ (unsigned long)fi,
+ offsetof(struct btrfs_file_extent_item,
disk_bytenr));
}
}
BUG_ON(slot < 0);
if (slot >= nritems) {
btrfs_print_leaf(root, leaf);
- printk("slot %d too large, nritems %d\n", slot, nritems);
+ printk(KERN_CRIT "slot %d too large, nritems %d\n",
+ slot, nritems);
BUG_ON(1);
}
if (old_data < data_end) {
btrfs_print_leaf(root, leaf);
- printk("slot %d old_data %d data_end %d\n",
+ printk(KERN_CRIT "slot %d old_data %d data_end %d\n",
slot, old_data, data_end);
BUG_ON(1);
}
unsigned int data_end;
struct btrfs_disk_key disk_key;
- for (i = 0; i < nr; i++) {
+ for (i = 0; i < nr; i++)
total_data += data_size[i];
- }
total_size = total_data + (nr * sizeof(struct btrfs_item));
ret = btrfs_search_slot(trans, root, cpu_key, path, total_size, 1);
if (btrfs_leaf_free_space(root, leaf) < total_size) {
btrfs_print_leaf(root, leaf);
- printk("not enough freespace need %u have %d\n",
+ printk(KERN_CRIT "not enough freespace need %u have %d\n",
total_size, btrfs_leaf_free_space(root, leaf));
BUG();
}
if (old_data < data_end) {
btrfs_print_leaf(root, leaf);
- printk("slot %d old_data %d data_end %d\n",
+ printk(KERN_CRIT "slot %d old_data %d data_end %d\n",
slot, old_data, data_end);
BUG_ON(1);
}
int wret;
nritems = btrfs_header_nritems(parent);
- if (slot != nritems -1) {
+ if (slot != nritems - 1) {
memmove_extent_buffer(parent,
btrfs_node_key_ptr_offset(slot),
btrfs_node_key_ptr_offset(slot + 1),
if (btrfs_header_nritems(leaf) == 0) {
path->slots[1] = slot;
- ret = btrfs_del_leaf(trans, root, path, leaf->start);
+ ret = btrfs_del_leaf(trans, root, path,
+ leaf->start);
BUG_ON(ret);
free_extent_buffer(leaf);
} else {
ret = 1;
goto out;
}
- while(1) {
+ while (1) {
nritems = btrfs_header_nritems(cur);
level = btrfs_header_level(cur);
sret = bin_search(cur, min_key, level, &slot);
* min_trans parameters. If it isn't in cache or is too
* old, skip to the next one.
*/
- while(slot < nritems) {
+ while (slot < nritems) {
u64 blockptr;
u64 gen;
struct extent_buffer *tmp;
struct extent_buffer *c;
WARN_ON(!path->keep_locks);
- while(level < BTRFS_MAX_LEVEL) {
+ while (level < BTRFS_MAX_LEVEL) {
if (!path->nodes[level])
return 1;
next:
if (slot >= btrfs_header_nritems(c)) {
level++;
- if (level == BTRFS_MAX_LEVEL) {
+ if (level == BTRFS_MAX_LEVEL)
return 1;
- }
continue;
}
if (level == 0)
int ret;
nritems = btrfs_header_nritems(path->nodes[0]);
- if (nritems == 0) {
+ if (nritems == 0)
return 1;
- }
btrfs_item_key_to_cpu(path->nodes[0], &key, nritems - 1);
goto done;
}
- while(level < BTRFS_MAX_LEVEL) {
+ while (level < BTRFS_MAX_LEVEL) {
if (!path->nodes[level])
return 1;
c = path->nodes[level];
if (slot >= btrfs_header_nritems(c)) {
level++;
- if (level == BTRFS_MAX_LEVEL) {
+ if (level == BTRFS_MAX_LEVEL)
return 1;
- }
continue;
}
break;
}
path->slots[level] = slot;
- while(1) {
+ while (1) {
level--;
c = path->nodes[level];
if (path->locks[level])
u32 nritems;
int ret;
- while(1) {
+ while (1) {
if (path->slots[0] == 0) {
ret = btrfs_prev_leaf(root, path);
if (ret != 0)
static int btrfs_csum_sizes[] = { 4, 0 };
/* four bytes for CRC32 */
-//#define BTRFS_CRC32_SIZE 4
#define BTRFS_EMPTY_DIR_SIZE 0
#define BTRFS_FT_UNKNOWN 0
} __attribute__ ((__packed__));
#define BTRFS_NODEPTRS_PER_BLOCK(r) (((r)->nodesize - \
- sizeof(struct btrfs_header)) / \
- sizeof(struct btrfs_key_ptr))
+ sizeof(struct btrfs_header)) / \
+ sizeof(struct btrfs_key_ptr))
#define __BTRFS_LEAF_DATA_SIZE(bs) ((bs) - sizeof(struct btrfs_header))
#define BTRFS_LEAF_DATA_SIZE(r) (__BTRFS_LEAF_DATA_SIZE(r->leafsize))
#define BTRFS_MAX_INLINE_DATA_SIZE(r) (BTRFS_LEAF_DATA_SIZE(r) - \
static inline int btrfs_is_leaf(struct extent_buffer *eb)
{
- return (btrfs_header_level(eb) == 0);
+ return btrfs_header_level(eb) == 0;
}
/* struct btrfs_root_item */
/* struct btrfs_file_extent_item */
BTRFS_SETGET_FUNCS(file_extent_type, struct btrfs_file_extent_item, type, 8);
-static inline unsigned long btrfs_file_extent_inline_start(struct
- btrfs_file_extent_item *e)
+static inline unsigned long
+btrfs_file_extent_inline_start(struct btrfs_file_extent_item *e)
{
unsigned long offset = (unsigned long)e;
offset += offsetof(struct btrfs_file_extent_item, disk_bytenr);
const char *name, int len)
{
/* if we already have a name just free it */
- if (root->name)
- kfree(root->name);
+ kfree(root->name);
root->name = kmalloc(len+1, GFP_KERNEL);
if (!root->name)
return -ENOMEM;
memcpy(root->name, name, len);
- root->name[len] ='\0';
+ root->name[len] = '\0';
return 0;
}
-static inline u32 btrfs_level_size(struct btrfs_root *root, int level) {
+static inline u32 btrfs_level_size(struct btrfs_root *root, int level)
+{
if (level == 0)
return root->leafsize;
return root->nodesize;
int btrfs_extent_post_op(struct btrfs_trans_handle *trans,
struct btrfs_root *root);
int btrfs_copy_pinned(struct btrfs_root *root, struct extent_io_tree *copy);
-struct btrfs_block_group_cache *btrfs_lookup_block_group(struct
- btrfs_fs_info *info,
- u64 bytenr);
+struct btrfs_block_group_cache *btrfs_lookup_block_group(
+ struct btrfs_fs_info *info,
+ u64 bytenr);
u64 btrfs_find_block_group(struct btrfs_root *root,
u64 search_start, u64 search_hint, int owner);
struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans,
int btrfs_find_dead_roots(struct btrfs_root *root, u64 objectid,
struct btrfs_root *latest_root);
/* dir-item.c */
-int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_root
- *root, const char *name, int name_len, u64 dir,
+int btrfs_insert_dir_item(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root, const char *name,
+ int name_len, u64 dir,
struct btrfs_key *location, u8 type, u64 index);
struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
leaf = path->nodes[0];
dir_item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_dir_item);
total_len = btrfs_item_size_nr(leaf, path->slots[0]);
- while(cur < total_len) {
+ while (cur < total_len) {
this_len = sizeof(*dir_item) +
btrfs_dir_name_len(leaf, dir_item) +
btrfs_dir_data_len(leaf, dir_item);
#include <linux/swap.h>
#include <linux/radix-tree.h>
#include <linux/writeback.h>
-#include <linux/buffer_head.h> // for block_sync_page
+#include <linux/buffer_head.h>
#include <linux/workqueue.h>
#include <linux/kthread.h>
#include <linux/freezer.h>
#include "ref-cache.h"
#include "tree-log.h"
-#if 0
-static int check_tree_block(struct btrfs_root *root, struct extent_buffer *buf)
-{
- if (extent_buffer_blocknr(buf) != btrfs_header_blocknr(buf)) {
- printk(KERN_CRIT "buf blocknr(buf) is %llu, header is %llu\n",
- (unsigned long long)extent_buffer_blocknr(buf),
- (unsigned long long)btrfs_header_blocknr(buf));
- return 1;
- }
- return 0;
-}
-#endif
-
static struct extent_io_ops btree_extent_io_ops;
static void end_workqueue_fn(struct btrfs_work *work);
u64 failed_start = em->start;
u64 failed_len = em->len;
- printk("failed to insert %Lu %Lu -> %Lu into tree\n",
- em->start, em->len, em->block_start);
free_extent_map(em);
em = lookup_extent_mapping(em_tree, start, len);
if (em) {
- printk("after failing, found %Lu %Lu %Lu\n",
- em->start, em->len, em->block_start);
ret = 0;
} else {
em = lookup_extent_mapping(em_tree, failed_start,
failed_len);
- if (em) {
- printk("double failure lookup gives us "
- "%Lu %Lu -> %Lu\n", em->start,
- em->len, em->block_start);
- free_extent_map(em);
- }
ret = -EIO;
}
} else if (ret) {
unsigned long inline_result;
len = buf->len - offset;
- while(len > 0) {
+ while (len > 0) {
err = map_private_extent_buffer(buf, offset, 32,
&map_token, &kaddr,
&map_start, &map_len, KM_USER0);
- if (err) {
- printk("failed to map extent buffer! %lu\n",
- offset);
+ if (err)
return 1;
- }
cur_len = min(len, map_len - (offset - map_start));
crc = btrfs_csum_data(root, kaddr + offset - map_start,
crc, cur_len);
btrfs_csum_final(crc, result);
if (verify) {
- /* FIXME, this is not good */
if (memcmp_extent_buffer(buf, result, 0, csum_size)) {
u32 val;
u32 found = 0;
memcpy(&found, result, csum_size);
read_extent_buffer(buf, &val, 0, csum_size);
- printk("btrfs: %s checksum verify failed on %llu "
- "wanted %X found %X level %d\n",
+ printk(KERN_INFO "btrfs: %s checksum verify failed "
+ "on %llu wanted %X found %X level %d\n",
root->fs_info->sb->s_id,
buf->start, val, found, btrfs_header_level(buf));
if (result != (char *)&inline_result)
if (!ret &&
!verify_parent_transid(io_tree, eb, parent_transid))
return ret;
-printk("read extent buffer pages failed with ret %d mirror no %d\n", ret, mirror_num);
+
num_copies = btrfs_num_copies(&root->fs_info->mapping_tree,
eb->start, eb->len);
if (num_copies == 1)
}
/*
- * checksum a dirty tree block before IO. This has extra checks to make
- * sure we only fill in the checksum field in the first page of a multi-page block
+ * checksum a dirty tree block before IO. This has extra checks to make sure
+ * we only fill in the checksum field in the first page of a multi-page block
*/
+
static int csum_dirty_buffer(struct btrfs_root *root, struct page *page)
{
struct extent_io_tree *tree;
if (!page->private)
goto out;
len = page->private >> 2;
- if (len == 0) {
- WARN_ON(1);
- }
+ WARN_ON(len == 0);
+
eb = alloc_extent_buffer(tree, start, len, page, GFP_NOFS);
ret = btree_read_extent_buffer_pages(root, eb, start + PAGE_CACHE_SIZE,
btrfs_header_generation(eb));
BUG_ON(ret);
found_start = btrfs_header_bytenr(eb);
if (found_start != start) {
- printk("warning: eb start incorrect %Lu buffer %Lu len %lu\n",
- start, found_start, len);
WARN_ON(1);
goto err;
}
if (eb->first_page != page) {
- printk("bad first page %lu %lu\n", eb->first_page->index,
- page->index);
WARN_ON(1);
goto err;
}
if (!PageUptodate(page)) {
- printk("csum not up to date page %lu\n", page->index);
WARN_ON(1);
goto err;
}
goto out;
if (!page->private)
goto out;
+
len = page->private >> 2;
- if (len == 0) {
- WARN_ON(1);
- }
+ WARN_ON(len == 0);
+
eb = alloc_extent_buffer(tree, start, len, page, GFP_NOFS);
found_start = btrfs_header_bytenr(eb);
if (found_start != start) {
- printk("bad tree block start %llu %llu\n",
+ printk(KERN_INFO "btrfs bad tree block start %llu %llu\n",
(unsigned long long)found_start,
(unsigned long long)eb->start);
ret = -EIO;
goto err;
}
if (eb->first_page != page) {
- printk("bad first page %lu %lu\n", eb->first_page->index,
- page->index);
+ printk(KERN_INFO "btrfs bad first page %lu %lu\n",
+ eb->first_page->index, page->index);
WARN_ON(1);
ret = -EIO;
goto err;
}
if (check_tree_block_fsid(root, eb)) {
- printk("bad fsid on block %Lu\n", eb->start);
+ printk(KERN_INFO "btrfs bad fsid on block %llu\n",
+ (unsigned long long)eb->start);
ret = -EIO;
goto err;
}
HZ/10);
}
#endif
- while(atomic_read(&fs_info->async_submit_draining) &&
+ while (atomic_read(&fs_info->async_submit_draining) &&
atomic_read(&fs_info->nr_async_submits)) {
wait_event(fs_info->async_submit_wait,
(atomic_read(&fs_info->nr_async_submits) == 0));
struct btrfs_root *root;
WARN_ON(bio->bi_vcnt <= 0);
- while(bio_index < bio->bi_vcnt) {
+ while (bio_index < bio->bi_vcnt) {
root = BTRFS_I(bvec->bv_page->mapping->host)->root;
csum_dirty_buffer(root, bvec->bv_page);
bio_index++;
num_dirty = count_range_bits(tree, &start, (u64)-1,
thresh, EXTENT_DIRTY);
- if (num_dirty < thresh) {
+ if (num_dirty < thresh)
return 0;
- }
}
return extent_writepages(tree, mapping, btree_get_extent, wbc);
}
int ret;
if (PageWriteback(page) || PageDirty(page))
- return 0;
+ return 0;
tree = &BTRFS_I(page->mapping->host)->io_tree;
map = &BTRFS_I(page->mapping->host)->extent_tree;
ret = try_release_extent_state(map, tree, page, gfp_flags);
- if (!ret) {
+ if (!ret)
return 0;
- }
ret = try_release_extent_buffer(tree, page);
if (ret == 1) {
extent_invalidatepage(tree, page, offset);
btree_releasepage(page, GFP_NOFS);
if (PagePrivate(page)) {
- printk("warning page private not zero on page %Lu\n",
- page_offset(page));
+ printk(KERN_WARNING "btrfs warning page private not zero "
+ "on page %llu\n", (unsigned long long)page_offset(page));
ClearPagePrivate(page);
set_page_private(page, 0);
page_cache_release(page);
int btrfs_wait_tree_block_writeback(struct extent_buffer *buf)
{
return btrfs_wait_on_page_writeback_range(buf->first_page->mapping,
- buf->start, buf->start + buf->len -1);
+ buf->start, buf->start + buf->len - 1);
}
struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr,
ret = btree_read_extent_buffer_pages(root, buf, 0, parent_transid);
- if (ret == 0) {
+ if (ret == 0)
buf->flags |= EXTENT_UPTODATE;
- } else {
+ else
WARN_ON(1);
- }
return buf;
}
if (!log_root_tree)
return 0;
- while(1) {
+ while (1) {
ret = find_first_extent_bit(&log_root_tree->dirty_log_pages,
0, &start, &end, EXTENT_DIRTY);
if (ret)
root->in_sysfs = 1;
return root;
}
-#if 0
-static int add_hasher(struct btrfs_fs_info *info, char *type) {
- struct btrfs_hasher *hasher;
-
- hasher = kmalloc(sizeof(*hasher), GFP_NOFS);
- if (!hasher)
- return -ENOMEM;
- hasher->hash_tfm = crypto_alloc_hash(type, 0, CRYPTO_ALG_ASYNC);
- if (!hasher->hash_tfm) {
- kfree(hasher);
- return -EINVAL;
- }
- spin_lock(&info->hash_lock);
- list_add(&hasher->list, &info->hashers);
- spin_unlock(&info->hash_lock);
- return 0;
-}
-#endif
static int btrfs_congested_fn(void *congested_data, int bdi_bits)
{
continue;
bdi = blk_get_backing_dev_info(device->bdev);
- if (bdi->unplug_io_fn) {
+ if (bdi->unplug_io_fn)
bdi->unplug_io_fn(bdi, page);
- }
}
}
mutex_lock(&root->fs_info->transaction_kthread_mutex);
if (root->fs_info->total_ref_cache_size > 20 * 1024 * 1024) {
- printk("btrfs: total reference cache size %Lu\n",
- root->fs_info->total_ref_cache_size);
+ printk(KERN_INFO "btrfs: total reference cache "
+ "size %llu\n",
+ root->fs_info->total_ref_cache_size);
}
mutex_lock(&root->fs_info->trans_mutex);
atomic_set(&fs_info->tree_log_writers, 0);
fs_info->tree_log_transid = 0;
-#if 0
- ret = add_hasher(fs_info, "crc32c");
- if (ret) {
- printk("btrfs: failed hash setup, modprobe cryptomgr?\n");
- err = -ENOMEM;
- goto fail_iput;
- }
-#endif
__setup_root(4096, 4096, 4096, 4096, tree_root,
fs_info, BTRFS_ROOT_TREE_OBJECTID);
if (strncmp((char *)(&disk_super->magic), BTRFS_MAGIC,
sizeof(disk_super->magic))) {
- printk("btrfs: valid FS not found on %s\n", sb->s_id);
+ printk(KERN_INFO "btrfs: valid FS not found on %s\n", sb->s_id);
goto fail_sb_buffer;
}
ret = btrfs_read_sys_array(tree_root);
mutex_unlock(&fs_info->chunk_mutex);
if (ret) {
- printk("btrfs: failed to read the system array on %s\n",
- sb->s_id);
+ printk(KERN_WARNING "btrfs: failed to read the system "
+ "array on %s\n", sb->s_id);
goto fail_sys_array;
}
BUG_ON(!chunk_root->node);
read_extent_buffer(chunk_root->node, fs_info->chunk_tree_uuid,
- (unsigned long)btrfs_header_chunk_tree_uuid(chunk_root->node),
- BTRFS_UUID_SIZE);
+ (unsigned long)btrfs_header_chunk_tree_uuid(chunk_root->node),
+ BTRFS_UUID_SIZE);
mutex_lock(&fs_info->chunk_mutex);
ret = btrfs_read_chunk_tree(chunk_root);
mutex_unlock(&fs_info->chunk_mutex);
if (ret) {
- printk("btrfs: failed to read chunk tree on %s\n", sb->s_id);
+ printk(KERN_WARNING "btrfs: failed to read chunk tree on %s\n",
+ sb->s_id);
goto fail_chunk_root;
}
u64 bytenr = btrfs_super_log_root(disk_super);
if (fs_devices->rw_devices == 0) {
- printk("Btrfs log replay required on RO media\n");
+ printk(KERN_WARNING "Btrfs log replay required "
+ "on RO media\n");
err = -EIO;
goto fail_trans_kthread;
}
total_errors++;
}
if (total_errors > max_errors) {
- printk("btrfs: %d errors while writing supers\n", total_errors);
+ printk(KERN_ERR "btrfs: %d errors while writing supers\n",
+ total_errors);
BUG();
}
total_errors++;
}
if (total_errors > max_errors) {
- printk("btrfs: %d errors while writing supers\n", total_errors);
+ printk(KERN_ERR "btrfs: %d errors while writing supers\n",
+ total_errors);
BUG();
}
return 0;
down_write(&root->anon_super.s_umount);
kill_anon_super(&root->anon_super);
}
-#if 0
- if (root->in_sysfs)
- btrfs_sysfs_del_root(root);
-#endif
if (root->node)
free_extent_buffer(root->node);
if (root->commit_root)
free_extent_buffer(root->commit_root);
- if (root->name)
- kfree(root->name);
+ kfree(root->name);
kfree(root);
return 0;
}
struct btrfs_root *gang[8];
int i;
- while(1) {
+ while (1) {
ret = radix_tree_gang_lookup(&fs_info->fs_roots_radix,
(void **)gang, 0,
ARRAY_SIZE(gang));
if (!(fs_info->sb->s_flags & MS_RDONLY)) {
ret = btrfs_commit_super(root);
- if (ret) {
- printk("btrfs: commit super returns %d\n", ret);
- }
+ if (ret)
+ printk(KERN_ERR "btrfs: commit super ret %d\n", ret);
}
if (fs_info->delalloc_bytes) {
- printk("btrfs: at unmount delalloc count %Lu\n",
+ printk(KERN_INFO "btrfs: at unmount delalloc count %llu\n",
fs_info->delalloc_bytes);
}
if (fs_info->total_ref_cache_size) {
- printk("btrfs: at umount reference cache size %Lu\n",
- fs_info->total_ref_cache_size);
+ printk(KERN_INFO "btrfs: at umount reference cache size %llu\n",
+ (unsigned long long)fs_info->total_ref_cache_size);
}
if (fs_info->extent_root->node)
if (fs_info->tree_root->node)
free_extent_buffer(fs_info->tree_root->node);
- if (root->fs_info->chunk_root->node);
+ if (root->fs_info->chunk_root->node)
free_extent_buffer(root->fs_info->chunk_root->node);
- if (root->fs_info->dev_root->node);
+ if (root->fs_info->dev_root->node)
free_extent_buffer(root->fs_info->dev_root->node);
- if (root->fs_info->csum_root->node);
+ if (root->fs_info->csum_root->node)
free_extent_buffer(root->fs_info->csum_root->node);
btrfs_free_block_groups(root->fs_info);
btrfs_stop_workers(&fs_info->submit_workers);
#if 0
- while(!list_empty(&fs_info->hashers)) {
+ while (!list_empty(&fs_info->hashers)) {
struct btrfs_hasher *hasher;
hasher = list_entry(fs_info->hashers.next, struct btrfs_hasher,
hashers);
WARN_ON(!btrfs_tree_locked(buf));
if (transid != root->fs_info->generation) {
- printk(KERN_CRIT "transid mismatch buffer %llu, found %Lu running %Lu\n",
+ printk(KERN_CRIT "btrfs transid mismatch buffer %llu, "
+ "found %llu running %llu\n",
(unsigned long long)buf->start,
- transid, root->fs_info->generation);
+ (unsigned long long)transid,
+ (unsigned long long)root->fs_info->generation);
WARN_ON(1);
}
set_extent_buffer_dirty(&BTRFS_I(btree_inode)->io_tree, buf);
struct btrfs_root *root = BTRFS_I(buf->first_page->mapping->host)->root;
int ret;
ret = btree_read_extent_buffer_pages(root, buf, 0, parent_transid);
- if (ret == 0) {
+ if (ret == 0)
buf->flags |= EXTENT_UPTODATE;
- }
return ret;
}
#include "export.h"
#include "compat.h"
-#define BTRFS_FID_SIZE_NON_CONNECTABLE (offsetof(struct btrfs_fid, parent_objectid)/4)
-#define BTRFS_FID_SIZE_CONNECTABLE (offsetof(struct btrfs_fid, parent_root_objectid)/4)
-#define BTRFS_FID_SIZE_CONNECTABLE_ROOT (sizeof(struct btrfs_fid)/4)
+#define BTRFS_FID_SIZE_NON_CONNECTABLE (offsetof(struct btrfs_fid, \
+ parent_objectid) / 4)
+#define BTRFS_FID_SIZE_CONNECTABLE (offsetof(struct btrfs_fid, \
+ parent_root_objectid) / 4)
+#define BTRFS_FID_SIZE_CONNECTABLE_ROOT (sizeof(struct btrfs_fid) / 4)
static int btrfs_encode_fh(struct dentry *dentry, u32 *fh, int *max_len,
int connectable)
int del;
};
-static int finish_current_insert(struct btrfs_trans_handle *trans, struct
- btrfs_root *extent_root, int all);
-static int del_pending_extents(struct btrfs_trans_handle *trans, struct
- btrfs_root *extent_root, int all);
+static int finish_current_insert(struct btrfs_trans_handle *trans,
+ struct btrfs_root *extent_root, int all);
+static int del_pending_extents(struct btrfs_trans_handle *trans,
+ struct btrfs_root *extent_root, int all);
static int pin_down_bytes(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
u64 bytenr, u64 num_bytes, int is_data);
if (ret < 0)
goto err;
- while(1) {
+ while (1) {
leaf = path->nodes[0];
slot = path->slots[0];
if (slot >= btrfs_header_nritems(leaf)) {
/*
* return the block group that starts at or after bytenr
*/
-static struct btrfs_block_group_cache *btrfs_lookup_first_block_group(struct
- btrfs_fs_info *info,
- u64 bytenr)
+static struct btrfs_block_group_cache *
+btrfs_lookup_first_block_group(struct btrfs_fs_info *info, u64 bytenr)
{
struct btrfs_block_group_cache *cache;
/*
* return the block group that contains teh given bytenr
*/
-struct btrfs_block_group_cache *btrfs_lookup_block_group(struct
- btrfs_fs_info *info,
- u64 bytenr)
+struct btrfs_block_group_cache *btrfs_lookup_block_group(
+ struct btrfs_fs_info *info,
+ u64 bytenr)
{
struct btrfs_block_group_cache *cache;
* to the key objectid.
*/
-static int noinline lookup_extent_backref(struct btrfs_trans_handle *trans,
+static noinline int lookup_extent_backref(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path,
u64 bytenr, u64 parent,
* updates all the backrefs that are pending on update_list for the
* extent_root
*/
-static int noinline update_backrefs(struct btrfs_trans_handle *trans,
+static noinline int update_backrefs(struct btrfs_trans_handle *trans,
struct btrfs_root *extent_root,
struct btrfs_path *path,
struct list_head *update_list)
btrfs_ref_generation(leaf, ref) != op->orig_generation ||
(ref_objectid != op->level &&
ref_objectid != BTRFS_MULTIPLE_OBJECTIDS)) {
- printk(KERN_ERR "couldn't find %Lu, parent %Lu, root %Lu, "
- "owner %u\n", op->bytenr, op->orig_parent,
- ref_root, op->level);
+ printk(KERN_ERR "btrfs couldn't find %llu, parent %llu, "
+ "root %llu, owner %u\n",
+ (unsigned long long)op->bytenr,
+ (unsigned long long)op->orig_parent,
+ (unsigned long long)ref_root, op->level);
btrfs_print_leaf(extent_root, leaf);
BUG();
}
return 0;
}
-static int noinline insert_extents(struct btrfs_trans_handle *trans,
+static noinline int insert_extents(struct btrfs_trans_handle *trans,
struct btrfs_root *extent_root,
struct btrfs_path *path,
struct list_head *insert_list, int nr)
return ret;
}
-static int noinline insert_extent_backref(struct btrfs_trans_handle *trans,
+static noinline int insert_extent_backref(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path,
u64 bytenr, u64 parent,
return ret;
}
-static int noinline remove_extent_backref(struct btrfs_trans_handle *trans,
+static noinline int remove_extent_backref(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path)
{
static void btrfs_issue_discard(struct block_device *bdev,
u64 start, u64 len)
{
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
blkdev_issue_discard(bdev, start >> 9, len >> 9, GFP_KERNEL);
#else
blkdev_issue_discard(bdev, start >> 9, len >> 9);
#endif
}
-static int noinline free_extents(struct btrfs_trans_handle *trans,
+static noinline int free_extents(struct btrfs_trans_handle *trans,
struct btrfs_root *extent_root,
struct list_head *del_list)
{
extent_root->root_key.objectid,
op->orig_generation, op->level, 1);
if (ret) {
- printk("Unable to find backref byte nr %Lu root %Lu gen %Lu "
- "owner %u\n", op->bytenr,
- extent_root->root_key.objectid, op->orig_generation,
- op->level);
+ printk(KERN_ERR "btrfs unable to find backref byte nr %llu "
+ "root %llu gen %llu owner %u\n",
+ (unsigned long long)op->bytenr,
+ (unsigned long long)extent_root->root_key.objectid,
+ (unsigned long long)op->orig_generation, op->level);
btrfs_print_leaf(extent_root, path->nodes[0]);
WARN_ON(1);
goto out;
btrfs_item_key_to_cpu(l, &key, path->slots[0]);
if (key.objectid != bytenr) {
btrfs_print_leaf(root->fs_info->extent_root, path->nodes[0]);
- printk("wanted %Lu found %Lu\n", bytenr, key.objectid);
+ printk(KERN_ERR "btrfs wanted %llu found %llu\n",
+ (unsigned long long)bytenr,
+ (unsigned long long)key.objectid);
BUG();
}
BUG_ON(key.type != BTRFS_EXTENT_ITEM_KEY);
goto out;
if (ret != 0) {
btrfs_print_leaf(root, path->nodes[0]);
- printk("failed to find block number %Lu\n", bytenr);
+ printk(KERN_INFO "btrfs failed to find block number %llu\n",
+ (unsigned long long)bytenr);
BUG();
}
l = path->nodes[0];
if (!path)
return -ENOMEM;
- while(1) {
+ while (1) {
cache = NULL;
spin_lock(&root->fs_info->block_group_cache_lock);
for (n = rb_first(&root->fs_info->block_group_cache_tree);
spin_unlock(&space_info->lock);
ret = btrfs_alloc_chunk(trans, extent_root, flags);
- if (ret) {
-printk("space info full %Lu\n", flags);
+ if (ret)
space_info->full = 1;
- }
out:
mutex_unlock(&extent_root->fs_info->chunk_mutex);
return ret;
u64 old_val;
u64 byte_in_group;
- while(total) {
+ while (total) {
cache = btrfs_lookup_block_group(info, bytenr);
if (!cache)
return -1;
int ret;
mutex_lock(&root->fs_info->pinned_mutex);
- while(1) {
+ while (1) {
ret = find_first_extent_bit(pinned_extents, last,
&start, &end, EXTENT_DIRTY);
if (ret)
int ret;
mutex_lock(&root->fs_info->pinned_mutex);
- while(1) {
+ while (1) {
ret = find_first_extent_bit(unpin, 0, &start, &end,
EXTENT_DIRTY);
if (ret)
if (ret == 0) {
struct btrfs_key found_key;
extent_slot = path->slots[0];
- while(extent_slot > 0) {
+ while (extent_slot > 0) {
extent_slot--;
btrfs_item_key_to_cpu(path->nodes[0], &found_key,
extent_slot);
&key, path, -1, 1);
if (ret) {
printk(KERN_ERR "umm, got %d back from search"
- ", was looking for %Lu\n", ret,
- bytenr);
+ ", was looking for %llu\n", ret,
+ (unsigned long long)bytenr);
btrfs_print_leaf(extent_root, path->nodes[0]);
}
BUG_ON(ret);
} else {
btrfs_print_leaf(extent_root, path->nodes[0]);
WARN_ON(1);
- printk("Unable to find ref byte nr %Lu root %Lu "
- "gen %Lu owner %Lu\n", bytenr,
- root_objectid, ref_generation, owner_objectid);
+ printk(KERN_ERR "btrfs unable to find ref byte nr %llu "
+ "root %llu gen %llu owner %llu\n",
+ (unsigned long long)bytenr,
+ (unsigned long long)root_objectid,
+ (unsigned long long)ref_generation,
+ (unsigned long long)owner_objectid);
}
leaf = path->nodes[0];
* find all the blocks marked as pending in the radix tree and remove
* them from the extent map
*/
-static int del_pending_extents(struct btrfs_trans_handle *trans, struct
- btrfs_root *extent_root, int all)
+static int del_pending_extents(struct btrfs_trans_handle *trans,
+ struct btrfs_root *extent_root, int all)
{
int ret;
int err = 0;
again:
mutex_lock(&info->extent_ins_mutex);
- while(1) {
+ while (1) {
ret = find_first_extent_bit(pending_del, search, &start, &end,
EXTENT_WRITEBACK);
if (ret) {
* ins->offset == number of blocks
* Any available blocks before search_start are skipped.
*/
-static int noinline find_free_extent(struct btrfs_trans_handle *trans,
+static noinline int find_free_extent(struct btrfs_trans_handle *trans,
struct btrfs_root *orig_root,
u64 num_bytes, u64 empty_size,
u64 search_start, u64 search_end,
int data)
{
int ret = 0;
- struct btrfs_root * root = orig_root->fs_info->extent_root;
+ struct btrfs_root *root = orig_root->fs_info->extent_root;
u64 total_needed = num_bytes;
u64 *last_ptr = NULL;
u64 last_wanted = 0;
*last_ptr = ins->objectid + ins->offset;
ret = 0;
} else if (!ret) {
- printk(KERN_ERR "we were searching for %Lu bytes, num_bytes %Lu,"
- " loop %d, allowed_alloc %d\n", total_needed, num_bytes,
+ printk(KERN_ERR "btrfs searching for %llu bytes, "
+ "num_bytes %llu, loop %d, allowed_alloc %d\n",
+ (unsigned long long)total_needed,
+ (unsigned long long)num_bytes,
loop, allowed_chunk_alloc);
ret = -ENOSPC;
}
struct btrfs_block_group_cache *cache;
struct list_head *l;
- printk(KERN_INFO "space_info has %Lu free, is %sfull\n",
- info->total_bytes - info->bytes_used - info->bytes_pinned -
- info->bytes_reserved, (info->full) ? "" : "not ");
+ printk(KERN_INFO "space_info has %llu free, is %sfull\n",
+ (unsigned long long)(info->total_bytes - info->bytes_used -
+ info->bytes_pinned - info->bytes_reserved),
+ (info->full) ? "" : "not ");
down_read(&info->groups_sem);
list_for_each(l, &info->block_groups) {
cache = list_entry(l, struct btrfs_block_group_cache, list);
spin_lock(&cache->lock);
- printk(KERN_INFO "block group %Lu has %Lu bytes, %Lu used "
- "%Lu pinned %Lu reserved\n",
- cache->key.objectid, cache->key.offset,
- btrfs_block_group_used(&cache->item),
- cache->pinned, cache->reserved);
+ printk(KERN_INFO "block group %llu has %llu bytes, %llu used "
+ "%llu pinned %llu reserved\n",
+ (unsigned long long)cache->key.objectid,
+ (unsigned long long)cache->key.offset,
+ (unsigned long long)btrfs_block_group_used(&cache->item),
+ (unsigned long long)cache->pinned,
+ (unsigned long long)cache->reserved);
btrfs_dump_free_space(cache, bytes);
spin_unlock(&cache->lock);
}
if (data) {
alloc_profile = info->avail_data_alloc_bits &
- info->data_alloc_profile;
+ info->data_alloc_profile;
data = BTRFS_BLOCK_GROUP_DATA | alloc_profile;
} else if (root == root->fs_info->chunk_root) {
alloc_profile = info->avail_system_alloc_bits &
- info->system_alloc_profile;
+ info->system_alloc_profile;
data = BTRFS_BLOCK_GROUP_SYSTEM | alloc_profile;
} else {
alloc_profile = info->avail_metadata_alloc_bits &
- info->metadata_alloc_profile;
+ info->metadata_alloc_profile;
data = BTRFS_BLOCK_GROUP_METADATA | alloc_profile;
}
again:
struct btrfs_space_info *sinfo;
sinfo = __find_space_info(root->fs_info, data);
- printk("allocation failed flags %Lu, wanted %Lu\n",
- data, num_bytes);
+ printk(KERN_ERR "btrfs allocation failed flags %llu, "
+ "wanted %llu\n", (unsigned long long)data,
+ (unsigned long long)num_bytes);
dump_space_info(sinfo, num_bytes);
BUG();
}
cache = btrfs_lookup_block_group(root->fs_info, start);
if (!cache) {
- printk(KERN_ERR "Unable to find block group for %Lu\n", start);
+ printk(KERN_ERR "Unable to find block group for %llu\n",
+ (unsigned long long)start);
return -ENOSPC;
}
}
update_block:
- ret = update_block_group(trans, root, ins->objectid, ins->offset, 1, 0);
+ ret = update_block_group(trans, root, ins->objectid,
+ ins->offset, 1, 0);
if (ret) {
- printk("update block group failed for %Lu %Lu\n",
- ins->objectid, ins->offset);
+ printk(KERN_ERR "btrfs update block group failed for %llu "
+ "%llu\n", (unsigned long long)ins->objectid,
+ (unsigned long long)ins->offset);
BUG();
}
out:
return 0;
}
-static int noinline cache_drop_leaf_ref(struct btrfs_trans_handle *trans,
+static noinline int cache_drop_leaf_ref(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_leaf_ref *ref)
{
return 0;
}
-static int drop_snap_lookup_refcount(struct btrfs_root *root, u64 start, u64 len,
- u32 *refs)
+static int drop_snap_lookup_refcount(struct btrfs_root *root, u64 start,
+ u64 len, u32 *refs)
{
int ret;
ret = btrfs_lookup_extent_ref(NULL, root, start, len, refs);
BUG_ON(ret);
-#if 0 // some debugging code in case we see problems here
+#if 0 /* some debugging code in case we see problems here */
/* if the refs count is one, it won't get increased again. But
* if the ref count is > 1, someone may be decreasing it at
* the same time we are.
free_extent_buffer(eb);
}
if (*refs == 1) {
- printk("block %llu went down to one during drop_snap\n",
- (unsigned long long)start);
+ printk(KERN_ERR "btrfs block %llu went down to one "
+ "during drop_snap\n", (unsigned long long)start);
}
}
* helper function for drop_snapshot, this walks down the tree dropping ref
* counts as it goes.
*/
-static int noinline walk_down_tree(struct btrfs_trans_handle *trans,
+static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path, int *level)
{
/*
* walk down to the last node level and free all the leaves
*/
- while(*level >= 0) {
+ while (*level >= 0) {
WARN_ON(*level < 0);
WARN_ON(*level >= BTRFS_MAX_LEVEL);
cur = path->nodes[*level];
*level = 0;
break;
}
- if (printk_ratelimit()) {
- printk("leaf ref miss for bytenr %llu\n",
- (unsigned long long)bytenr);
- }
}
next = btrfs_find_tree_block(root, bytenr, blocksize);
if (!next || !btrfs_buffer_uptodate(next, ptr_gen)) {
* walk_down_tree. The main difference is that it checks reference
* counts while tree blocks are locked.
*/
-static int noinline walk_down_subtree(struct btrfs_trans_handle *trans,
+static noinline int walk_down_subtree(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path, int *level)
{
* to find the first node higher up where we haven't yet gone through
* all the slots
*/
-static int noinline walk_up_tree(struct btrfs_trans_handle *trans,
+static noinline int walk_up_tree(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path,
int *level, int max_level)
}
}
}
- while(1) {
+ while (1) {
wret = walk_down_tree(trans, root, path, &level);
if (wret > 0)
break;
return min(last, start + nr - 1);
}
-static int noinline relocate_inode_pages(struct inode *inode, u64 start,
+static noinline int relocate_inode_pages(struct inode *inode, u64 start,
u64 len)
{
u64 page_start;
return ret;
}
-static int noinline relocate_data_extent(struct inode *reloc_inode,
+static noinline int relocate_data_extent(struct inode *reloc_inode,
struct btrfs_key *extent_key,
u64 offset)
{
return 0;
}
-static int noinline __next_ref_path(struct btrfs_trans_handle *trans,
+static noinline int __next_ref_path(struct btrfs_trans_handle *trans,
struct btrfs_root *extent_root,
struct btrfs_ref_path *ref_path,
int first_time)
if (level < ref_path->lowest_level)
break;
- if (level >= 0) {
+ if (level >= 0)
bytenr = ref_path->nodes[level];
- } else {
+ else
bytenr = ref_path->extent_start;
- }
BUG_ON(bytenr == 0);
parent = ref_path->nodes[level + 1];
level = ref_path->current_level;
while (level < BTRFS_MAX_LEVEL - 1) {
u64 ref_objectid;
- if (level >= 0) {
+
+ if (level >= 0)
bytenr = ref_path->nodes[level];
- } else {
+ else
bytenr = ref_path->extent_start;
- }
+
BUG_ON(bytenr == 0);
key.objectid = bytenr;
return __next_ref_path(trans, extent_root, ref_path, 0);
}
-static int noinline get_new_locations(struct inode *reloc_inode,
+static noinline int get_new_locations(struct inode *reloc_inode,
struct btrfs_key *extent_key,
u64 offset, int no_fragment,
struct disk_extent **extents,
return ret;
}
-static int noinline replace_one_extent(struct btrfs_trans_handle *trans,
+static noinline int replace_one_extent(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path,
struct btrfs_key *extent_key,
return 0;
}
-static int noinline invalidate_extent_cache(struct btrfs_root *root,
+static noinline int invalidate_extent_cache(struct btrfs_root *root,
struct extent_buffer *leaf,
struct btrfs_block_group_cache *group,
struct btrfs_root *target_root)
return 0;
}
-static int noinline replace_extents_in_leaf(struct btrfs_trans_handle *trans,
+static noinline int replace_extents_in_leaf(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct extent_buffer *leaf,
struct btrfs_block_group_cache *group,
return 0;
}
-static int noinline init_reloc_tree(struct btrfs_trans_handle *trans,
+static noinline int init_reloc_tree(struct btrfs_trans_handle *trans,
struct btrfs_root *root)
{
struct btrfs_root *reloc_root;
* tree blocks are shared between reloc trees, so they are also shared
* between subvols.
*/
-static int noinline relocate_one_path(struct btrfs_trans_handle *trans,
+static noinline int relocate_one_path(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path,
struct btrfs_key *first_key,
return 0;
}
-static int noinline relocate_tree_block(struct btrfs_trans_handle *trans,
+static noinline int relocate_tree_block(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path,
struct btrfs_key *first_key,
return 0;
}
-static int noinline del_extent_zero(struct btrfs_trans_handle *trans,
+static noinline int del_extent_zero(struct btrfs_trans_handle *trans,
struct btrfs_root *extent_root,
struct btrfs_path *path,
struct btrfs_key *extent_key)
return ret;
}
-static struct btrfs_root noinline *read_ref_root(struct btrfs_fs_info *fs_info,
+static noinline struct btrfs_root *read_ref_root(struct btrfs_fs_info *fs_info,
struct btrfs_ref_path *ref_path)
{
struct btrfs_key root_key;
return btrfs_read_fs_root_no_name(fs_info, &root_key);
}
-static int noinline relocate_one_extent(struct btrfs_root *extent_root,
+static noinline int relocate_one_extent(struct btrfs_root *extent_root,
struct btrfs_path *path,
struct btrfs_key *extent_key,
struct btrfs_block_group_cache *group,
ref_path = kmalloc(sizeof(*ref_path), GFP_NOFS);
if (!ref_path) {
- ret = -ENOMEM;
- goto out;
+ ret = -ENOMEM;
+ goto out;
}
for (loops = 0; ; loops++) {
return ret;
}
-static struct inode noinline *create_reloc_inode(struct btrfs_fs_info *fs_info,
+static noinline struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info,
struct btrfs_block_group_cache *group)
{
struct inode *inode = NULL;
block_group = btrfs_lookup_block_group(info, group_start);
BUG_ON(!block_group);
- printk("btrfs relocating block group %llu flags %llu\n",
+ printk(KERN_INFO "btrfs relocating block group %llu flags %llu\n",
(unsigned long long)block_group->key.objectid,
(unsigned long long)block_group->flags);
btrfs_remove_leaf_refs(info->tree_root, (u64)-1, 1);
mutex_unlock(&root->fs_info->cleaner_mutex);
- while(1) {
+ while (1) {
ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
if (ret < 0)
goto out;
}
if (total_found > 0) {
- printk("btrfs found %llu extents in pass %d\n",
+ printk(KERN_INFO "btrfs found %llu extents in pass %d\n",
(unsigned long long)total_found, pass);
pass++;
if (total_found == skipped && pass > 2) {
if (ret < 0)
goto out;
- while(1) {
+ while (1) {
slot = path->slots[0];
leaf = path->nodes[0];
if (slot >= btrfs_header_nritems(leaf)) {
if (!path)
return -ENOMEM;
- while(1) {
+ while (1) {
ret = find_first_block_group(root, path, &key);
if (ret > 0) {
ret = 0;
#define LEAK_DEBUG 0
#ifdef LEAK_DEBUG
-static spinlock_t leak_lock = SPIN_LOCK_UNLOCKED;
+static DEFINE_SPINLOCK(leak_lock);
#endif
#define BUFFER_LRU_MAX 64
while (!list_empty(&states)) {
state = list_entry(states.next, struct extent_state, leak_list);
- printk("state leak: start %Lu end %Lu state %lu in tree %p refs %d\n", state->start, state->end, state->state, state->tree, atomic_read(&state->refs));
+ printk(KERN_ERR "btrfs state leak: start %llu end %llu "
+ "state %lu in tree %p refs %d\n",
+ (unsigned long long)state->start,
+ (unsigned long long)state->end,
+ state->state, state->tree, atomic_read(&state->refs));
list_del(&state->leak_list);
kmem_cache_free(extent_state_cache, state);
while (!list_empty(&buffers)) {
eb = list_entry(buffers.next, struct extent_buffer, leak_list);
- printk("buffer leak start %Lu len %lu refs %d\n", eb->start, eb->len, atomic_read(&eb->refs));
+ printk(KERN_ERR "btrfs buffer leak start %llu len %lu "
+ "refs %d\n", (unsigned long long)eb->start,
+ eb->len, atomic_read(&eb->refs));
list_del(&eb->leak_list);
kmem_cache_free(extent_buffer_cache, eb);
}
static struct rb_node *tree_insert(struct rb_root *root, u64 offset,
struct rb_node *node)
{
- struct rb_node ** p = &root->rb_node;
- struct rb_node * parent = NULL;
+ struct rb_node **p = &root->rb_node;
+ struct rb_node *parent = NULL;
struct tree_entry *entry;
- while(*p) {
+ while (*p) {
parent = *p;
entry = rb_entry(parent, struct tree_entry, rb_node);
struct rb_node **next_ret)
{
struct rb_root *root = &tree->state;
- struct rb_node * n = root->rb_node;
+ struct rb_node *n = root->rb_node;
struct rb_node *prev = NULL;
struct rb_node *orig_prev = NULL;
struct tree_entry *entry;
struct tree_entry *prev_entry = NULL;
- while(n) {
+ while (n) {
entry = rb_entry(n, struct tree_entry, rb_node);
prev = n;
prev_entry = entry;
n = n->rb_left;
else if (offset > entry->end)
n = n->rb_right;
- else {
+ else
return n;
- }
}
if (prev_ret) {
orig_prev = prev;
- while(prev && offset > prev_entry->end) {
+ while (prev && offset > prev_entry->end) {
prev = rb_next(prev);
prev_entry = rb_entry(prev, struct tree_entry, rb_node);
}
if (next_ret) {
prev_entry = rb_entry(prev, struct tree_entry, rb_node);
- while(prev && offset < prev_entry->start) {
+ while (prev && offset < prev_entry->start) {
prev = rb_prev(prev);
prev_entry = rb_entry(prev, struct tree_entry, rb_node);
}
struct rb_node *ret;
ret = __etree_search(tree, offset, &prev, NULL);
- if (!ret) {
+ if (!ret)
return prev;
- }
return ret;
}
u64 offset, struct rb_node *node)
{
struct rb_root *root = &tree->buffer;
- struct rb_node ** p = &root->rb_node;
- struct rb_node * parent = NULL;
+ struct rb_node **p = &root->rb_node;
+ struct rb_node *parent = NULL;
struct extent_buffer *eb;
- while(*p) {
+ while (*p) {
parent = *p;
eb = rb_entry(parent, struct extent_buffer, rb_node);
u64 offset)
{
struct rb_root *root = &tree->buffer;
- struct rb_node * n = root->rb_node;
+ struct rb_node *n = root->rb_node;
struct extent_buffer *eb;
- while(n) {
+ while (n) {
eb = rb_entry(n, struct extent_buffer, rb_node);
if (offset < eb->start)
n = n->rb_left;
struct rb_node *node;
if (end < start) {
- printk("end < start %Lu %Lu\n", end, start);
+ printk(KERN_ERR "btrfs end < start %llu %llu\n",
+ (unsigned long long)end,
+ (unsigned long long)start);
WARN_ON(1);
}
if (bits & EXTENT_DIRTY)
if (node) {
struct extent_state *found;
found = rb_entry(node, struct extent_state, rb_node);
- printk("found node %Lu %Lu on insert of %Lu %Lu\n", found->start, found->end, start, end);
+ printk(KERN_ERR "btrfs found node %llu %llu on insert of "
+ "%llu %llu\n", (unsigned long long)found->start,
+ (unsigned long long)found->end,
+ (unsigned long long)start, (unsigned long long)end);
free_extent_state(state);
return -EEXIST;
}
if (node) {
struct extent_state *found;
found = rb_entry(node, struct extent_state, rb_node);
- printk("found node %Lu %Lu on insert of %Lu %Lu\n", found->start, found->end, prealloc->start, prealloc->end);
free_extent_state(prealloc);
return -EEXIST;
}
* [start, end] is inclusive
* This takes the tree lock.
*/
-static int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, int bits,
- int exclusive, u64 *failed_start, gfp_t mask)
+static int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
+ int bits, int exclusive, u64 *failed_start,
+ gfp_t mask)
{
struct extent_state *state;
struct extent_state *prealloc = NULL;
if (end < last_start)
this_end = end;
else
- this_end = last_start -1;
+ this_end = last_start - 1;
err = insert_state(tree, prealloc, start, this_end,
bits);
prealloc = NULL;
}
EXPORT_SYMBOL(set_extent_uptodate);
-static int clear_extent_uptodate(struct extent_io_tree *tree, u64 start, u64 end,
- gfp_t mask)
+static int clear_extent_uptodate(struct extent_io_tree *tree, u64 start,
+ u64 end, gfp_t mask)
{
return clear_extent_bit(tree, start, end, EXTENT_UPTODATE, 0, 0, mask);
}
0, NULL, mask);
}
-static int clear_extent_writeback(struct extent_io_tree *tree, u64 start, u64 end,
- gfp_t mask)
+static int clear_extent_writeback(struct extent_io_tree *tree, u64 start,
+ u64 end, gfp_t mask)
{
return clear_extent_bit(tree, start, end, EXTENT_WRITEBACK, 1, 0, mask);
}
* our range starts.
*/
node = tree_search(tree, start);
- if (!node) {
+ if (!node)
goto out;
- }
- while(1) {
+ while (1) {
state = rb_entry(node, struct extent_state, rb_node);
if (state->end >= start && (state->state & bits)) {
*start_ret = state->start;
* our range starts.
*/
node = tree_search(tree, start);
- if (!node) {
+ if (!node)
goto out;
- }
- while(1) {
+ while (1) {
state = rb_entry(node, struct extent_state, rb_node);
- if (state->end >= start && (state->state & bits)) {
+ if (state->end >= start && (state->state & bits))
return state;
- }
+
node = rb_next(node);
if (!node)
break;
goto out;
}
- while(1) {
+ while (1) {
state = rb_entry(node, struct extent_state, rb_node);
if (found && (state->start != cur_start ||
(state->state & EXTENT_BOUNDARY))) {
if (index == locked_page->index && end_index == index)
return 0;
- while(nr_pages > 0) {
+ while (nr_pages > 0) {
ret = find_get_pages_contig(inode->i_mapping, index,
min_t(unsigned long, nr_pages,
ARRAY_SIZE(pages)), pages);
/* skip the page at the start index */
nrpages = end_index - index + 1;
- while(nrpages > 0) {
+ while (nrpages > 0) {
ret = find_get_pages_contig(inode->i_mapping, index,
min_t(unsigned long,
nrpages, ARRAY_SIZE(pages)), pages);
* pages in order, so we can't process delalloc bytes before
* locked_page
*/
- if (delalloc_start < *start) {
+ if (delalloc_start < *start)
delalloc_start = *start;
- }
/*
* make sure to limit the number of pages we try to lock down
* if we're looping.
*/
- if (delalloc_end + 1 - delalloc_start > max_bytes && loops) {
+ if (delalloc_end + 1 - delalloc_start > max_bytes && loops)
delalloc_end = delalloc_start + PAGE_CACHE_SIZE - 1;
- }
+
/* step two, lock all the pages after the page that has start */
ret = lock_delalloc_pages(inode, locked_page,
delalloc_start, delalloc_end);
if (!(unlock_pages || clear_dirty || set_writeback || end_writeback))
return 0;
- while(nr_pages > 0) {
+ while (nr_pages > 0) {
ret = find_get_pages_contig(inode->i_mapping, index,
min_t(unsigned long,
nr_pages, ARRAY_SIZE(pages)), pages);
int found = 0;
if (search_end <= cur_start) {
- printk("search_end %Lu start %Lu\n", search_end, cur_start);
WARN_ON(1);
return 0;
}
* our range starts.
*/
node = tree_search(tree, cur_start);
- if (!node) {
+ if (!node)
goto out;
- }
- while(1) {
+ while (1) {
state = rb_entry(node, struct extent_state, rb_node);
if (state->start > search_end)
break;
nr = bio_get_nr_vecs(bdev);
bio = extent_bio_alloc(bdev, sector, nr, GFP_NOFS | __GFP_HIGH);
- if (!bio) {
- printk("failed to allocate bio nr %d\n", nr);
- }
bio_add_page(bio, page, page_size, offset);
bio->bi_end_io = end_io_func;
bio->bi_private = tree;
- if (bio_ret) {
+ if (bio_ret)
*bio_ret = bio;
- } else {
+ else
ret = submit_one_bio(rw, bio, mirror_num, bio_flags);
- }
return ret;
}
break;
}
extent_offset = cur - em->start;
- if (extent_map_end(em) <= cur) {
-printk("bad mapping em [%Lu %Lu] cur %Lu\n", em->start, extent_map_end(em), cur);
- }
BUG_ON(extent_map_end(em) <= cur);
- if (end < cur) {
-printk("2bad mapping end %Lu cur %Lu\n", end, cur);
- }
BUG_ON(end < cur);
if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags))
delalloc_end = 0;
page_started = 0;
if (!epd->extent_locked) {
- while(delalloc_end < page_end) {
+ while (delalloc_end < page_end) {
nr_delalloc = find_lock_delalloc_range(inode, tree,
page,
&delalloc_start,
nr_written++;
end = page_end;
- if (test_range_bit(tree, start, page_end, EXTENT_DELALLOC, 0)) {
- printk("found delalloc bits after lock_extent\n");
- }
+ if (test_range_bit(tree, start, page_end, EXTENT_DELALLOC, 0))
+ printk(KERN_ERR "btrfs delalloc bits after lock_extent\n");
if (last_byte <= start) {
clear_extent_dirty(tree, start, page_end, GFP_NOFS);
clear_extent_dirty(tree, cur,
cur + iosize - 1, GFP_NOFS);
- unlock_extent(tree, unlock_start, cur + iosize -1,
+ unlock_extent(tree, unlock_start, cur + iosize - 1,
GFP_NOFS);
/*
set_range_writeback(tree, cur, cur + iosize - 1);
if (!PageWriteback(page)) {
- printk("warning page %lu not writeback, "
- "cur %llu end %llu\n", page->index,
- (unsigned long long)cur,
+ printk(KERN_ERR "btrfs warning page %lu not "
+ "writeback, cur %llu end %llu\n",
+ page->index, (unsigned long long)cur,
(unsigned long long)end);
}
retry:
while (!done && (index <= end) &&
(nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
- PAGECACHE_TAG_DIRTY,
- min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1))) {
+ PAGECACHE_TAG_DIRTY, min(end - index,
+ (pgoff_t)PAGEVEC_SIZE-1) + 1))) {
unsigned i;
scanned = 1;
extent_write_cache_pages(tree, mapping, &wbc_writepages,
__extent_writepage, &epd, flush_write_bio);
- if (epd.bio) {
+ if (epd.bio)
submit_one_bio(WRITE, epd.bio, 0, 0);
- }
return ret;
}
EXPORT_SYMBOL(extent_write_full_page);
.range_end = end + 1,
};
- while(start <= end) {
+ while (start <= end) {
page = find_get_page(mapping, start >> PAGE_CACHE_SHIFT);
if (clear_page_dirty_for_io(page))
ret = __extent_writepage(page, &wbc_writepages, &epd);
ret = extent_write_cache_pages(tree, mapping, wbc,
__extent_writepage, &epd,
flush_write_bio);
- if (epd.bio) {
+ if (epd.bio)
submit_one_bio(WRITE, epd.bio, 0, 0);
- }
return ret;
}
EXPORT_SYMBOL(extent_writepages);
u64 end = start + PAGE_CACHE_SIZE - 1;
size_t blocksize = page->mapping->host->i_sb->s_blocksize;
- start += (offset + blocksize -1) & ~(blocksize - 1);
+ start += (offset + blocksize - 1) & ~(blocksize - 1);
if (start > end)
return 0;
orig_block_start = block_start;
lock_extent(tree, page_start, page_end, GFP_NOFS);
- while(block_start <= block_end) {
+ while (block_start <= block_end) {
em = get_extent(inode, page, page_offset, block_start,
block_end - block_start + 1, 1);
- if (IS_ERR(em) || !em) {
+ if (IS_ERR(em) || !em)
goto err;
- }
+
cur_end = min(block_end, extent_map_end(em) - 1);
block_off_start = block_start & (PAGE_CACHE_SIZE - 1);
block_off_end = block_off_start + blocksize;
}
__set_page_dirty_nobuffers(extent_buffer_page(eb, i));
set_extent_dirty(tree, page_offset(page),
- page_offset(page) + PAGE_CACHE_SIZE -1,
+ page_offset(page) + PAGE_CACHE_SIZE - 1,
GFP_NOFS);
unlock_page(page);
}
ret = test_range_bit(tree, start, end, EXTENT_UPTODATE, 1);
if (ret)
return 1;
- while(start <= end) {
+ while (start <= end) {
index = start >> PAGE_CACHE_SHIFT;
page = find_get_page(tree->mapping, index);
uptodate = PageUptodate(page);
lock_page(page);
}
locked_pages++;
- if (!PageUptodate(page)) {
+ if (!PageUptodate(page))
all_uptodate = 0;
- }
}
if (all_uptodate) {
if (start_i == 0)
eb->flags |= EXTENT_UPTODATE;
- if (ret) {
- printk("all up to date but ret is %d\n", ret);
- }
goto unlock_exit;
}
err = __extent_read_full_page(tree, page,
get_extent, &bio,
mirror_num, &bio_flags);
- if (err) {
+ if (err)
ret = err;
- printk("err %d from __extent_read_full_page\n", ret);
- }
} else {
unlock_page(page);
}
if (bio)
submit_one_bio(READ, bio, mirror_num, bio_flags);
- if (ret || !wait) {
- if (ret)
- printk("ret %d wait %d returning\n", ret, wait);
+ if (ret || !wait)
return ret;
- }
+
for (i = start_i; i < num_pages; i++) {
page = extent_buffer_page(eb, i);
wait_on_page_locked(page);
- if (!PageUptodate(page)) {
- printk("page not uptodate after wait_on_page_locked\n");
+ if (!PageUptodate(page))
ret = -EIO;
- }
}
+
if (!ret)
eb->flags |= EXTENT_UPTODATE;
return ret;
unlock_exit:
i = start_i;
- while(locked_pages > 0) {
+ while (locked_pages > 0) {
page = extent_buffer_page(eb, i);
i++;
unlock_page(page);
offset = (start_offset + start) & ((unsigned long)PAGE_CACHE_SIZE - 1);
- while(len > 0) {
+ while (len > 0) {
page = extent_buffer_page(eb, i);
cur = min(len, (PAGE_CACHE_SIZE - offset));
offset = 0;
*map_start = ((u64)i << PAGE_CACHE_SHIFT) - start_offset;
}
+
if (start + min_len > eb->len) {
-printk("bad mapping eb start %Lu len %lu, wanted %lu %lu\n", eb->start, eb->len, start, min_len);
+ printk(KERN_ERR "btrfs bad mapping eb start %llu len %lu, "
+ "wanted %lu %lu\n", (unsigned long long)eb->start,
+ eb->len, start, min_len);
WARN_ON(1);
}
offset = (start_offset + start) & ((unsigned long)PAGE_CACHE_SIZE - 1);
- while(len > 0) {
+ while (len > 0) {
page = extent_buffer_page(eb, i);
cur = min(len, (PAGE_CACHE_SIZE - offset));
offset = (start_offset + start) & ((unsigned long)PAGE_CACHE_SIZE - 1);
- while(len > 0) {
+ while (len > 0) {
page = extent_buffer_page(eb, i);
WARN_ON(!PageUptodate(page));
offset = (start_offset + start) & ((unsigned long)PAGE_CACHE_SIZE - 1);
- while(len > 0) {
+ while (len > 0) {
page = extent_buffer_page(eb, i);
WARN_ON(!PageUptodate(page));
offset = (start_offset + dst_offset) &
((unsigned long)PAGE_CACHE_SIZE - 1);
- while(len > 0) {
+ while (len > 0) {
page = extent_buffer_page(dst, i);
WARN_ON(!PageUptodate(page));
unsigned long src_i;
if (src_offset + len > dst->len) {
- printk("memmove bogus src_offset %lu move len %lu len %lu\n",
- src_offset, len, dst->len);
+ printk(KERN_ERR "btrfs memmove bogus src_offset %lu move "
+ "len %lu dst len %lu\n", src_offset, len, dst->len);
BUG_ON(1);
}
if (dst_offset + len > dst->len) {
- printk("memmove bogus dst_offset %lu move len %lu len %lu\n",
- dst_offset, len, dst->len);
+ printk(KERN_ERR "btrfs memmove bogus dst_offset %lu move "
+ "len %lu dst len %lu\n", dst_offset, len, dst->len);
BUG_ON(1);
}
- while(len > 0) {
+ while (len > 0) {
dst_off_in_page = (start_offset + dst_offset) &
((unsigned long)PAGE_CACHE_SIZE - 1);
src_off_in_page = (start_offset + src_offset) &
unsigned long src_i;
if (src_offset + len > dst->len) {
- printk("memmove bogus src_offset %lu move len %lu len %lu\n",
- src_offset, len, dst->len);
+ printk(KERN_ERR "btrfs memmove bogus src_offset %lu move "
+ "len %lu len %lu\n", src_offset, len, dst->len);
BUG_ON(1);
}
if (dst_offset + len > dst->len) {
- printk("memmove bogus dst_offset %lu move len %lu len %lu\n",
- dst_offset, len, dst->len);
+ printk(KERN_ERR "btrfs memmove bogus dst_offset %lu move "
+ "len %lu len %lu\n", dst_offset, len, dst->len);
BUG_ON(1);
}
if (dst_offset < src_offset) {
memcpy_extent_buffer(dst, dst_offset, src_offset, len);
return;
}
- while(len > 0) {
+ while (len > 0) {
dst_i = (start_offset + dst_end) >> PAGE_CACHE_SHIFT;
src_i = (start_offset + src_end) >> PAGE_CACHE_SHIFT;
static struct rb_node *tree_insert(struct rb_root *root, u64 offset,
struct rb_node *node)
{
- struct rb_node ** p = &root->rb_node;
- struct rb_node * parent = NULL;
+ struct rb_node **p = &root->rb_node;
+ struct rb_node *parent = NULL;
struct extent_map *entry;
- while(*p) {
+ while (*p) {
parent = *p;
entry = rb_entry(parent, struct extent_map, rb_node);
struct rb_node **prev_ret,
struct rb_node **next_ret)
{
- struct rb_node * n = root->rb_node;
+ struct rb_node *n = root->rb_node;
struct rb_node *prev = NULL;
struct rb_node *orig_prev = NULL;
struct extent_map *entry;
struct extent_map *prev_entry = NULL;
- while(n) {
+ while (n) {
entry = rb_entry(n, struct extent_map, rb_node);
prev = n;
prev_entry = entry;
if (prev_ret) {
orig_prev = prev;
- while(prev && offset >= extent_map_end(prev_entry)) {
+ while (prev && offset >= extent_map_end(prev_entry)) {
prev = rb_next(prev);
prev_entry = rb_entry(prev, struct extent_map, rb_node);
}
if (next_ret) {
prev_entry = rb_entry(prev, struct extent_map, rb_node);
- while(prev && offset < prev_entry->start) {
+ while (prev && offset < prev_entry->start) {
prev = rb_prev(prev);
prev_entry = rb_entry(prev, struct extent_map, rb_node);
}
#include "transaction.h"
#include "print-tree.h"
-#define MAX_CSUM_ITEMS(r,size) ((((BTRFS_LEAF_DATA_SIZE(r) - \
+#define MAX_CSUM_ITEMS(r, size) ((((BTRFS_LEAF_DATA_SIZE(r) - \
sizeof(struct btrfs_item) * 2) / \
size) - 1))
int btrfs_insert_file_extent(struct btrfs_trans_handle *trans,
WARN_ON(bio->bi_vcnt <= 0);
disk_bytenr = (u64)bio->bi_sector << 9;
- while(bio_index < bio->bi_vcnt) {
+ while (bio_index < bio->bi_vcnt) {
offset = page_offset(bvec->bv_page) + bvec->bv_offset;
ret = btrfs_find_ordered_sum(inode, offset, disk_bytenr, &sum);
if (ret == 0)
offset + bvec->bv_len - 1,
EXTENT_NODATASUM, GFP_NOFS);
} else {
- printk("no csum found for inode %lu "
- "start %llu\n", inode->i_ino,
+ printk(KERN_INFO "btrfs no csum found "
+ "for inode %lu start %llu\n",
+ inode->i_ino,
(unsigned long long)offset);
}
item = NULL;
BUG_ON(!ordered);
sums->bytenr = ordered->start;
- while(bio_index < bio->bi_vcnt) {
+ while (bio_index < bio->bi_vcnt) {
if (!contig)
offset = page_offset(bvec->bv_page) + bvec->bv_offset;
path = btrfs_alloc_path();
- while(1) {
+ while (1) {
key.objectid = BTRFS_EXTENT_CSUM_OBJECTID;
key.offset = end_byte - 1;
key.type = BTRFS_EXTENT_CSUM_KEY;
goto csum;
diff = diff - btrfs_item_size_nr(leaf, path->slots[0]);
- if (diff != csum_size) {
+ if (diff != csum_size)
goto insert;
- }
ret = btrfs_extend_item(trans, root, path, diff);
BUG_ON(ret);
u64 next_sector = sector_sum->bytenr;
struct btrfs_sector_sum *next = sector_sum + 1;
- while(tmp < sums->len) {
+ while (tmp < sums->len) {
if (next_sector + root->sectorsize != next->bytenr)
break;
tmp += root->sectorsize;
/* simple helper to fault in pages and copy. This should go away
* and be replaced with calls into generic code.
*/
-static int noinline btrfs_copy_from_user(loff_t pos, int num_pages,
+static noinline int btrfs_copy_from_user(loff_t pos, int num_pages,
int write_bytes,
struct page **prepared_pages,
- const char __user * buf)
+ const char __user *buf)
{
long page_fault = 0;
int i;
/*
* unlocks pages after btrfs_file_write is done with them
*/
-static void noinline btrfs_drop_pages(struct page **pages, size_t num_pages)
+static noinline void btrfs_drop_pages(struct page **pages, size_t num_pages)
{
size_t i;
for (i = 0; i < num_pages; i++) {
* this also makes the decision about creating an inline extent vs
* doing real data extents, marking pages dirty and delalloc as required.
*/
-static int noinline dirty_and_release_pages(struct btrfs_trans_handle *trans,
+static noinline int dirty_and_release_pages(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct file *file,
struct page **pages,
btrfs_set_trans_block_group(trans, inode);
hint_byte = 0;
- if ((end_of_last_block & 4095) == 0) {
- printk("strange end of last %Lu %zu %Lu\n", start_pos, write_bytes, end_of_last_block);
- }
set_extent_uptodate(io_tree, start_pos, end_of_last_block, GFP_NOFS);
/* check for reserved extents on each page, we don't want
len = (u64)-1;
testend = 0;
}
- while(1) {
+ while (1) {
if (!split)
split = alloc_extent_map(GFP_NOFS);
if (!split2)
path = btrfs_alloc_path();
ret = btrfs_lookup_file_extent(NULL, root, path, inode->i_ino,
last_offset, 0);
- while(1) {
+ while (1) {
nritems = btrfs_header_nritems(path->nodes[0]);
if (path->slots[0] >= nritems) {
ret = btrfs_next_leaf(root, path);
if (found_key.offset < last_offset) {
WARN_ON(1);
btrfs_print_leaf(root, leaf);
- printk("inode %lu found offset %Lu expected %Lu\n",
- inode->i_ino, found_key.offset, last_offset);
+ printk(KERN_ERR "inode %lu found offset %llu "
+ "expected %llu\n", inode->i_ino,
+ (unsigned long long)found_key.offset,
+ (unsigned long long)last_offset);
err = 1;
goto out;
}
extent_end = found_key.offset +
btrfs_file_extent_inline_len(leaf, extent);
extent_end = (extent_end + root->sectorsize - 1) &
- ~((u64)root->sectorsize -1 );
+ ~((u64)root->sectorsize - 1);
}
last_offset = extent_end;
path->slots[0]++;
if (0 && last_offset < inode->i_size) {
WARN_ON(1);
btrfs_print_leaf(root, leaf);
- printk("inode %lu found offset %Lu size %Lu\n", inode->i_ino,
- last_offset, inode->i_size);
+ printk(KERN_ERR "inode %lu found offset %llu size %llu\n",
+ inode->i_ino, (unsigned long long)last_offset,
+ (unsigned long long)inode->i_size);
err = 1;
}
* inline_limit is used to tell this code which offsets in the file to keep
* if they contain inline extents.
*/
-int noinline btrfs_drop_extents(struct btrfs_trans_handle *trans,
+noinline int btrfs_drop_extents(struct btrfs_trans_handle *trans,
struct btrfs_root *root, struct inode *inode,
u64 start, u64 end, u64 inline_limit, u64 *hint_byte)
{
path = btrfs_alloc_path();
if (!path)
return -ENOMEM;
- while(1) {
+ while (1) {
recow = 0;
btrfs_release_path(root, path);
ret = btrfs_lookup_file_extent(trans, root, path, inode->i_ino,
if (disk_bytenr != 0) {
ret = btrfs_update_extent_ref(trans, root,
disk_bytenr, orig_parent,
- leaf->start,
+ leaf->start,
root->root_key.objectid,
trans->transid, ins.objectid);
BUG_ON(ret);
}
btrfs_release_path(root, path);
- if (disk_bytenr != 0) {
+ if (disk_bytenr != 0)
inode_add_bytes(inode, extent_end - end);
- }
}
if (found_extent && !keep) {
* waits for data=ordered extents to finish before allowing the pages to be
* modified.
*/
-static int noinline prepare_pages(struct btrfs_root *root, struct file *file,
+static noinline int prepare_pages(struct btrfs_root *root, struct file *file,
struct page **pages, size_t num_pages,
loff_t pos, unsigned long first_index,
unsigned long last_index, size_t write_bytes)
struct btrfs_ordered_extent *ordered;
lock_extent(&BTRFS_I(inode)->io_tree,
start_pos, last_pos - 1, GFP_NOFS);
- ordered = btrfs_lookup_first_ordered_extent(inode, last_pos -1);
+ ordered = btrfs_lookup_first_ordered_extent(inode,
+ last_pos - 1);
if (ordered &&
ordered->file_offset + ordered->len > start_pos &&
ordered->file_offset < last_pos) {
}
}
- while(count > 0) {
+ while (count > 0) {
size_t offset = pos & (PAGE_CACHE_SIZE - 1);
size_t write_bytes = min(count, nrptrs *
(size_t)PAGE_CACHE_SIZE -
return num_written ? num_written : err;
}
-int btrfs_release_file(struct inode * inode, struct file * filp)
+int btrfs_release_file(struct inode *inode, struct file *filp)
{
if (filp->private_data)
btrfs_ioctl_trans_end(filp);
}
ret = btrfs_log_dentry_safe(trans, root, file->f_dentry);
- if (ret < 0) {
+ if (ret < 0)
goto out;
- }
/* we've logged all the items and now have a consistent
* version of the file in the log. It is possible that
info->offset = offset;
info->bytes += bytes;
} else if (right_info && right_info->offset != offset+bytes) {
- printk(KERN_ERR "adding space in the middle of an existing "
- "free space area. existing: offset=%Lu, bytes=%Lu. "
- "new: offset=%Lu, bytes=%Lu\n", right_info->offset,
- right_info->bytes, offset, bytes);
+ printk(KERN_ERR "btrfs adding space in the middle of an "
+ "existing free space area. existing: "
+ "offset=%llu, bytes=%llu. new: offset=%llu, "
+ "bytes=%llu\n", (unsigned long long)right_info->offset,
+ (unsigned long long)right_info->bytes,
+ (unsigned long long)offset,
+ (unsigned long long)bytes);
BUG();
}
if (unlikely((left_info->offset + left_info->bytes) !=
offset)) {
- printk(KERN_ERR "free space to the left of new free "
- "space isn't quite right. existing: offset=%Lu,"
- " bytes=%Lu. new: offset=%Lu, bytes=%Lu\n",
- left_info->offset, left_info->bytes, offset,
- bytes);
+ printk(KERN_ERR "btrfs free space to the left "
+ "of new free space isn't "
+ "quite right. existing: offset=%llu, "
+ "bytes=%llu. new: offset=%llu, bytes=%llu\n",
+ (unsigned long long)left_info->offset,
+ (unsigned long long)left_info->bytes,
+ (unsigned long long)offset,
+ (unsigned long long)bytes);
BUG();
}
BUG();
}
- if (alloc_info)
- kfree(alloc_info);
+ kfree(alloc_info);
return ret;
}
if (info && info->offset == offset) {
if (info->bytes < bytes) {
- printk(KERN_ERR "Found free space at %Lu, size %Lu,"
- "trying to use %Lu\n",
- info->offset, info->bytes, bytes);
+ printk(KERN_ERR "Found free space at %llu, size %llu,"
+ "trying to use %llu\n",
+ (unsigned long long)info->offset,
+ (unsigned long long)info->bytes,
+ (unsigned long long)bytes);
WARN_ON(1);
ret = -EINVAL;
goto out;
info = rb_entry(n, struct btrfs_free_space, offset_index);
if (info->bytes >= bytes)
count++;
- //printk(KERN_INFO "offset=%Lu, bytes=%Lu\n", info->offset,
- // info->bytes);
}
printk(KERN_INFO "%d blocks of free space at or bigger than bytes is"
"\n", count);
last_ino = key.objectid + 1;
path->slots[0]++;
}
- // FIXME -ENOSPC
BUG_ON(1);
found:
btrfs_release_path(root, path);
* the btree. The caller should have done a btrfs_drop_extents so that
* no overlapping inline items exist in the btree
*/
-static int noinline insert_inline_extent(struct btrfs_trans_handle *trans,
+static noinline int insert_inline_extent(struct btrfs_trans_handle *trans,
struct btrfs_root *root, struct inode *inode,
u64 start, size_t size, size_t compressed_size,
struct page **compressed_pages)
cur_size = compressed_size;
}
- path = btrfs_alloc_path(); if (!path)
+ path = btrfs_alloc_path();
+ if (!path)
return -ENOMEM;
btrfs_set_trans_block_group(trans, inode);
BUG_ON(ret);
if (ret) {
err = ret;
- printk("got bad ret %d\n", ret);
goto fail;
}
leaf = path->nodes[0];
if (use_compress) {
struct page *cpage;
int i = 0;
- while(compressed_size > 0) {
+ while (compressed_size > 0) {
cpage = compressed_pages[i];
cur_size = min_t(unsigned long, compressed_size,
PAGE_CACHE_SIZE);
WARN_ON(pages[i]->mapping);
page_cache_release(pages[i]);
}
- if (pages)
- kfree(pages);
+ kfree(pages);
goto out;
}
trans = btrfs_join_transaction(root, 1);
- while(!list_empty(&async_cow->extents)) {
+ while (!list_empty(&async_cow->extents)) {
async_extent = list_entry(async_cow->extents.next,
struct async_extent, list);
list_del(&async_extent->list);
unsigned long nr_written = 0;
lock_extent(io_tree, async_extent->start,
- async_extent->start + async_extent->ram_size - 1,
- GFP_NOFS);
+ async_extent->start +
+ async_extent->ram_size - 1, GFP_NOFS);
/* allocate blocks */
cow_file_range(inode, async_cow->locked_page,
if (!page_started)
extent_write_locked_range(io_tree,
inode, async_extent->start,
- async_extent->start +
+ async_extent->start +
async_extent->ram_size - 1,
btrfs_get_extent,
WB_SYNC_ALL);
set_bit(EXTENT_FLAG_PINNED, &em->flags);
set_bit(EXTENT_FLAG_COMPRESSED, &em->flags);
- while(1) {
+ while (1) {
spin_lock(&em_tree->lock);
ret = add_extent_mapping(em_tree, em);
spin_unlock(&em_tree->lock);
NULL, 1, 1, 0, 1, 1, 0);
ret = btrfs_submit_compressed_write(inode,
- async_extent->start,
- async_extent->ram_size,
- ins.objectid,
- ins.offset, async_extent->pages,
- async_extent->nr_pages);
+ async_extent->start,
+ async_extent->ram_size,
+ ins.objectid,
+ ins.offset, async_extent->pages,
+ async_extent->nr_pages);
BUG_ON(ret);
trans = btrfs_join_transaction(root, 1);
btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0);
- while(disk_num_bytes > 0) {
+ while (disk_num_bytes > 0) {
cur_alloc_size = min(disk_num_bytes, root->fs_info->max_extent);
ret = btrfs_reserve_extent(trans, root, cur_alloc_size,
root->sectorsize, 0, alloc_hint,
(u64)-1, &ins, 1);
- if (ret) {
- BUG();
- }
+ BUG_ON(ret);
+
em = alloc_extent_map(GFP_NOFS);
em->start = start;
em->orig_start = em->start;
em->bdev = root->fs_info->fs_devices->latest_bdev;
set_bit(EXTENT_FLAG_PINNED, &em->flags);
- while(1) {
+ while (1) {
spin_lock(&em_tree->lock);
ret = add_extent_mapping(em_tree, em);
spin_unlock(&em_tree->lock);
BUG_ON(ret);
}
- if (disk_num_bytes < cur_alloc_size) {
- printk("num_bytes %Lu cur_alloc %Lu\n", disk_num_bytes,
- cur_alloc_size);
+ if (disk_num_bytes < cur_alloc_size)
break;
- }
+
/* we're not doing compressed IO, don't unlock the first
* page (which the caller expects to stay locked), don't
* clear any dirty bits and don't set any writeback bits
waitqueue_active(&root->fs_info->async_submit_wait))
wake_up(&root->fs_info->async_submit_wait);
- if (async_cow->inode) {
+ if (async_cow->inode)
submit_compressed_extents(async_cow->inode, async_cow);
- }
}
static noinline void async_cow_free(struct btrfs_work *work)
clear_extent_bit(&BTRFS_I(inode)->io_tree, start, end, EXTENT_LOCKED |
EXTENT_DELALLOC, 1, 0, GFP_NOFS);
- while(start < end) {
+ while (start < end) {
async_cow = kmalloc(sizeof(*async_cow), GFP_NOFS);
async_cow->inode = inode;
async_cow->root = root;
limit));
}
- while(atomic_read(&root->fs_info->async_submit_draining) &&
+ while (atomic_read(&root->fs_info->async_submit_draining) &&
atomic_read(&root->fs_info->async_delalloc_pages)) {
wait_event(root->fs_info->async_submit_wait,
(atomic_read(&root->fs_info->async_delalloc_pages) ==
return 0;
}
-static int noinline csum_exist_in_range(struct btrfs_root *root,
+static noinline int csum_exist_in_range(struct btrfs_root *root,
u64 bytenr, u64 num_bytes)
{
int ret;
if (btrfs_test_flag(inode, NODATACOW))
ret = run_delalloc_nocow(inode, locked_page, start, end,
- page_started, 1, nr_written);
+ page_started, 1, nr_written);
else if (btrfs_test_flag(inode, PREALLOC))
ret = run_delalloc_nocow(inode, locked_page, start, end,
- page_started, 0, nr_written);
+ page_started, 0, nr_written);
else
ret = cow_file_range_async(inode, locked_page, start, end,
- page_started, nr_written);
+ page_started, nr_written);
return ret;
}
spin_lock(&root->fs_info->delalloc_lock);
if (end - start + 1 > root->fs_info->delalloc_bytes) {
- printk("warning: delalloc account %Lu %Lu\n",
- end - start + 1, root->fs_info->delalloc_bytes);
+ printk(KERN_INFO "btrfs warning: delalloc account "
+ "%llu %llu\n",
+ (unsigned long long)end - start + 1,
+ (unsigned long long)
+ root->fs_info->delalloc_bytes);
root->fs_info->delalloc_bytes = 0;
BTRFS_I(inode)->delalloc_bytes = 0;
} else {
ret = btrfs_map_block(map_tree, READ, logical,
&map_length, NULL, 0);
- if (map_length < length + size) {
+ if (map_length < length + size)
return 1;
- }
return 0;
}
* At IO completion time the cums attached on the ordered extent record
* are inserted into the btree
*/
-static int __btrfs_submit_bio_start(struct inode *inode, int rw, struct bio *bio,
- int mirror_num, unsigned long bio_flags)
+static int __btrfs_submit_bio_start(struct inode *inode, int rw,
+ struct bio *bio, int mirror_num,
+ unsigned long bio_flags)
{
struct btrfs_root *root = BTRFS_I(inode)->root;
int ret = 0;
int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end)
{
- if ((end & (PAGE_CACHE_SIZE - 1)) == 0) {
+ if ((end & (PAGE_CACHE_SIZE - 1)) == 0)
WARN_ON(1);
- }
return set_extent_delalloc(&BTRFS_I(inode)->io_tree, start, end,
GFP_NOFS);
}
}
local_irq_save(flags);
kaddr = kmap_atomic(page, KM_IRQ0);
- if (ret) {
+ if (ret)
goto zeroit;
- }
+
csum = btrfs_csum_data(root, kaddr + offset, csum, end - start + 1);
btrfs_csum_final(csum, (char *)&csum);
- if (csum != private) {
+ if (csum != private)
goto zeroit;
- }
+
kunmap_atomic(kaddr, KM_IRQ0);
local_irq_restore(flags);
good:
return 0;
zeroit:
- printk("btrfs csum failed ino %lu off %llu csum %u private %Lu\n",
- page->mapping->host->i_ino, (unsigned long long)start, csum,
- private);
+ printk(KERN_INFO "btrfs csum failed ino %lu off %llu csum %u "
+ "private %llu\n", page->mapping->host->i_ino,
+ (unsigned long long)start, csum,
+ (unsigned long long)private);
memset(kaddr + offset, 1, end - start + 1);
flush_dcache_page(page);
kunmap_atomic(kaddr, KM_IRQ0);
/*
* copy everything in the in-memory inode into the btree.
*/
-int noinline btrfs_update_inode(struct btrfs_trans_handle *trans,
- struct btrfs_root *root,
- struct inode *inode)
+noinline int btrfs_update_inode(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root, struct inode *inode)
{
struct btrfs_inode_item *inode_item;
struct btrfs_path *path;
inode->i_ino,
dir->i_ino, &index);
if (ret) {
- printk("failed to delete reference to %.*s, "
+ printk(KERN_INFO "btrfs failed to delete reference to %.*s, "
"inode %lu parent %lu\n", name_len, name,
inode->i_ino, dir->i_ino);
goto err;
/* now the directory is empty */
err = btrfs_unlink_inode(trans, root, dir, dentry->d_inode,
dentry->d_name.name, dentry->d_name.len);
- if (!err) {
+ if (!err)
btrfs_i_size_write(inode, 0);
- }
fail_trans:
nr = trans->blocks_used;
search_again:
ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
- if (ret < 0) {
+ if (ret < 0)
goto error;
- }
+
if (ret > 0) {
/* there are no items in the tree for us to truncate, we're
* done
path->slots[0]--;
}
- while(1) {
+ while (1) {
fi = NULL;
leaf = path->nodes[0];
btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
item_end--;
}
if (item_end < new_size) {
- if (found_type == BTRFS_DIR_ITEM_KEY) {
+ if (found_type == BTRFS_DIR_ITEM_KEY)
found_type = BTRFS_INODE_ITEM_KEY;
- } else if (found_type == BTRFS_EXTENT_ITEM_KEY) {
+ else if (found_type == BTRFS_EXTENT_ITEM_KEY)
found_type = BTRFS_EXTENT_DATA_KEY;
- } else if (found_type == BTRFS_EXTENT_DATA_KEY) {
+ else if (found_type == BTRFS_EXTENT_DATA_KEY)
found_type = BTRFS_XATTR_ITEM_KEY;
- } else if (found_type == BTRFS_XATTR_ITEM_KEY) {
+ else if (found_type == BTRFS_XATTR_ITEM_KEY)
found_type = BTRFS_INODE_REF_KEY;
- } else if (found_type) {
+ else if (found_type)
found_type--;
- } else {
+ else
break;
- }
btrfs_set_key_type(&key, found_type);
goto next;
}
pending_del_nr++;
pending_del_slot = path->slots[0];
} else {
- printk("bad pending slot %d pending_del_nr %d pending_del_slot %d\n", path->slots[0], pending_del_nr, pending_del_slot);
+ BUG();
}
} else {
break;
namelen, 0);
if (IS_ERR(di))
ret = PTR_ERR(di);
- if (!di || IS_ERR(di)) {
+
+ if (!di || IS_ERR(di))
goto out_err;
- }
+
btrfs_dir_item_key_to_cpu(path->nodes[0], di, location);
out:
btrfs_free_path(path);
static int btrfs_find_actor(struct inode *inode, void *opaque)
{
struct btrfs_iget_args *args = opaque;
- return (args->ino == inode->i_ino &&
- args->root == BTRFS_I(inode)->root);
+ return args->ino == inode->i_ino &&
+ args->root == BTRFS_I(inode)->root;
}
struct inode *btrfs_ilookup(struct super_block *s, u64 objectid,
struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
{
- struct inode * inode;
+ struct inode *inode;
struct btrfs_inode *bi = BTRFS_I(dir);
struct btrfs_root *root = bi->root;
struct btrfs_root *sub_root = root;
if (BTRFS_I(dir)->index_cnt == (u64)-1) {
ret = btrfs_set_inode_index_count(dir);
- if (ret) {
+ if (ret)
return ret;
- }
}
*index = BTRFS_I(dir)->index_cnt;
/*
* a bit scary, this does extent mapping from logical file offset to the disk.
- * the ugly parts come from merging extents from the disk with the
- * in-ram representation. This gets more complex because of the data=ordered code,
+ * the ugly parts come from merging extents from the disk with the in-ram
+ * representation. This gets more complex because of the data=ordered code,
* where the in-ram extents might be locked pending data=ordered completion.
*
* This also copies inline extents directly into the page.
*/
+
struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
size_t pg_offset, u64 start, u64 len,
int create)
extent_map_end(em) - 1, GFP_NOFS);
goto insert;
} else {
- printk("unkknown found_type %d\n", found_type);
+ printk(KERN_ERR "btrfs unknown found_type %d\n", found_type);
WARN_ON(1);
}
not_found:
insert:
btrfs_release_path(root, path);
if (em->start > start || extent_map_end(em) <= start) {
- printk("bad extent! em: [%Lu %Lu] passed [%Lu %Lu]\n", em->start, em->len, start, len);
+ printk(KERN_ERR "Btrfs: bad extent! em: [%llu %llu] passed "
+ "[%llu %llu]\n", (unsigned long long)em->start,
+ (unsigned long long)em->len,
+ (unsigned long long)start,
+ (unsigned long long)len);
err = -EIO;
goto out;
}
}
} else {
err = -EIO;
- printk("failing to insert %Lu %Lu\n",
- start, len);
free_extent_map(em);
em = NULL;
}
btrfs_free_path(path);
if (trans) {
ret = btrfs_end_transaction(trans, root);
- if (!err) {
+ if (!err)
err = ret;
- }
}
if (err) {
free_extent_map(em);
}
spin_unlock(&BTRFS_I(inode)->root->list_lock);
- while(1) {
+ while (1) {
ordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1);
if (!ordered)
break;
else {
- printk("found ordered extent %Lu %Lu\n",
- ordered->file_offset, ordered->len);
+ printk(KERN_ERR "btrfs found ordered "
+ "extent %llu %llu on inode cleanup\n",
+ (unsigned long long)ordered->file_offset,
+ (unsigned long long)ordered->len);
btrfs_remove_ordered_extent(inode, ordered);
btrfs_put_ordered_extent(ordered);
btrfs_put_ordered_extent(ordered);
return 0;
}
-static int btrfs_rename(struct inode * old_dir, struct dentry *old_dentry,
- struct inode * new_dir,struct dentry *new_dentry)
+static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
+ struct inode *new_dir, struct dentry *new_dentry)
{
struct btrfs_trans_handle *trans;
struct btrfs_root *root = BTRFS_I(old_dir)->root;
return -EROFS;
spin_lock(&root->fs_info->delalloc_lock);
- while(!list_empty(head)) {
+ while (!list_empty(head)) {
binode = list_entry(head->next, struct btrfs_inode,
delalloc_inodes);
inode = igrab(&binode->vfs_inode);
* ordered extents get created before we return
*/
atomic_inc(&root->fs_info->async_submit_draining);
- while(atomic_read(&root->fs_info->nr_async_submits) ||
+ while (atomic_read(&root->fs_info->nr_async_submits) ||
atomic_read(&root->fs_info->async_delalloc_pages)) {
wait_event(root->fs_info->async_submit_wait,
(atomic_read(&root->fs_info->nr_async_submits) == 0 &&
* to see if is references the subvolume where we are
* placing this new snapshot.
*/
- while(1) {
+ while (1) {
if (!test ||
dir == snap_src->fs_info->sb->s_root ||
test == snap_src->fs_info->sb->s_root ||
break;
}
if (S_ISLNK(test->d_inode->i_mode)) {
- printk("Symlink in snapshot path, failed\n");
+ printk(KERN_INFO "Btrfs symlink in snapshot "
+ "path, failed\n");
error = -EMLINK;
btrfs_free_path(path);
goto out_drop_write;
ret = btrfs_find_root_ref(snap_src->fs_info->tree_root,
path, test_oid, parent_oid);
if (ret == 0) {
- printk("Snapshot creation failed, looping\n");
+ printk(KERN_INFO "Btrfs snapshot creation "
+ "failed, looping\n");
error = -EMLINK;
btrfs_free_path(path);
goto out_drop_write;
src_inode = src_file->f_path.dentry->d_inode;
if (src_inode->i_sb != file->f_path.dentry->d_inode->i_sb) {
- printk("btrfs: Snapshot src from another FS\n");
+ printk(KERN_INFO "btrfs: Snapshot src from "
+ "another FS\n");
ret = -EINVAL;
fput(src_file);
goto out;
((off + len) & (bs-1)))
goto out_unlock;
- printk("final src extent is %llu~%llu\n", off, len);
- printk("final dst extent is %llu~%llu\n", destoff, len);
-
/* do any pending delalloc/csum calc on src, one way or
another, and lock file content */
while (1) {
comp = btrfs_file_extent_compression(leaf, extent);
type = btrfs_file_extent_type(leaf, extent);
if (type == BTRFS_FILE_EXTENT_REG) {
- disko = btrfs_file_extent_disk_bytenr(leaf, extent);
- diskl = btrfs_file_extent_disk_num_bytes(leaf, extent);
+ disko = btrfs_file_extent_disk_bytenr(leaf,
+ extent);
+ diskl = btrfs_file_extent_disk_num_bytes(leaf,
+ extent);
datao = btrfs_file_extent_offset(leaf, extent);
- datal = btrfs_file_extent_num_bytes(leaf, extent);
+ datal = btrfs_file_extent_num_bytes(leaf,
+ extent);
} else if (type == BTRFS_FILE_EXTENT_INLINE) {
/* take upper bound, may be compressed */
datal = btrfs_file_extent_ram_bytes(leaf,
extent = btrfs_item_ptr(leaf, slot,
struct btrfs_file_extent_item);
- printk(" orig disk %llu~%llu data %llu~%llu\n",
- disko, diskl, datao, datal);
if (off > key.offset) {
datao += off - key.offset;
/* disko == 0 means it's a hole */
if (!disko)
datao = 0;
- printk(" final disk %llu~%llu data %llu~%llu\n",
- disko, diskl, datao, datal);
btrfs_set_file_extent_offset(leaf, extent,
datao);
skip = off - key.offset;
new_key.offset += skip;
}
+
if (key.offset + datal > off+len)
trim = key.offset + datal - (off+len);
- printk("len %lld skip %lld trim %lld\n",
- datal, skip, trim);
+
if (comp && (skip || trim)) {
- printk("btrfs clone_range can't split compressed inline extents yet\n");
ret = -EINVAL;
goto out;
}
goto out;
if (skip) {
- u32 start = btrfs_file_extent_calc_inline_size(0);
+ u32 start =
+ btrfs_file_extent_calc_inline_size(0);
memmove(buf+start, buf+start+skip,
datal);
}
btrfs_mark_buffer_dirty(leaf);
}
- next:
+next:
btrfs_release_path(root, path);
key.offset++;
}
* difference in almost every workload, but spinning for the right amount of
* time needs some help.
*
- * In general, we want to spin as long as the lock holder is doing btree searches,
- * and we should give up if they are in more expensive code.
+ * In general, we want to spin as long as the lock holder is doing btree
+ * searches, and we should give up if they are in more expensive code.
*/
+
int btrfs_tree_lock(struct extent_buffer *eb)
{
int i;
static struct rb_node *tree_insert(struct rb_root *root, u64 file_offset,
struct rb_node *node)
{
- struct rb_node ** p = &root->rb_node;
- struct rb_node * parent = NULL;
+ struct rb_node **p = &root->rb_node;
+ struct rb_node *parent = NULL;
struct btrfs_ordered_extent *entry;
- while(*p) {
+ while (*p) {
parent = *p;
entry = rb_entry(parent, struct btrfs_ordered_extent, rb_node);
static struct rb_node *__tree_search(struct rb_root *root, u64 file_offset,
struct rb_node **prev_ret)
{
- struct rb_node * n = root->rb_node;
+ struct rb_node *n = root->rb_node;
struct rb_node *prev = NULL;
struct rb_node *test;
struct btrfs_ordered_extent *entry;
struct btrfs_ordered_extent *prev_entry = NULL;
- while(n) {
+ while (n) {
entry = rb_entry(n, struct btrfs_ordered_extent, rb_node);
prev = n;
prev_entry = entry;
if (!prev_ret)
return NULL;
- while(prev && file_offset >= entry_end(prev_entry)) {
+ while (prev && file_offset >= entry_end(prev_entry)) {
test = rb_next(prev);
if (!test)
break;
if (prev)
prev_entry = rb_entry(prev, struct btrfs_ordered_extent,
rb_node);
- while(prev && file_offset < entry_end(prev_entry)) {
+ while (prev && file_offset < entry_end(prev_entry)) {
test = rb_prev(prev);
if (!test)
break;
node = tree_insert(&tree->tree, file_offset,
&entry->rb_node);
- if (node) {
- printk("warning dup entry from add_ordered_extent\n");
- BUG();
- }
+ BUG_ON(node);
+
set_extent_ordered(&BTRFS_I(inode)->io_tree, file_offset,
entry_end(entry) - 1, GFP_NOFS);
struct btrfs_ordered_sum *sum;
if (atomic_dec_and_test(&entry->refs)) {
- while(!list_empty(&entry->list)) {
+ while (!list_empty(&entry->list)) {
cur = entry->list.next;
sum = list_entry(cur, struct btrfs_ordered_sum, list);
list_del(&sum->list);
orig_end >> PAGE_CACHE_SHIFT);
end = orig_end;
- while(1) {
+ while (1) {
ordered = btrfs_lookup_first_ordered_extent(inode, end);
- if (!ordered) {
+ if (!ordered)
break;
- }
if (ordered->file_offset > orig_end) {
btrfs_put_ordered_extent(ordered);
break;
* if none is found
*/
struct btrfs_ordered_extent *
-btrfs_lookup_first_ordered_extent(struct inode * inode, u64 file_offset)
+btrfs_lookup_first_ordered_extent(struct inode *inode, u64 file_offset)
{
struct btrfs_ordered_inode_tree *tree;
struct rb_node *node;
* yet
*/
node = &ordered->rb_node;
- while(1) {
+ while (1) {
node = rb_prev(node);
if (!node)
break;
* between our ordered extent and the next one.
*/
test = rb_entry(node, struct btrfs_ordered_extent, rb_node);
- if (test->file_offset > entry_end(ordered)) {
+ if (test->file_offset > entry_end(ordered))
i_size_test = test->file_offset;
- }
} else {
i_size_test = i_size_read(inode);
}
{
int num_stripes = btrfs_chunk_num_stripes(eb, chunk);
int i;
- printk("\t\tchunk length %llu owner %llu type %llu num_stripes %d\n",
+ printk(KERN_INFO "\t\tchunk length %llu owner %llu type %llu "
+ "num_stripes %d\n",
(unsigned long long)btrfs_chunk_length(eb, chunk),
(unsigned long long)btrfs_chunk_owner(eb, chunk),
(unsigned long long)btrfs_chunk_type(eb, chunk),
num_stripes);
for (i = 0 ; i < num_stripes ; i++) {
- printk("\t\t\tstripe %d devid %llu offset %llu\n", i,
+ printk(KERN_INFO "\t\t\tstripe %d devid %llu offset %llu\n", i,
(unsigned long long)btrfs_stripe_devid_nr(eb, chunk, i),
(unsigned long long)btrfs_stripe_offset_nr(eb, chunk, i));
}
static void print_dev_item(struct extent_buffer *eb,
struct btrfs_dev_item *dev_item)
{
- printk("\t\tdev item devid %llu "
- "total_bytes %llu bytes used %Lu\n",
+ printk(KERN_INFO "\t\tdev item devid %llu "
+ "total_bytes %llu bytes used %llu\n",
(unsigned long long)btrfs_device_id(eb, dev_item),
(unsigned long long)btrfs_device_total_bytes(eb, dev_item),
(unsigned long long)btrfs_device_bytes_used(eb, dev_item));
struct btrfs_dev_extent *dev_extent;
u32 type;
- printk("leaf %llu total ptrs %d free space %d\n",
+ printk(KERN_INFO "leaf %llu total ptrs %d free space %d\n",
(unsigned long long)btrfs_header_bytenr(l), nr,
btrfs_leaf_free_space(root, l));
for (i = 0 ; i < nr ; i++) {
item = btrfs_item_nr(l, i);
btrfs_item_key_to_cpu(l, &key, i);
type = btrfs_key_type(&key);
- printk("\titem %d key (%llu %x %llu) itemoff %d itemsize %d\n",
+ printk(KERN_INFO "\titem %d key (%llu %x %llu) itemoff %d "
+ "itemsize %d\n",
i,
(unsigned long long)key.objectid, type,
(unsigned long long)key.offset,
switch (type) {
case BTRFS_INODE_ITEM_KEY:
ii = btrfs_item_ptr(l, i, struct btrfs_inode_item);
- printk("\t\tinode generation %llu size %llu mode %o\n",
- (unsigned long long)btrfs_inode_generation(l, ii),
+ printk(KERN_INFO "\t\tinode generation %llu size %llu "
+ "mode %o\n",
+ (unsigned long long)
+ btrfs_inode_generation(l, ii),
(unsigned long long)btrfs_inode_size(l, ii),
btrfs_inode_mode(l, ii));
break;
case BTRFS_DIR_ITEM_KEY:
di = btrfs_item_ptr(l, i, struct btrfs_dir_item);
btrfs_dir_item_key_to_cpu(l, di, &found_key);
- printk("\t\tdir oid %llu type %u\n",
+ printk(KERN_INFO "\t\tdir oid %llu type %u\n",
(unsigned long long)found_key.objectid,
btrfs_dir_type(l, di));
break;
case BTRFS_ROOT_ITEM_KEY:
ri = btrfs_item_ptr(l, i, struct btrfs_root_item);
- printk("\t\troot data bytenr %llu refs %u\n",
- (unsigned long long)btrfs_disk_root_bytenr(l, ri),
+ printk(KERN_INFO "\t\troot data bytenr %llu refs %u\n",
+ (unsigned long long)
+ btrfs_disk_root_bytenr(l, ri),
btrfs_disk_root_refs(l, ri));
break;
case BTRFS_EXTENT_ITEM_KEY:
ei = btrfs_item_ptr(l, i, struct btrfs_extent_item);
- printk("\t\textent data refs %u\n",
+ printk(KERN_INFO "\t\textent data refs %u\n",
btrfs_extent_refs(l, ei));
break;
case BTRFS_EXTENT_REF_KEY:
ref = btrfs_item_ptr(l, i, struct btrfs_extent_ref);
- printk("\t\textent back ref root %llu gen %llu "
- "owner %llu num_refs %lu\n",
+ printk(KERN_INFO "\t\textent back ref root %llu "
+ "gen %llu owner %llu num_refs %lu\n",
(unsigned long long)btrfs_ref_root(l, ref),
(unsigned long long)btrfs_ref_generation(l, ref),
(unsigned long long)btrfs_ref_objectid(l, ref),
struct btrfs_file_extent_item);
if (btrfs_file_extent_type(l, fi) ==
BTRFS_FILE_EXTENT_INLINE) {
- printk("\t\tinline extent data size %u\n",
- btrfs_file_extent_inline_len(l, fi));
+ printk(KERN_INFO "\t\tinline extent data "
+ "size %u\n",
+ btrfs_file_extent_inline_len(l, fi));
break;
}
- printk("\t\textent data disk bytenr %llu nr %llu\n",
- (unsigned long long)btrfs_file_extent_disk_bytenr(l, fi),
- (unsigned long long)btrfs_file_extent_disk_num_bytes(l, fi));
- printk("\t\textent data offset %llu nr %llu ram %llu\n",
- (unsigned long long)btrfs_file_extent_offset(l, fi),
- (unsigned long long)btrfs_file_extent_num_bytes(l, fi),
- (unsigned long long)btrfs_file_extent_ram_bytes(l, fi));
+ printk(KERN_INFO "\t\textent data disk bytenr %llu "
+ "nr %llu\n",
+ (unsigned long long)
+ btrfs_file_extent_disk_bytenr(l, fi),
+ (unsigned long long)
+ btrfs_file_extent_disk_num_bytes(l, fi));
+ printk(KERN_INFO "\t\textent data offset %llu "
+ "nr %llu ram %llu\n",
+ (unsigned long long)
+ btrfs_file_extent_offset(l, fi),
+ (unsigned long long)
+ btrfs_file_extent_num_bytes(l, fi),
+ (unsigned long long)
+ btrfs_file_extent_ram_bytes(l, fi));
break;
case BTRFS_BLOCK_GROUP_ITEM_KEY:
bi = btrfs_item_ptr(l, i,
struct btrfs_block_group_item);
- printk("\t\tblock group used %llu\n",
- (unsigned long long)btrfs_disk_block_group_used(l, bi));
+ printk(KERN_INFO "\t\tblock group used %llu\n",
+ (unsigned long long)
+ btrfs_disk_block_group_used(l, bi));
break;
case BTRFS_CHUNK_ITEM_KEY:
- print_chunk(l, btrfs_item_ptr(l, i, struct btrfs_chunk));
+ print_chunk(l, btrfs_item_ptr(l, i,
+ struct btrfs_chunk));
break;
case BTRFS_DEV_ITEM_KEY:
print_dev_item(l, btrfs_item_ptr(l, i,
case BTRFS_DEV_EXTENT_KEY:
dev_extent = btrfs_item_ptr(l, i,
struct btrfs_dev_extent);
- printk("\t\tdev extent chunk_tree %llu\n"
+ printk(KERN_INFO "\t\tdev extent chunk_tree %llu\n"
"\t\tchunk objectid %llu chunk offset %llu "
"length %llu\n",
(unsigned long long)
btrfs_print_leaf(root, c);
return;
}
- printk("node %llu level %d total ptrs %d free spc %u\n",
+ printk(KERN_INFO "node %llu level %d total ptrs %d free spc %u\n",
(unsigned long long)btrfs_header_bytenr(c),
btrfs_header_level(c), nr,
(u32)BTRFS_NODEPTRS_PER_BLOCK(root) - nr);
for (i = 0; i < nr; i++) {
btrfs_node_key_to_cpu(c, &key, i);
- printk("\tkey %d (%llu %u %llu) block %llu\n",
+ printk(KERN_INFO "\tkey %d (%llu %u %llu) block %llu\n",
i,
(unsigned long long)key.objectid,
key.type,
static struct rb_node *tree_insert(struct rb_root *root, u64 bytenr,
struct rb_node *node)
{
- struct rb_node ** p = &root->rb_node;
- struct rb_node * parent = NULL;
+ struct rb_node **p = &root->rb_node;
+ struct rb_node *parent = NULL;
struct btrfs_leaf_ref *entry;
- while(*p) {
+ while (*p) {
parent = *p;
entry = rb_entry(parent, struct btrfs_leaf_ref, rb_node);
static struct rb_node *tree_search(struct rb_root *root, u64 bytenr)
{
- struct rb_node * n = root->rb_node;
+ struct rb_node *n = root->rb_node;
struct btrfs_leaf_ref *entry;
- while(n) {
+ while (n) {
entry = rb_entry(n, struct btrfs_leaf_ref, rb_node);
WARN_ON(!entry->in_tree);
return 0;
spin_lock(&tree->lock);
- while(!list_empty(&tree->list)) {
+ while (!list_empty(&tree->list)) {
ref = list_entry(tree->list.next, struct btrfs_leaf_ref, list);
BUG_ON(ref->tree != tree);
if (ref->root_gen > max_root_gen)
if (ret != 0) {
btrfs_print_leaf(root, path->nodes[0]);
- printk("unable to update root key %Lu %u %Lu\n",
- key->objectid, key->type, key->offset);
+ printk(KERN_CRIT "unable to update root key %llu %u %llu\n",
+ (unsigned long long)key->objectid, key->type,
+ (unsigned long long)key->offset);
BUG_ON(1);
}
/*
* at mount time we want to find all the old transaction snapshots that were in
- * the process of being deleted if we crashed. This is any root item with an offset
- * lower than the latest root. They need to be queued for deletion to finish
- * what was happening when we crashed.
+ * the process of being deleted if we crashed. This is any root item with an
+ * offset lower than the latest root. They need to be queued for deletion to
+ * finish what was happening when we crashed.
*/
int btrfs_find_dead_roots(struct btrfs_root *root, u64 objectid,
struct btrfs_root *latest)
ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
if (ret < 0)
goto err;
- while(1) {
+ while (1) {
leaf = path->nodes[0];
nritems = btrfs_header_nritems(leaf);
slot = path->slots[0];
ret = btrfs_search_slot(trans, root, key, path, -1, 1);
if (ret < 0)
goto out;
- if (ret) {
-btrfs_print_leaf(root, path->nodes[0]);
-printk("failed to del %Lu %u %Lu\n", key->objectid, key->type, key->offset);
- }
BUG_ON(ret != 0);
leaf = path->nodes[0];
ri = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_root_item);
unsigned long map_len; \
u##bits res; \
err = map_extent_buffer(eb, offset, \
- sizeof(((type *)0)->member), \
+ sizeof(((type *)0)->member), \
&map_token, &kaddr, \
&map_start, &map_len, KM_USER1); \
if (err) { \
unsigned long map_start; \
unsigned long map_len; \
err = map_extent_buffer(eb, offset, \
- sizeof(((type *)0)->member), \
+ sizeof(((type *)0)->member), \
&map_token, &kaddr, \
&map_start, &map_len, KM_USER1); \
if (err) { \
static struct super_operations btrfs_super_ops;
-static void btrfs_put_super (struct super_block * sb)
+static void btrfs_put_super(struct super_block *sb)
{
struct btrfs_root *root = btrfs_sb(sb);
int ret;
ret = close_ctree(root);
- if (ret) {
- printk("close ctree returns %d\n", ret);
- }
-#if 0
- btrfs_sysfs_del_super(root->fs_info);
-#endif
sb->s_fs_info = NULL;
}
return error;
}
-static int btrfs_fill_super(struct super_block * sb,
+static int btrfs_fill_super(struct super_block *sb,
struct btrfs_fs_devices *fs_devices,
- void * data, int silent)
+ void *data, int silent)
{
- struct inode * inode;
- struct dentry * root_dentry;
+ struct inode *inode;
+ struct dentry *root_dentry;
struct btrfs_super_block *disk_super;
struct btrfs_root *tree_root;
struct btrfs_inode *bi;
root = dget(s->s_root);
else {
mutex_lock(&s->s_root->d_inode->i_mutex);
- root = lookup_one_len(subvol_name, s->s_root, strlen(subvol_name));
+ root = lookup_one_len(subvol_name, s->s_root,
+ strlen(subvol_name));
mutex_unlock(&s->s_root->d_inode->i_mutex);
+
if (IS_ERR(root)) {
up_write(&s->s_umount);
deactivate_super(s);
buf->f_bavail = buf->f_bfree;
buf->f_bsize = dentry->d_sb->s_blocksize;
buf->f_type = BTRFS_SUPER_MAGIC;
+
/* We treat it as constant endianness (it doesn't matter _which_)
- because we want the fsid to come out the same whether mounted
+ because we want the fsid to come out the same whether mounted
on a big-endian or little-endian host */
buf->f_fsid.val[0] = be32_to_cpu(fsid[0]) ^ be32_to_cpu(fsid[2]);
buf->f_fsid.val[1] = be32_to_cpu(fsid[1]) ^ be32_to_cpu(fsid[3]);
static void btrfs_interface_exit(void)
{
if (misc_deregister(&btrfs_misc) < 0)
- printk("misc_deregister failed for control device");
+ printk(KERN_INFO "misc_deregister failed for control device");
}
static int __init init_btrfs_fs(void)
};
#define ROOT_ATTR(name, mode, show, store) \
-static struct btrfs_root_attr btrfs_root_attr_##name = __ATTR(name, mode, show, store)
+static struct btrfs_root_attr btrfs_root_attr_##name = __ATTR(name, mode, \
+ show, store)
ROOT_ATTR(blocks_used, 0444, root_blocks_used_show, NULL);
ROOT_ATTR(block_limit, 0644, root_block_limit_show, NULL);
};
#define SUPER_ATTR(name, mode, show, store) \
-static struct btrfs_super_attr btrfs_super_attr_##name = __ATTR(name, mode, show, store)
+static struct btrfs_super_attr btrfs_super_attr_##name = __ATTR(name, mode, \
+ show, store)
SUPER_ATTR(blocks_used, 0444, super_blocks_used_show, NULL);
SUPER_ATTR(total_blocks, 0444, super_total_blocks_show, NULL);
#include "ref-cache.h"
#include "tree-log.h"
-extern struct kmem_cache *btrfs_trans_handle_cachep;
-extern struct kmem_cache *btrfs_transaction_cachep;
-
#define BTRFS_ROOT_TRANS_TAG 0
static noinline void put_transaction(struct btrfs_transaction *transaction)
}
/*
- * this does all the record keeping required to make sure that a
- * reference counted root is properly recorded in a given transaction.
- * This is required to make sure the old root from before we joined the transaction
- * is deleted when the transaction commits
+ * this does all the record keeping required to make sure that a reference
+ * counted root is properly recorded in a given transaction. This is required
+ * to make sure the old root from before we joined the transaction is deleted
+ * when the transaction commits
*/
noinline int btrfs_record_root_in_trans(struct btrfs_root *root)
{
if (cur_trans && cur_trans->blocked) {
DEFINE_WAIT(wait);
cur_trans->use_count++;
- while(1) {
+ while (1) {
prepare_to_wait(&root->fs_info->transaction_wait, &wait,
TASK_UNINTERRUPTIBLE);
if (cur_trans->blocked) {
{
DEFINE_WAIT(wait);
mutex_lock(&root->fs_info->trans_mutex);
- while(!commit->commit_done) {
+ while (!commit->commit_done) {
prepare_to_wait(&commit->commit_wait, &wait,
TASK_UNINTERRUPTIBLE);
if (commit->commit_done)
}
/*
- * rate limit against the drop_snapshot code. This helps to slow down new operations
- * if the drop_snapshot code isn't able to keep up.
+ * rate limit against the drop_snapshot code. This helps to slow down new
+ * operations if the drop_snapshot code isn't able to keep up.
*/
static void throttle_on_drops(struct btrfs_root *root)
{
u64 end;
unsigned long index;
- while(1) {
+ while (1) {
ret = find_first_extent_bit(dirty_pages, start, &start, &end,
EXTENT_DIRTY);
if (ret)
break;
- while(start <= end) {
+ while (start <= end) {
cond_resched();
index = start >> PAGE_CACHE_SHIFT;
page_cache_release(page);
}
}
- while(1) {
+ while (1) {
ret = find_first_extent_bit(dirty_pages, 0, &start, &end,
EXTENT_DIRTY);
if (ret)
break;
clear_extent_dirty(dirty_pages, start, end, GFP_NOFS);
- while(start <= end) {
+ while (start <= end) {
index = start >> PAGE_CACHE_SHIFT;
start = (u64)(index + 1) << PAGE_CACHE_SHIFT;
page = find_get_page(btree_inode->i_mapping, index);
btrfs_write_dirty_block_groups(trans, root);
btrfs_extent_post_op(trans, root);
- while(1) {
+ while (1) {
old_root_bytenr = btrfs_root_bytenr(&root->root_item);
if (old_root_bytenr == root->node->start)
break;
btrfs_extent_post_op(trans, fs_info->tree_root);
- while(!list_empty(&fs_info->dirty_cowonly_roots)) {
+ while (!list_empty(&fs_info->dirty_cowonly_roots)) {
next = fs_info->dirty_cowonly_roots.next;
list_del_init(next);
root = list_entry(next, struct btrfs_root, dirty_list);
int err = 0;
u32 refs;
- while(1) {
+ while (1) {
ret = radix_tree_gang_lookup_tag(radix, (void **)gang, 0,
ARRAY_SIZE(gang),
BTRFS_ROOT_TRANS_TAG);
int ret = 0;
int err;
- while(!list_empty(list)) {
+ while (!list_empty(list)) {
struct btrfs_root *root;
dirty = list_entry(list->prev, struct btrfs_dirty_root, list);
root = dirty->latest_root;
atomic_inc(&root->fs_info->throttles);
- while(1) {
+ while (1) {
trans = btrfs_start_transaction(tree_root, 1);
mutex_lock(&root->fs_info->drop_mutex);
ret = btrfs_drop_snapshot(trans, dirty->root);
- if (ret != -EAGAIN) {
+ if (ret != -EAGAIN)
break;
- }
mutex_unlock(&root->fs_info->drop_mutex);
err = btrfs_update_root(trans,
struct list_head *head = &trans->transaction->pending_snapshots;
int ret;
- while(!list_empty(head)) {
+ while (!list_empty(head)) {
pending = list_entry(head->next,
struct btrfs_pending_snapshot, list);
ret = finish_pending_snapshot(fs_info, pending);
kmem_cache_free(btrfs_trans_handle_cachep, trans);
- if (root->fs_info->closing) {
+ if (root->fs_info->closing)
drop_dirty_roots(root->fs_info->tree_root, &dirty_fs_roots);
- }
return ret;
}
trans->block_group = BTRFS_I(inode)->block_group;
}
-static inline void btrfs_update_inode_block_group(struct
- btrfs_trans_handle *trans,
- struct inode *inode)
+static inline void btrfs_update_inode_block_group(
+ struct btrfs_trans_handle *trans,
+ struct inode *inode)
{
BTRFS_I(inode)->block_group = trans->block_group;
}
#include "transaction.h"
#include "locking.h"
-/* defrag all the leaves in a given btree. If cache_only == 1, don't read things
- * from disk, otherwise read all the leaves and try to get key order to
+/* defrag all the leaves in a given btree. If cache_only == 1, don't read
+ * things from disk, otherwise read all the leaves and try to get key order to
* better reflect disk order
*/
+
int btrfs_defrag_leaves(struct btrfs_trans_handle *trans,
struct btrfs_root *root, int cache_only)
{
level = btrfs_header_level(root->node);
orig_level = level;
- if (level == 0) {
+ if (level == 0)
goto out;
- }
+
if (root->defrag_progress.objectid == 0) {
struct extent_buffer *root_node;
u32 nritems;
*/
ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
ptr_end = ptr + btrfs_item_size_nr(leaf, path->slots[0]);
- while(ptr < ptr_end) {
+ while (ptr < ptr_end) {
victim_ref = (struct btrfs_inode_ref *)ptr;
victim_name_len = btrfs_inode_ref_name_len(leaf,
victim_ref);
file_bytes = (item_size / csum_size) * root->sectorsize;
sums = kzalloc(btrfs_ordered_sum_size(root, file_bytes), GFP_NOFS);
- if (!sums) {
+ if (!sums)
return -ENOMEM;
- }
INIT_LIST_HEAD(&sums->list);
sums->len = file_bytes;
sector_sum = sums->sums;
cur_offset = key->offset;
ptr = btrfs_item_ptr_offset(eb, slot);
- while(item_size > 0) {
+ while (item_size > 0) {
sector_sum->bytenr = cur_offset;
read_extent_buffer(eb, §or_sum->sum, ptr, csum_size);
sector_sum++;
path = btrfs_alloc_path();
- while(1) {
+ while (1) {
ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
if (ret < 0)
break;
ptr = btrfs_item_ptr_offset(path->nodes[0], path->slots[0]);
ptr_end = ptr + btrfs_item_size_nr(path->nodes[0],
path->slots[0]);
- while(ptr < ptr_end) {
+ while (ptr < ptr_end) {
struct btrfs_inode_ref *ref;
ref = (struct btrfs_inode_ref *)ptr;
key.objectid = BTRFS_TREE_LOG_FIXUP_OBJECTID;
key.type = BTRFS_ORPHAN_ITEM_KEY;
key.offset = (u64)-1;
- while(1) {
+ while (1) {
ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
if (ret < 0)
break;
if (key->type == BTRFS_DIR_ITEM_KEY) {
dst_di = btrfs_lookup_dir_item(trans, root, path, key->objectid,
name, name_len, 1);
- }
- else if (key->type == BTRFS_DIR_INDEX_KEY) {
+ } else if (key->type == BTRFS_DIR_INDEX_KEY) {
dst_di = btrfs_lookup_dir_index_item(trans, root, path,
key->objectid,
key->offset, name,
ptr = btrfs_item_ptr_offset(eb, slot);
ptr_end = ptr + item_size;
- while(ptr < ptr_end) {
+ while (ptr < ptr_end) {
di = (struct btrfs_dir_item *)ptr;
name_len = btrfs_dir_name_len(eb, di);
ret = replay_one_name(trans, root, path, eb, di, key);
item_size = btrfs_item_size_nr(eb, slot);
ptr = btrfs_item_ptr_offset(eb, slot);
ptr_end = ptr + item_size;
- while(ptr < ptr_end) {
+ while (ptr < ptr_end) {
di = (struct btrfs_dir_item *)ptr;
name_len = btrfs_dir_name_len(eb, di);
name = kmalloc(name_len, GFP_NOFS);
again:
range_start = 0;
range_end = 0;
- while(1) {
+ while (1) {
ret = find_dir_range(log, path, dirid, key_type,
&range_start, &range_end);
if (ret != 0)
break;
dir_key.offset = range_start;
- while(1) {
+ while (1) {
int nritems;
ret = btrfs_search_slot(NULL, root, &dir_key, path,
0, 0);
return 0;
}
-static int noinline walk_down_log_tree(struct btrfs_trans_handle *trans,
+static noinline int walk_down_log_tree(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path, int *level,
struct walk_control *wc)
WARN_ON(*level < 0);
WARN_ON(*level >= BTRFS_MAX_LEVEL);
- while(*level > 0) {
+ while (*level > 0) {
WARN_ON(*level < 0);
WARN_ON(*level >= BTRFS_MAX_LEVEL);
cur = path->nodes[*level];
WARN_ON(*level < 0);
WARN_ON(*level >= BTRFS_MAX_LEVEL);
- if (path->nodes[*level] == root->node) {
+ if (path->nodes[*level] == root->node)
parent = path->nodes[*level];
- } else {
+ else
parent = path->nodes[*level + 1];
- }
+
bytenr = path->nodes[*level]->start;
blocksize = btrfs_level_size(root, *level);
return 0;
}
-static int noinline walk_up_log_tree(struct btrfs_trans_handle *trans,
+static noinline int walk_up_log_tree(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path, int *level,
struct walk_control *wc)
int slot;
int ret;
- for(i = *level; i < BTRFS_MAX_LEVEL - 1 && path->nodes[i]; i++) {
+ for (i = *level; i < BTRFS_MAX_LEVEL - 1 && path->nodes[i]; i++) {
slot = path->slots[i];
if (slot < btrfs_header_nritems(path->nodes[i]) - 1) {
struct extent_buffer *node;
extent_buffer_get(log->node);
path->slots[level] = 0;
- while(1) {
+ while (1) {
wret = walk_down_log_tree(trans, log, path, &level, wc);
if (wret > 0)
break;
schedule();
finish_wait(&log->fs_info->tree_log_wait, &wait);
mutex_lock(&log->fs_info->tree_log_mutex);
- } while(transid == log->fs_info->tree_log_transid &&
+ } while (transid == log->fs_info->tree_log_transid &&
atomic_read(&log->fs_info->tree_log_commit));
return 0;
}
}
atomic_set(&log->fs_info->tree_log_commit, 1);
- while(1) {
+ while (1) {
batch = log->fs_info->tree_log_batch;
mutex_unlock(&log->fs_info->tree_log_mutex);
schedule_timeout_uninterruptible(1);
mutex_lock(&log->fs_info->tree_log_mutex);
- while(atomic_read(&log->fs_info->tree_log_writers)) {
+ while (atomic_read(&log->fs_info->tree_log_writers)) {
DEFINE_WAIT(wait);
prepare_to_wait(&log->fs_info->tree_log_wait, &wait,
TASK_UNINTERRUPTIBLE);
ret = walk_log_tree(trans, log, &wc);
BUG_ON(ret);
- while(1) {
+ while (1) {
ret = find_first_extent_bit(&log->dirty_log_pages,
0, &start, &end, EXTENT_DIRTY);
if (ret)
struct btrfs_key tmp;
btrfs_item_key_to_cpu(path->nodes[0], &tmp,
path->slots[0]);
- if (key_type == tmp.type) {
+ if (key_type == tmp.type)
first_offset = max(min_offset, tmp.offset) + 1;
- }
}
goto done;
}
* we have a block from this transaction, log every item in it
* from our directory
*/
- while(1) {
+ while (1) {
struct btrfs_key tmp;
src = path->nodes[0];
nritems = btrfs_header_nritems(src);
again:
min_key = 0;
max_key = 0;
- while(1) {
+ while (1) {
ret = log_dir_items(trans, root, inode, path,
dst_path, key_type, min_key,
&max_key);
key.type = max_key_type;
key.offset = (u64)-1;
- while(1) {
+ while (1) {
ret = btrfs_search_slot(trans, log, &key, path, -1, 1);
if (ret != 1)
list_add_tail(&sums->list, list);
path = btrfs_alloc_path();
- while(disk_bytenr < end) {
+ while (disk_bytenr < end) {
if (!item || disk_bytenr < item_start_offset ||
disk_bytenr >= item_last_offset) {
struct btrfs_key found_key;
if (ret == -ENOENT || ret == -EFBIG)
ret = 0;
sum = 0;
- printk("log no csum found for byte %llu\n",
+ printk(KERN_INFO "log no csum found for "
+ "byte %llu\n",
(unsigned long long)disk_bytenr);
item = NULL;
btrfs_release_path(root, path);
* we have to do this after the loop above to avoid changing the
* log tree while trying to change the log tree.
*/
- while(!list_empty(&ordered_sums)) {
+ while (!list_empty(&ordered_sums)) {
struct btrfs_ordered_sum *sums = list_entry(ordered_sums.next,
struct btrfs_ordered_sum,
list);
BUG_ON(ret);
path->keep_locks = 1;
- while(1) {
+ while (1) {
ins_nr = 0;
ret = btrfs_search_forward(root, &min_key, &max_key,
path, 0, trans->transid);
start_log_trans(trans, root);
sb = dentry->d_inode->i_sb;
- while(1) {
+ while (1) {
ret = __btrfs_log_inode(trans, root, dentry->d_inode,
inode_only);
BUG_ON(ret);
key.offset = (u64)-1;
btrfs_set_key_type(&key, BTRFS_ROOT_ITEM_KEY);
- while(1) {
+ while (1) {
ret = btrfs_search_slot(NULL, log_root_tree, &key, path, 0, 0);
if (ret < 0)
break;
* the list if the block device is congested. This way, multiple devices
* can make progress from a single worker thread.
*/
-static int noinline run_scheduled_bios(struct btrfs_device *device)
+static noinline int run_scheduled_bios(struct btrfs_device *device)
{
struct bio *pending;
struct backing_dev_info *bdi;
}
spin_unlock(&device->io_lock);
- while(pending) {
+ while (pending) {
cur = pending;
pending = pending->bi_next;
cur->bi_next = NULL;
bdev = open_bdev_exclusive(device->name, flags, holder);
if (IS_ERR(bdev)) {
- printk("open %s failed\n", device->name);
+ printk(KERN_INFO "open %s failed\n", device->name);
goto error;
}
set_blocksize(bdev, 4096);
devid = le64_to_cpu(disk_super->dev_item.devid);
transid = btrfs_super_generation(disk_super);
if (disk_super->label[0])
- printk("device label %s ", disk_super->label);
+ printk(KERN_INFO "device label %s ", disk_super->label);
else {
/* FIXME, make a readl uuid parser */
- printk("device fsid %llx-%llx ",
+ printk(KERN_INFO "device fsid %llx-%llx ",
*(unsigned long long *)disk_super->fsid,
*(unsigned long long *)(disk_super->fsid + 8));
}
- printk("devid %Lu transid %Lu %s\n", devid, transid, path);
+ printk(KERN_INFO "devid %llu transid %llu %s\n",
+ (unsigned long long)devid, (unsigned long long)transid, path);
ret = device_list_add(path, disk_super, devid, fs_devices_ret);
brelse(bh);
goto check_pending;
}
}
- if (btrfs_key_type(&key) != BTRFS_DEV_EXTENT_KEY) {
+ if (btrfs_key_type(&key) != BTRFS_DEV_EXTENT_KEY)
goto next;
- }
start_found = 1;
dev_extent = btrfs_item_ptr(l, slot, struct btrfs_dev_extent);
if ((all_avail & BTRFS_BLOCK_GROUP_RAID10) &&
root->fs_info->fs_devices->rw_devices <= 4) {
- printk("btrfs: unable to go below four devices on raid10\n");
+ printk(KERN_ERR "btrfs: unable to go below four devices "
+ "on raid10\n");
ret = -EINVAL;
goto out;
}
if ((all_avail & BTRFS_BLOCK_GROUP_RAID1) &&
root->fs_info->fs_devices->rw_devices <= 2) {
- printk("btrfs: unable to go below two devices on raid1\n");
+ printk(KERN_ERR "btrfs: unable to go below two "
+ "devices on raid1\n");
ret = -EINVAL;
goto out;
}
bh = NULL;
disk_super = NULL;
if (!device) {
- printk("btrfs: no missing devices found to remove\n");
+ printk(KERN_ERR "btrfs: no missing devices found to "
+ "remove\n");
goto out;
}
} else {
}
if (device->writeable && root->fs_info->fs_devices->rw_devices == 1) {
- printk("btrfs: unable to remove the only writeable device\n");
+ printk(KERN_ERR "btrfs: unable to remove the only writeable "
+ "device\n");
ret = -EINVAL;
goto error_brelse;
}
return -EINVAL;
bdev = open_bdev_exclusive(device_path, 0, root->fs_info->bdev_holder);
- if (!bdev) {
+ if (!bdev)
return -EIO;
- }
if (root->fs_info->fs_devices->seeding) {
seeding_dev = 1;
goto out;
}
-static int noinline btrfs_update_device(struct btrfs_trans_handle *trans,
- struct btrfs_device *device)
+static noinline int btrfs_update_device(struct btrfs_trans_handle *trans,
+ struct btrfs_device *device)
{
int ret;
struct btrfs_path *path;
int ret;
int i;
- printk("btrfs relocating chunk %llu\n",
+ printk(KERN_INFO "btrfs relocating chunk %llu\n",
(unsigned long long)chunk_offset);
root = root->fs_info->chunk_root;
extent_root = root->fs_info->extent_root;
key.offset = (u64)-1;
key.type = BTRFS_CHUNK_ITEM_KEY;
- while(1) {
+ while (1) {
ret = btrfs_search_slot(NULL, chunk_root, &key, path, 0, 0);
if (ret < 0)
goto error;
return 0;
}
-static u64 noinline chunk_bytes_by_type(u64 type, u64 calc_size,
+static noinline u64 chunk_bytes_by_type(u64 type, u64 calc_size,
int num_stripes, int sub_stripes)
{
if (type & (BTRFS_BLOCK_GROUP_RAID1 | BTRFS_BLOCK_GROUP_DUP))
min_free += 1024 * 1024;
INIT_LIST_HEAD(&private_devs);
- while(index < num_stripes) {
+ while (index < num_stripes) {
device = list_entry(cur, struct btrfs_device, dev_alloc_list);
BUG_ON(!device->writeable);
if (device->total_bytes > device->bytes_used)
return 0;
}
-static int noinline init_first_rw_device(struct btrfs_trans_handle *trans,
+static noinline int init_first_rw_device(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_device *device)
{
{
struct extent_map *em;
- while(1) {
+ while (1) {
spin_lock(&tree->map_tree.lock);
em = lookup_extent_mapping(&tree->map_tree, 0, (u64)-1);
if (em)
int max_errors = 0;
struct btrfs_multi_bio *multi = NULL;
- if (multi_ret && !(rw & (1 << BIO_RW))) {
+ if (multi_ret && !(rw & (1 << BIO_RW)))
stripes_allocated = 1;
- }
again:
if (multi_ret) {
multi = kzalloc(btrfs_multi_bio_size(stripes_allocated),
return 0;
if (!em) {
- printk("unable to find logical %Lu len %Lu\n", logical, *length);
+ printk(KERN_CRIT "unable to find logical %llu len %llu\n",
+ (unsigned long long)logical,
+ (unsigned long long)*length);
BUG();
}
device = map->stripes[stripe_index].dev;
if (device->bdev) {
bdi = blk_get_backing_dev_info(device->bdev);
- if (bdi->unplug_io_fn) {
+ if (bdi->unplug_io_fn)
bdi->unplug_io_fn(bdi, unplug_page);
- }
}
} else {
multi->stripes[i].physical =
* This will add one bio to the pending list for a device and make sure
* the work struct is scheduled.
*/
-static int noinline schedule_bio(struct btrfs_root *root,
+static noinline int schedule_bio(struct btrfs_root *root,
struct btrfs_device *device,
int rw, struct bio *bio)
{
total_devs = multi->num_stripes;
if (map_length < length) {
- printk("mapping failed logical %Lu bio len %Lu "
- "len %Lu\n", logical, length, map_length);
+ printk(KERN_CRIT "mapping failed logical %llu bio len %llu "
+ "len %llu\n", (unsigned long long)logical,
+ (unsigned long long)length,
+ (unsigned long long)map_length);
BUG();
}
multi->end_io = first_bio->bi_end_io;
multi->orig_bio = first_bio;
atomic_set(&multi->stripes_pending, multi->num_stripes);
- while(dev_nr < total_devs) {
+ while (dev_nr < total_devs) {
if (total_devs > 1) {
if (dev_nr < total_devs - 1) {
bio = bio_clone(first_bio, GFP_NOFS);
return -EIO;
if (!device) {
- printk("warning devid %Lu missing\n", devid);
+ printk(KERN_WARNING "warning devid %llu missing\n",
+ (unsigned long long)devid);
device = add_missing_dev(root, devid, dev_uuid);
if (!device)
return -ENOMEM;
if (device->writeable)
device->fs_devices->total_rw_bytes += device->total_bytes;
ret = 0;
-#if 0
- ret = btrfs_open_device(device);
- if (ret) {
- kfree(device);
- }
-#endif
return ret;
}
key.type = 0;
again:
ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
- while(1) {
+ while (1) {
leaf = path->nodes[0];
slot = path->slots[0];
if (slot >= btrfs_header_nritems(leaf)) {
*/
static bool btrfs_is_valid_xattr(const char *name)
{
- return !strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) ||
+ return !strncmp(name, XATTR_SECURITY_PREFIX,
+ XATTR_SECURITY_PREFIX_LEN) ||
!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN) ||
!strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) ||
!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN);
static void free_workspaces(void)
{
struct workspace *workspace;
- while(!list_empty(&idle_workspace)) {
+ while (!list_empty(&idle_workspace)) {
workspace = list_entry(idle_workspace.next, struct workspace,
list);
list_del(&workspace->list);
ret = -1;
goto out;
}
- while(workspace->inf_strm.total_in < srclen) {
+ while (workspace->inf_strm.total_in < srclen) {
ret = zlib_inflate(&workspace->inf_strm, Z_NO_FLUSH);
- if (ret != Z_OK && ret != Z_STREAM_END) {
+ if (ret != Z_OK && ret != Z_STREAM_END)
break;
- }
-
/*
* buf start is the byte offset we're of the start of
* our workspace buffer
/* we didn't make progress in this inflate
* call, we're done
*/
- if (ret != Z_STREAM_END) {
+ if (ret != Z_STREAM_END)
ret = -1;
- }
break;
}
/* we haven't yet hit data corresponding to this page */
- if (total_out <= start_byte) {
+ if (total_out <= start_byte)
goto next;
- }
/*
* the start of the data we care about is offset into
current_buf_start = buf_start;
/* copy bytes from the working buffer into the pages */
- while(working_bytes > 0) {
+ while (working_bytes > 0) {
bytes = min(PAGE_CACHE_SIZE - pg_offset,
PAGE_CACHE_SIZE - buf_offset);
bytes = min(bytes, working_bytes);
ret = 0;
goto done;
}
+
page_out = bvec[page_out_index].bv_page;
pg_offset = 0;
page_bytes_left = PAGE_CACHE_SIZE;
* make sure our new page is covered by this
* working buffer
*/
- if (total_out <= start_byte) {
+ if (total_out <= start_byte)
goto next;
- }
/* the next page in the biovec might not
* be adjacent to the last page, but it
PAGE_CACHE_SIZE);
}
}
- if (ret != Z_STREAM_END) {
+ if (ret != Z_STREAM_END)
ret = -1;
- } else {
+ else
ret = 0;
- }
done:
zlib_inflateEnd(&workspace->inf_strm);
if (data_in)
goto out;
}
- while(bytes_left > 0) {
+ while (bytes_left > 0) {
unsigned long buf_start;
unsigned long buf_offset;
unsigned long bytes;
unsigned long pg_offset = 0;
ret = zlib_inflate(&workspace->inf_strm, Z_NO_FLUSH);
- if (ret != Z_OK && ret != Z_STREAM_END) {
+ if (ret != Z_OK && ret != Z_STREAM_END)
break;
- }
buf_start = total_out;
total_out = workspace->inf_strm.total_out;
break;
}
- if (total_out <= start_byte) {
+ if (total_out <= start_byte)
goto next;
- }
- if (total_out > start_byte && buf_start < start_byte) {
+ if (total_out > start_byte && buf_start < start_byte)
buf_offset = start_byte - buf_start;
- } else {
+ else
buf_offset = 0;
- }
bytes = min(PAGE_CACHE_SIZE - pg_offset,
PAGE_CACHE_SIZE - buf_offset);
workspace->inf_strm.next_out = workspace->buf;
workspace->inf_strm.avail_out = PAGE_CACHE_SIZE;
}
- if (ret != Z_STREAM_END && bytes_left != 0) {
+
+ if (ret != Z_STREAM_END && bytes_left != 0)
ret = -1;
- } else {
+ else
ret = 0;
- }
+
zlib_inflateEnd(&workspace->inf_strm);
out:
free_workspace(workspace);