Skip to content

Commit

Permalink
Btrfs: i386 fixes from axboe
Browse files Browse the repository at this point in the history
Signed-off-by: Chris Mason <chris.mason@oracle.com>
  • Loading branch information
Chris Mason authored and David Woodhouse committed Jun 12, 2007
1 parent 6cbd557 commit 3408878
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 5 deletions.
51 changes: 51 additions & 0 deletions fs/btrfs/INSTALL
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
Install Instructions

Btrfs puts snapshots and subvolumes into the root directory of the FS. This
directory can only be changed by btrfsctl right now, and normal filesystem
operations do not work on it. The default subvolume is called 'default',
and you can create files and directories in mount_point/default

Btrfs uses the crypto manager interface in the kernel for file and
metadata checksums. You need to compile the kernel with:

CONFIG_CRYPTO=y
CONFIG_CRYPTO_MANAGER=m
CONFIG_CRYPTO_CRC32C=m

cryptomanager and crc32c can be static as well. Once your kernel is
setup, typing make in the btrfs module sources will build against the
running kernel. When the build is complete:

modprobe crc32c
modprobe cryptomgr
insmod btrfs.ko

The Btrfs utility programs require libuuid to build. This can be found
in the e2fsprogs sources, and is usually available as libuuid or
e2fsprogs-devel from various distros.

Building the utilities is just make ; make install. The programs go
into /usr/local/bin. The commands available are:

mkfs.btrfs: create a filesystem

btrfsctl: control program to create snapshots and subvolumes:

mount /dev/sda2 /mnt
btrfsctl -s new_subvol_name /mnt
btrfsctl -s snapshot_of_default /mnt/default
btrfsctl -s snapshot_of_new_subvol /mnt/new_subvol_name
btrfsctl -s snapshot_of_a_snapshot /mnt/snapshot_of_new_subvol
ls /mnt
default snapshot_of_a_snapshot snapshot_of_new_subvol
new_subvol_name snapshot_of_default

Snapshots and subvolumes cannot be deleted right now, but you can
rm -rf all the files and directories inside them.

btrfsck: do a limited check of the FS extent trees.</li>

debug-tree: print all of the FS metadata in text form. Example:

debug-tree /dev/sda2 >& big_output_file

2 changes: 1 addition & 1 deletion fs/btrfs/disk-io.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ struct buffer_head *btrfs_find_create_tree_block(struct btrfs_root *root,
int err;
u64 first_block = index << (PAGE_CACHE_SHIFT - blockbits);

page = grab_cache_page(mapping, index);
page = find_or_create_page(mapping, index, GFP_NOFS);
if (!page)
return NULL;

Expand Down
7 changes: 5 additions & 2 deletions fs/btrfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ static int dirty_and_release_pages(struct btrfs_trans_handle *trans,
if (buffer_mapped(bh) && bh->b_blocknr == 0) {
struct btrfs_key key;
struct btrfs_path *path;
char *ptr;
char *ptr, *kaddr;
u32 datasize;

/* create an inline extent, and copy the data in */
Expand All @@ -135,8 +135,11 @@ static int dirty_and_release_pages(struct btrfs_trans_handle *trans,
btrfs_set_file_extent_type(ei,
BTRFS_FILE_EXTENT_INLINE);
ptr = btrfs_file_extent_inline_start(ei);
kaddr = kmap_atomic(bh->b_page, KM_USER0);
btrfs_memcpy(root, path->nodes[0]->b_data,
ptr, bh->b_data, offset + write_bytes);
ptr, kaddr + bh_offset(bh),
offset + write_bytes);
kunmap_atomic(kaddr, KM_USER0);
mark_buffer_dirty(path->nodes[0]);
btrfs_free_path(path);
} else if (buffer_mapped(bh)) {
Expand Down
3 changes: 1 addition & 2 deletions fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -1754,6 +1754,7 @@ static int create_subvol(struct btrfs_root *root, char *name, int namelen)
BTRFS_I(dir)->block_group, S_IFDIR | 0700);
inode->i_op = &btrfs_dir_inode_operations;
inode->i_fop = &btrfs_dir_file_operations;
new_root->inode = inode;

ret = btrfs_make_empty_dir(trans, new_root, new_dirid, new_dirid);
BUG_ON(ret);
Expand All @@ -1766,8 +1767,6 @@ static int create_subvol(struct btrfs_root *root, char *name, int namelen)
ret = btrfs_commit_transaction(trans, new_root);
BUG_ON(ret);

iput(inode);

mutex_unlock(&root->fs_info->fs_mutex);
btrfs_btree_balance_dirty(root);
return 0;
Expand Down
1 change: 1 addition & 0 deletions fs/btrfs/transaction.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

#include <linux/module.h>
#include <linux/fs.h>
#include <linux/sched.h>
#include "ctree.h"
#include "disk-io.h"
#include "transaction.h"
Expand Down

0 comments on commit 3408878

Please sign in to comment.