Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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

parent 291d673e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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;
+0 −1
Original line number Diff line number Diff line
@@ -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;
+2 −1
Original line number Diff line number Diff line
@@ -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;
+18 −1
Original line number Diff line number Diff line
@@ -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]);