Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 128807
b: refs/heads/master
c: 594a24e
h: refs/heads/master
i:
  128805: cd0b19e
  128803: e2d7165
  128799: dc10fcb
v: v3
  • Loading branch information
Chris Mason committed Sep 25, 2008
1 parent 2bb52b5 commit 656e2ac
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 051e1b9f748ae673b7325d3fc049bb838606cffa
refs/heads/master: 594a24eb0e7fa8413f8b443863be4b7c72bfde9f
18 changes: 13 additions & 5 deletions trunk/fs/btrfs/ctree.c
Original file line number Diff line number Diff line change
Expand Up @@ -1245,7 +1245,10 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
int level;
int should_reada = p->reada;
int lowest_unlock = 1;
int blocksize;
u8 lowest_level = 0;
u64 blocknr;
u64 gen;

lowest_level = p->lowest_level;
WARN_ON(lowest_level && ins_len);
Expand Down Expand Up @@ -1320,11 +1323,12 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
reada_for_search(root, p, level, slot,
key->objectid);

tmp = btrfs_find_tree_block(root,
btrfs_node_blockptr(b, slot),
btrfs_level_size(root, level - 1));
if (tmp && btrfs_buffer_uptodate(tmp,
btrfs_node_ptr_generation(b, slot))) {
blocknr = btrfs_node_blockptr(b, slot);
gen = btrfs_node_ptr_generation(b, slot);
blocksize = btrfs_level_size(root, level - 1);

tmp = btrfs_find_tree_block(root, blocknr, blocksize);
if (tmp && btrfs_buffer_uptodate(tmp, gen)) {
b = tmp;
} else {
/*
Expand All @@ -1334,6 +1338,10 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
*/
if (level > 1) {
btrfs_release_path(NULL, p);
if (tmp)
free_extent_buffer(tmp);
tmp = read_tree_block(root, blocknr,
blocksize, gen);
if (tmp)
free_extent_buffer(tmp);
goto again;
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/btrfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -976,7 +976,7 @@ static ssize_t btrfs_file_write(struct file *file, const char __user *buf,

int btrfs_release_file(struct inode * inode, struct file * filp)
{
btrfs_del_ordered_inode(inode);
btrfs_del_ordered_inode(inode, 0);
if (filp->private_data)
btrfs_ioctl_trans_end(filp);
return 0;
Expand Down
4 changes: 1 addition & 3 deletions trunk/fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -852,7 +852,7 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry)
* we don't need to worry about
* data=ordered
*/
btrfs_del_ordered_inode(inode);
btrfs_del_ordered_inode(inode, 1);
}

btrfs_end_transaction(trans, root);
Expand Down Expand Up @@ -1276,14 +1276,12 @@ void btrfs_delete_inode(struct inode *inode)

btrfs_end_transaction(trans, root);
btrfs_btree_balance_dirty(root, nr);
btrfs_throttle(root);
return;

no_delete_lock:
nr = trans->blocks_used;
btrfs_end_transaction(trans, root);
btrfs_btree_balance_dirty(root, nr);
btrfs_throttle(root);
no_delete:
clear_inode(inode);
}
Expand Down
6 changes: 3 additions & 3 deletions trunk/fs/btrfs/ordered-data.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ static void __btrfs_del_ordered_inode(struct btrfs_ordered_inode_tree *tree,
return;
}

void btrfs_del_ordered_inode(struct inode *inode)
void btrfs_del_ordered_inode(struct inode *inode, int force)
{
struct btrfs_root *root = BTRFS_I(inode)->root;
u64 root_objectid = root->root_key.objectid;
Expand All @@ -263,8 +263,8 @@ void btrfs_del_ordered_inode(struct inode *inode)
return;
}

if (mapping_tagged(inode->i_mapping, PAGECACHE_TAG_DIRTY) ||
mapping_tagged(inode->i_mapping, PAGECACHE_TAG_WRITEBACK))
if (!force && (mapping_tagged(inode->i_mapping, PAGECACHE_TAG_DIRTY) ||
mapping_tagged(inode->i_mapping, PAGECACHE_TAG_WRITEBACK)))
return;

spin_lock(&root->fs_info->new_trans_lock);
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/btrfs/ordered-data.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,6 @@ int btrfs_find_del_first_ordered_inode(struct btrfs_ordered_inode_tree *tree,
int btrfs_find_first_ordered_inode(struct btrfs_ordered_inode_tree *tree,
u64 *root_objectid, u64 *objectid,
struct inode **inode);
void btrfs_del_ordered_inode(struct inode *inode);
void btrfs_del_ordered_inode(struct inode *inode, int force);
int btrfs_ordered_throttle(struct btrfs_root *root, struct inode *inode);
#endif

0 comments on commit 656e2ac

Please sign in to comment.