summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-01-29 21:03:38 (GMT)
committerChris Mason <chris.mason@oracle.com>2008-09-25 15:04:00 (GMT)
commit6f568d35a045dbb8a13fe71bfc32e85e39a986cb (patch)
treedf5cb5826dfb46a2514bfba34f8473dc65ea7081
parent291d673e6a22d9c6834e939f66c7cfef90669021 (diff)
downloadlinux-fsl-qoriq-6f568d35a045dbb8a13fe71bfc32e85e39a986cb.tar.xz
Btrfs: mount -o max_inline=size to control the maximum inline extent size
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r--fs/btrfs/ctree.h1
-rw-r--r--fs/btrfs/disk-io.c1
-rw-r--r--fs/btrfs/extent_io.c1
-rw-r--r--fs/btrfs/file.c3
-rw-r--r--fs/btrfs/super.c19
5 files changed, 22 insertions, 3 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 127c86f..8f93e06 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -325,6 +325,7 @@ struct btrfs_fs_info {
u64 last_trans_committed;
unsigned long mount_opt;
u64 max_extent;
+ u64 max_inline;
u64 alloc_start;
struct btrfs_transaction *running_transaction;
struct btrfs_super_block super_copy;
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index e29a071..6647b90 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -659,6 +659,7 @@ struct btrfs_root *open_ctree(struct super_block *sb)
fs_info->throttles = 0;
fs_info->mount_opt = 0;
fs_info->max_extent = (u64)-1;
+ fs_info->max_inline = 8192 * 1024;
fs_info->delalloc_bytes = 0;
fs_info->btree_inode = new_inode(sb);
fs_info->btree_inode->i_ino = 1;
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index e81b35b..6999b81 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -2451,7 +2451,6 @@ sector_t extent_bmap(struct address_space *mapping, sector_t iblock,
goto out;
sector = (em->block_start + start - em->start) >> inode->i_blkbits;
-printk("bmap finds %Lu %Lu block %Lu\n", em->start, em->len, em->block_start);
out:
free_extent_map(em);
return sector;
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 8e21061..7c10a90 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -301,7 +301,8 @@ static int noinline dirty_and_release_pages(struct btrfs_trans_handle *trans,
*/
inline_size = end_pos;
if (isize >= BTRFS_MAX_INLINE_DATA_SIZE(root) ||
- inline_size > 8192 ||
+ inline_size > root->fs_info->max_inline ||
+ (inline_size & (root->sectorsize -1)) == 0 ||
inline_size >= BTRFS_MAX_INLINE_DATA_SIZE(root)) {
u64 last_end;
u64 existing_delalloc = 0;
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index f8a1016..a46300c 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -64,7 +64,7 @@ static void btrfs_put_super (struct super_block * sb)
enum {
Opt_subvol, Opt_nodatasum, Opt_nodatacow, Opt_max_extent,
- Opt_alloc_start, Opt_nobarrier, Opt_ssd, Opt_err,
+ Opt_max_inline, Opt_alloc_start, Opt_nobarrier, Opt_ssd, Opt_err,
};
static match_table_t tokens = {
@@ -73,6 +73,7 @@ static match_table_t tokens = {
{Opt_nodatacow, "nodatacow"},
{Opt_nobarrier, "nobarrier"},
{Opt_max_extent, "max_extent=%s"},
+ {Opt_max_inline, "max_inline=%s"},
{Opt_alloc_start, "alloc_start=%s"},
{Opt_ssd, "ssd"},
{Opt_err, NULL}
@@ -178,6 +179,22 @@ static int parse_options (char * options,
}
}
break;
+ case Opt_max_inline:
+ if (info) {
+ char *num = match_strdup(&args[0]);
+ if (num) {
+ info->max_inline =
+ btrfs_parse_size(num);
+ kfree(num);
+
+ info->max_inline = max_t(u64,
+ info->max_inline,
+ root->sectorsize);
+ printk("btrfs: max_inline at %Lu\n",
+ info->max_inline);
+ }
+ }
+ break;
case Opt_alloc_start:
if (info) {
char *num = match_strdup(&args[0]);