mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Btrfs: Fix checkpatch.pl warnings
There were many, most are fixed now. struct-funcs.c generates some warnings but these are bogus. Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
+2
-3
@@ -161,8 +161,7 @@ static int btrfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
|
||||
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);
|
||||
@@ -213,7 +212,7 @@ static int btrfs_xattr_acl_default_get(struct inode *inode, const char *name,
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ static noinline int run_ordered_completions(struct btrfs_workers *workers,
|
||||
|
||||
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);
|
||||
|
||||
@@ -143,7 +143,7 @@ static int worker_loop(void *arg)
|
||||
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);
|
||||
@@ -188,7 +188,7 @@ int btrfs_stop_workers(struct btrfs_workers *workers)
|
||||
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);
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
#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;
|
||||
@@ -21,7 +21,7 @@ static inline struct dentry *d_obtain_alias(struct inode *inode)
|
||||
}
|
||||
#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)
|
||||
|
||||
@@ -137,7 +137,8 @@ static int check_compressed_csum(struct inode *inode,
|
||||
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);
|
||||
@@ -217,7 +218,7 @@ csum_failed:
|
||||
* 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++;
|
||||
@@ -246,7 +247,7 @@ static noinline int end_compressed_writeback(struct inode *inode, u64 start,
|
||||
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);
|
||||
@@ -463,7 +464,7 @@ static noinline int add_ra_bio_pages(struct inode *inode,
|
||||
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)
|
||||
@@ -697,9 +698,8 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
|
||||
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);
|
||||
|
||||
+78
-139
File diff suppressed because it is too large
Load Diff
+15
-15
@@ -126,7 +126,6 @@ struct btrfs_ordered_sum;
|
||||
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
|
||||
@@ -283,8 +282,8 @@ struct btrfs_header {
|
||||
} __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) - \
|
||||
@@ -1512,7 +1511,7 @@ static inline struct btrfs_header *btrfs_buffer_header(struct extent_buffer *eb)
|
||||
|
||||
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 */
|
||||
@@ -1597,8 +1596,8 @@ static inline unsigned long btrfs_leaf_data(struct extent_buffer *l)
|
||||
/* 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);
|
||||
@@ -1660,20 +1659,20 @@ static inline int btrfs_set_root_name(struct btrfs_root *root,
|
||||
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;
|
||||
@@ -1707,9 +1706,9 @@ int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans,
|
||||
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,
|
||||
@@ -1908,8 +1907,9 @@ int btrfs_search_root(struct btrfs_root *root, u64 search_start,
|
||||
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,
|
||||
|
||||
+1
-1
@@ -333,7 +333,7 @@ struct btrfs_dir_item *btrfs_match_dir_item_name(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);
|
||||
|
||||
+63
-124
@@ -23,7 +23,7 @@
|
||||
#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>
|
||||
@@ -40,19 +40,6 @@
|
||||
#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);
|
||||
|
||||
@@ -128,23 +115,13 @@ static struct extent_map *btree_get_extent(struct inode *inode,
|
||||
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) {
|
||||
@@ -191,15 +168,12 @@ static int csum_tree_block(struct btrfs_root *root, struct extent_buffer *buf,
|
||||
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);
|
||||
@@ -218,15 +192,14 @@ static int csum_tree_block(struct btrfs_root *root, struct extent_buffer *buf,
|
||||
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)
|
||||
@@ -293,7 +266,7 @@ static int btree_read_extent_buffer_pages(struct btrfs_root *root,
|
||||
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)
|
||||
@@ -307,9 +280,10 @@ printk("read extent buffer pages failed with ret %d mirror no %d\n", ret, mirror
|
||||
}
|
||||
|
||||
/*
|
||||
* 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;
|
||||
@@ -327,28 +301,22 @@ static int csum_dirty_buffer(struct btrfs_root *root, struct page *page)
|
||||
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;
|
||||
}
|
||||
@@ -396,29 +364,30 @@ static int btree_readpage_end_io_hook(struct page *page, u64 start, u64 end,
|
||||
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;
|
||||
}
|
||||
@@ -578,7 +547,7 @@ int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode,
|
||||
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));
|
||||
@@ -594,7 +563,7 @@ static int btree_csum_one_bio(struct bio *bio)
|
||||
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++;
|
||||
@@ -680,9 +649,8 @@ static int btree_writepages(struct address_space *mapping,
|
||||
|
||||
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);
|
||||
}
|
||||
@@ -701,15 +669,14 @@ static int btree_releasepage(struct page *page, gfp_t gfp_flags)
|
||||
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) {
|
||||
@@ -728,8 +695,8 @@ static void btree_invalidatepage(struct page *page, unsigned long offset)
|
||||
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);
|
||||
@@ -813,7 +780,7 @@ int btrfs_write_tree_block(struct extent_buffer *buf)
|
||||
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,
|
||||
@@ -832,11 +799,10 @@ 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;
|
||||
|
||||
}
|
||||
@@ -944,7 +910,7 @@ int btrfs_free_log_root_tree(struct btrfs_trans_handle *trans,
|
||||
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)
|
||||
@@ -1165,24 +1131,6 @@ struct btrfs_root *btrfs_read_fs_root(struct btrfs_fs_info *fs_info,
|
||||
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)
|
||||
{
|
||||
@@ -1226,9 +1174,8 @@ static void __unplug_io_fn(struct backing_dev_info *bdi, struct page *page)
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1420,8 +1367,9 @@ static int transaction_kthread(void *arg)
|
||||
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);
|
||||
@@ -1592,14 +1540,6 @@ struct btrfs_root *open_ctree(struct super_block *sb,
|
||||
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);
|
||||
|
||||
@@ -1720,7 +1660,7 @@ struct btrfs_root *open_ctree(struct super_block *sb,
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1728,8 +1668,8 @@ struct btrfs_root *open_ctree(struct super_block *sb,
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1746,14 +1686,15 @@ struct btrfs_root *open_ctree(struct super_block *sb,
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1812,7 +1753,8 @@ struct btrfs_root *open_ctree(struct super_block *sb,
|
||||
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;
|
||||
}
|
||||
@@ -2097,7 +2039,8 @@ int write_all_supers(struct btrfs_root *root, int max_mirrors)
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -2114,7 +2057,8 @@ int write_all_supers(struct btrfs_root *root, int max_mirrors)
|
||||
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;
|
||||
@@ -2137,16 +2081,11 @@ int btrfs_free_fs_root(struct btrfs_fs_info *fs_info, struct btrfs_root *root)
|
||||
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;
|
||||
}
|
||||
@@ -2157,7 +2096,7 @@ static int del_fs_roots(struct btrfs_fs_info *fs_info)
|
||||
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));
|
||||
@@ -2228,18 +2167,17 @@ int close_ctree(struct btrfs_root *root)
|
||||
|
||||
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)
|
||||
@@ -2248,13 +2186,13 @@ int close_ctree(struct btrfs_root *root)
|
||||
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);
|
||||
@@ -2273,7 +2211,7 @@ int close_ctree(struct btrfs_root *root)
|
||||
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);
|
||||
@@ -2324,9 +2262,11 @@ void btrfs_mark_buffer_dirty(struct extent_buffer *buf)
|
||||
|
||||
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);
|
||||
@@ -2361,9 +2301,8 @@ int btrfs_read_buffer(struct extent_buffer *buf, u64 parent_transid)
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
+5
-3
@@ -7,9 +7,11 @@
|
||||
#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)
|
||||
|
||||
+117
-106
File diff suppressed because it is too large
Load Diff
+99
-114
File diff suppressed because it is too large
Load Diff
@@ -89,11 +89,11 @@ EXPORT_SYMBOL(free_extent_map);
|
||||
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);
|
||||
|
||||
@@ -122,13 +122,13 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 offset,
|
||||
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;
|
||||
@@ -145,7 +145,7 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 offset,
|
||||
|
||||
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);
|
||||
}
|
||||
@@ -155,7 +155,7 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 offset,
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#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,
|
||||
@@ -166,7 +166,7 @@ int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode,
|
||||
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)
|
||||
@@ -192,8 +192,9 @@ int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode,
|
||||
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;
|
||||
@@ -373,7 +374,7 @@ int btrfs_csum_one_bio(struct btrfs_root *root, struct inode *inode,
|
||||
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;
|
||||
|
||||
@@ -507,7 +508,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans,
|
||||
|
||||
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;
|
||||
@@ -715,9 +716,8 @@ again:
|
||||
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);
|
||||
@@ -732,7 +732,7 @@ insert:
|
||||
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;
|
||||
|
||||
+24
-25
@@ -44,10 +44,10 @@
|
||||
/* 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;
|
||||
@@ -78,7 +78,7 @@ static int noinline btrfs_copy_from_user(loff_t pos, int num_pages,
|
||||
/*
|
||||
* 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++) {
|
||||
@@ -103,7 +103,7 @@ static void noinline btrfs_drop_pages(struct page **pages, size_t num_pages)
|
||||
* 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,
|
||||
@@ -137,9 +137,6 @@ static int noinline dirty_and_release_pages(struct btrfs_trans_handle *trans,
|
||||
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
|
||||
@@ -185,7 +182,7 @@ int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end,
|
||||
len = (u64)-1;
|
||||
testend = 0;
|
||||
}
|
||||
while(1) {
|
||||
while (1) {
|
||||
if (!split)
|
||||
split = alloc_extent_map(GFP_NOFS);
|
||||
if (!split2)
|
||||
@@ -295,7 +292,7 @@ int btrfs_check_file(struct btrfs_root *root, struct inode *inode)
|
||||
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);
|
||||
@@ -314,8 +311,10 @@ int btrfs_check_file(struct btrfs_root *root, struct inode *inode)
|
||||
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;
|
||||
}
|
||||
@@ -331,7 +330,7 @@ int btrfs_check_file(struct btrfs_root *root, struct inode *inode)
|
||||
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]++;
|
||||
@@ -339,8 +338,9 @@ int btrfs_check_file(struct btrfs_root *root, struct inode *inode)
|
||||
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;
|
||||
|
||||
}
|
||||
@@ -362,7 +362,7 @@ out:
|
||||
* 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)
|
||||
{
|
||||
@@ -398,7 +398,7 @@ int noinline btrfs_drop_extents(struct btrfs_trans_handle *trans,
|
||||
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,
|
||||
@@ -649,16 +649,15 @@ next_slot:
|
||||
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) {
|
||||
@@ -944,7 +943,7 @@ done:
|
||||
* 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)
|
||||
@@ -979,7 +978,8 @@ again:
|
||||
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) {
|
||||
@@ -1085,7 +1085,7 @@ static ssize_t btrfs_file_write(struct file *file, const char __user *buf,
|
||||
}
|
||||
}
|
||||
|
||||
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 -
|
||||
@@ -1178,7 +1178,7 @@ out_nolock:
|
||||
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);
|
||||
@@ -1237,9 +1237,8 @@ int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync)
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
+21
-16
@@ -213,10 +213,13 @@ static int __btrfs_add_free_space(struct btrfs_block_group_cache *block_group,
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -225,11 +228,14 @@ static int __btrfs_add_free_space(struct btrfs_block_group_cache *block_group,
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -265,8 +271,7 @@ out:
|
||||
BUG();
|
||||
}
|
||||
|
||||
if (alloc_info)
|
||||
kfree(alloc_info);
|
||||
kfree(alloc_info);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -283,9 +288,11 @@ __btrfs_remove_free_space(struct btrfs_block_group_cache *block_group,
|
||||
|
||||
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;
|
||||
@@ -401,8 +408,6 @@ void btrfs_dump_free_space(struct btrfs_block_group_cache *block_group,
|
||||
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);
|
||||
|
||||
@@ -129,7 +129,6 @@ int btrfs_find_free_objectid(struct btrfs_trans_handle *trans,
|
||||
last_ino = key.objectid + 1;
|
||||
path->slots[0]++;
|
||||
}
|
||||
// FIXME -ENOSPC
|
||||
BUG_ON(1);
|
||||
found:
|
||||
btrfs_release_path(root, path);
|
||||
|
||||
+86
-87
@@ -124,7 +124,7 @@ int btrfs_check_free_space(struct btrfs_root *root, u64 num_required,
|
||||
* 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)
|
||||
@@ -148,7 +148,8 @@ static int noinline insert_inline_extent(struct btrfs_trans_handle *trans,
|
||||
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);
|
||||
@@ -165,7 +166,6 @@ static int noinline insert_inline_extent(struct btrfs_trans_handle *trans,
|
||||
BUG_ON(ret);
|
||||
if (ret) {
|
||||
err = ret;
|
||||
printk("got bad ret %d\n", ret);
|
||||
goto fail;
|
||||
}
|
||||
leaf = path->nodes[0];
|
||||
@@ -181,7 +181,7 @@ static int noinline insert_inline_extent(struct btrfs_trans_handle *trans,
|
||||
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);
|
||||
@@ -519,8 +519,7 @@ free_pages_out:
|
||||
WARN_ON(pages[i]->mapping);
|
||||
page_cache_release(pages[i]);
|
||||
}
|
||||
if (pages)
|
||||
kfree(pages);
|
||||
kfree(pages);
|
||||
|
||||
goto out;
|
||||
}
|
||||
@@ -549,7 +548,7 @@ static noinline int submit_compressed_extents(struct inode *inode,
|
||||
|
||||
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);
|
||||
@@ -562,8 +561,8 @@ static noinline int submit_compressed_extents(struct inode *inode,
|
||||
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,
|
||||
@@ -581,7 +580,7 @@ static noinline int submit_compressed_extents(struct inode *inode,
|
||||
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);
|
||||
@@ -618,7 +617,7 @@ static noinline int submit_compressed_extents(struct inode *inode,
|
||||
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);
|
||||
@@ -651,11 +650,11 @@ static noinline int submit_compressed_extents(struct inode *inode,
|
||||
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);
|
||||
@@ -735,14 +734,13 @@ static noinline int cow_file_range(struct inode *inode,
|
||||
|
||||
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;
|
||||
@@ -755,7 +753,7 @@ static noinline int cow_file_range(struct inode *inode,
|
||||
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);
|
||||
@@ -779,11 +777,9 @@ static noinline int cow_file_range(struct inode *inode,
|
||||
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
|
||||
@@ -842,9 +838,8 @@ static noinline void async_cow_submit(struct btrfs_work *work)
|
||||
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)
|
||||
@@ -871,7 +866,7 @@ static int cow_file_range_async(struct inode *inode, struct page *locked_page,
|
||||
|
||||
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;
|
||||
@@ -904,7 +899,7 @@ static int cow_file_range_async(struct inode *inode, struct page *locked_page,
|
||||
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) ==
|
||||
@@ -918,7 +913,7 @@ static int cow_file_range_async(struct inode *inode, struct page *locked_page,
|
||||
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;
|
||||
@@ -1146,13 +1141,13 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page,
|
||||
|
||||
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;
|
||||
}
|
||||
@@ -1200,8 +1195,11 @@ static int btrfs_clear_bit_hook(struct inode *inode, u64 start, u64 end,
|
||||
|
||||
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 {
|
||||
@@ -1241,9 +1239,8 @@ int btrfs_merge_bio_hook(struct page *page, unsigned long offset,
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1255,8 +1252,9 @@ int btrfs_merge_bio_hook(struct page *page, unsigned long offset,
|
||||
* 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;
|
||||
@@ -1341,9 +1339,8 @@ static noinline int add_pending_csums(struct btrfs_trans_handle *trans,
|
||||
|
||||
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);
|
||||
}
|
||||
@@ -1755,14 +1752,14 @@ static int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end,
|
||||
}
|
||||
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:
|
||||
@@ -1773,9 +1770,10 @@ 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);
|
||||
@@ -2097,9 +2095,8 @@ static void fill_inode_item(struct btrfs_trans_handle *trans,
|
||||
/*
|
||||
* 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;
|
||||
@@ -2174,7 +2171,7 @@ int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
|
||||
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;
|
||||
@@ -2280,9 +2277,8 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
/* 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;
|
||||
@@ -2516,9 +2512,9 @@ noinline int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
|
||||
|
||||
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
|
||||
@@ -2530,7 +2526,7 @@ search_again:
|
||||
path->slots[0]--;
|
||||
}
|
||||
|
||||
while(1) {
|
||||
while (1) {
|
||||
fi = NULL;
|
||||
leaf = path->nodes[0];
|
||||
btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
|
||||
@@ -2562,19 +2558,18 @@ search_again:
|
||||
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;
|
||||
}
|
||||
@@ -2656,7 +2651,7 @@ delete:
|
||||
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;
|
||||
@@ -2938,9 +2933,10 @@ static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
|
||||
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);
|
||||
@@ -3020,8 +3016,8 @@ static int btrfs_init_locked_inode(struct inode *inode, void *p)
|
||||
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,
|
||||
@@ -3085,7 +3081,7 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
|
||||
|
||||
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;
|
||||
@@ -3385,9 +3381,8 @@ int btrfs_set_inode_index(struct inode *dir, u64 *index)
|
||||
|
||||
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;
|
||||
@@ -3879,12 +3874,13 @@ static noinline int uncompress_inline(struct btrfs_path *path,
|
||||
|
||||
/*
|
||||
* 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)
|
||||
@@ -4081,7 +4077,7 @@ again:
|
||||
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:
|
||||
@@ -4093,7 +4089,11 @@ not_found_em:
|
||||
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;
|
||||
}
|
||||
@@ -4130,8 +4130,6 @@ insert:
|
||||
}
|
||||
} else {
|
||||
err = -EIO;
|
||||
printk("failing to insert %Lu %Lu\n",
|
||||
start, len);
|
||||
free_extent_map(em);
|
||||
em = NULL;
|
||||
}
|
||||
@@ -4147,9 +4145,8 @@ out:
|
||||
btrfs_free_path(path);
|
||||
if (trans) {
|
||||
ret = btrfs_end_transaction(trans, root);
|
||||
if (!err) {
|
||||
if (!err)
|
||||
err = ret;
|
||||
}
|
||||
}
|
||||
if (err) {
|
||||
free_extent_map(em);
|
||||
@@ -4482,13 +4479,15 @@ void btrfs_destroy_inode(struct inode *inode)
|
||||
}
|
||||
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);
|
||||
@@ -4572,8 +4571,8 @@ static int btrfs_getattr(struct vfsmount *mnt,
|
||||
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;
|
||||
@@ -4663,7 +4662,7 @@ int btrfs_start_delalloc_inodes(struct btrfs_root *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);
|
||||
@@ -4684,7 +4683,7 @@ int btrfs_start_delalloc_inodes(struct btrfs_root *root)
|
||||
* 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 &&
|
||||
|
||||
+18
-19
@@ -311,7 +311,7 @@ static noinline int btrfs_mksubvol(struct path *parent, char *name,
|
||||
* 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 ||
|
||||
@@ -319,7 +319,8 @@ static noinline int btrfs_mksubvol(struct path *parent, char *name,
|
||||
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;
|
||||
@@ -329,7 +330,8 @@ static noinline int btrfs_mksubvol(struct path *parent, char *name,
|
||||
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;
|
||||
@@ -617,7 +619,8 @@ static noinline int btrfs_ioctl_snap_create(struct file *file,
|
||||
|
||||
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;
|
||||
@@ -810,9 +813,6 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
|
||||
((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) {
|
||||
@@ -883,10 +883,13 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
|
||||
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,
|
||||
@@ -916,8 +919,6 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
|
||||
|
||||
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;
|
||||
@@ -929,8 +930,6 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
|
||||
/* 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);
|
||||
@@ -952,12 +951,11 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
|
||||
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;
|
||||
}
|
||||
@@ -969,7 +967,8 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
|
||||
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);
|
||||
}
|
||||
@@ -985,7 +984,7 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
|
||||
btrfs_mark_buffer_dirty(leaf);
|
||||
}
|
||||
|
||||
next:
|
||||
next:
|
||||
btrfs_release_path(root, path);
|
||||
key.offset++;
|
||||
}
|
||||
|
||||
+3
-2
@@ -31,9 +31,10 @@
|
||||
* 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;
|
||||
|
||||
+15
-19
@@ -39,11 +39,11 @@ static u64 entry_end(struct btrfs_ordered_extent *entry)
|
||||
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);
|
||||
|
||||
@@ -67,13 +67,13 @@ static struct rb_node *tree_insert(struct rb_root *root, u64 file_offset,
|
||||
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;
|
||||
@@ -88,7 +88,7 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 file_offset,
|
||||
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;
|
||||
@@ -102,7 +102,7 @@ static struct rb_node *__tree_search(struct rb_root *root, u64 file_offset,
|
||||
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;
|
||||
@@ -193,10 +193,8 @@ int btrfs_add_ordered_extent(struct inode *inode, u64 file_offset,
|
||||
|
||||
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);
|
||||
|
||||
@@ -282,7 +280,7 @@ int btrfs_put_ordered_extent(struct btrfs_ordered_extent *entry)
|
||||
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);
|
||||
@@ -432,11 +430,10 @@ again:
|
||||
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;
|
||||
@@ -492,7 +489,7 @@ out:
|
||||
* 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;
|
||||
@@ -553,7 +550,7 @@ int btrfs_ordered_update_i_size(struct inode *inode,
|
||||
* yet
|
||||
*/
|
||||
node = &ordered->rb_node;
|
||||
while(1) {
|
||||
while (1) {
|
||||
node = rb_prev(node);
|
||||
if (!node)
|
||||
break;
|
||||
@@ -581,9 +578,8 @@ int btrfs_ordered_update_i_size(struct inode *inode,
|
||||
* 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);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user