Commit 6f568d35 authored by Chris Mason's avatar Chris Mason

Btrfs: mount -o max_inline=size to control the maximum inline extent size

Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 291d673e
...@@ -325,6 +325,7 @@ struct btrfs_fs_info { ...@@ -325,6 +325,7 @@ struct btrfs_fs_info {
u64 last_trans_committed; u64 last_trans_committed;
unsigned long mount_opt; unsigned long mount_opt;
u64 max_extent; u64 max_extent;
u64 max_inline;
u64 alloc_start; u64 alloc_start;
struct btrfs_transaction *running_transaction; struct btrfs_transaction *running_transaction;
struct btrfs_super_block super_copy; struct btrfs_super_block super_copy;
......
...@@ -659,6 +659,7 @@ struct btrfs_root *open_ctree(struct super_block *sb) ...@@ -659,6 +659,7 @@ struct btrfs_root *open_ctree(struct super_block *sb)
fs_info->throttles = 0; fs_info->throttles = 0;
fs_info->mount_opt = 0; fs_info->mount_opt = 0;
fs_info->max_extent = (u64)-1; fs_info->max_extent = (u64)-1;
fs_info->max_inline = 8192 * 1024;
fs_info->delalloc_bytes = 0; fs_info->delalloc_bytes = 0;
fs_info->btree_inode = new_inode(sb); fs_info->btree_inode = new_inode(sb);
fs_info->btree_inode->i_ino = 1; fs_info->btree_inode->i_ino = 1;
......
...@@ -2451,7 +2451,6 @@ sector_t extent_bmap(struct address_space *mapping, sector_t iblock, ...@@ -2451,7 +2451,6 @@ sector_t extent_bmap(struct address_space *mapping, sector_t iblock,
goto out; goto out;
sector = (em->block_start + start - em->start) >> inode->i_blkbits; 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: out:
free_extent_map(em); free_extent_map(em);
return sector; return sector;
......
...@@ -301,7 +301,8 @@ static int noinline dirty_and_release_pages(struct btrfs_trans_handle *trans, ...@@ -301,7 +301,8 @@ static int noinline dirty_and_release_pages(struct btrfs_trans_handle *trans,
*/ */
inline_size = end_pos; inline_size = end_pos;
if (isize >= BTRFS_MAX_INLINE_DATA_SIZE(root) || 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)) { inline_size >= BTRFS_MAX_INLINE_DATA_SIZE(root)) {
u64 last_end; u64 last_end;
u64 existing_delalloc = 0; u64 existing_delalloc = 0;
......
...@@ -64,7 +64,7 @@ static void btrfs_put_super (struct super_block * sb) ...@@ -64,7 +64,7 @@ static void btrfs_put_super (struct super_block * sb)
enum { enum {
Opt_subvol, Opt_nodatasum, Opt_nodatacow, Opt_max_extent, 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 = { static match_table_t tokens = {
...@@ -73,6 +73,7 @@ static match_table_t tokens = { ...@@ -73,6 +73,7 @@ static match_table_t tokens = {
{Opt_nodatacow, "nodatacow"}, {Opt_nodatacow, "nodatacow"},
{Opt_nobarrier, "nobarrier"}, {Opt_nobarrier, "nobarrier"},
{Opt_max_extent, "max_extent=%s"}, {Opt_max_extent, "max_extent=%s"},
{Opt_max_inline, "max_inline=%s"},
{Opt_alloc_start, "alloc_start=%s"}, {Opt_alloc_start, "alloc_start=%s"},
{Opt_ssd, "ssd"}, {Opt_ssd, "ssd"},
{Opt_err, NULL} {Opt_err, NULL}
...@@ -178,6 +179,22 @@ static int parse_options (char * options, ...@@ -178,6 +179,22 @@ static int parse_options (char * options,
} }
} }
break; 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: case Opt_alloc_start:
if (info) { if (info) {
char *num = match_strdup(&args[0]); char *num = match_strdup(&args[0]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment