Message ID | d1a4e43de270f291d97b1c00b7ca3b32ce699009.1627418762.git.rgoldwyn@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Allocate structures on stack instead of kmalloc() | expand |
On 28/07/2021 05:17, Goldwyn Rodrigues wrote: > From: Goldwyn Rodrigues <rgoldwyn@suse.com> > > Instead of using kmalloc() to allocate backref_ctx, allocate backref_ctx > on stack. > > sizeof(backref_ctx) = 48 > > Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Looks good. Reviewed-by: Anand Jain <anand.jain@oracle.com> > --- > fs/btrfs/send.c | 29 +++++++++++------------------ > 1 file changed, 11 insertions(+), 18 deletions(-) > > diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c > index 6ac37ae6c811..e0553fa27f85 100644 > --- a/fs/btrfs/send.c > +++ b/fs/btrfs/send.c > @@ -1307,7 +1307,7 @@ static int find_extent_clone(struct send_ctx *sctx, > u64 flags = 0; > struct btrfs_file_extent_item *fi; > struct extent_buffer *eb = path->nodes[0]; > - struct backref_ctx *backref_ctx = NULL; > + struct backref_ctx backref_ctx = {0}; > struct clone_root *cur_clone_root; > struct btrfs_key found_key; > struct btrfs_path *tmp_path; > @@ -1322,12 +1322,6 @@ static int find_extent_clone(struct send_ctx *sctx, > /* We only use this path under the commit sem */ > tmp_path->need_commit_sem = 0; > > - backref_ctx = kmalloc(sizeof(*backref_ctx), GFP_KERNEL); > - if (!backref_ctx) { > - ret = -ENOMEM; > - goto out; > - } > - > if (data_offset >= ino_size) { > /* > * There may be extents that lie behind the file's size. > @@ -1392,12 +1386,12 @@ static int find_extent_clone(struct send_ctx *sctx, > cur_clone_root->found_refs = 0; > } > > - backref_ctx->sctx = sctx; > - backref_ctx->found = 0; > - backref_ctx->cur_objectid = ino; > - backref_ctx->cur_offset = data_offset; > - backref_ctx->found_itself = 0; > - backref_ctx->extent_len = num_bytes; > + backref_ctx.sctx = sctx; > + backref_ctx.found = 0; > + backref_ctx.cur_objectid = ino; > + backref_ctx.cur_offset = data_offset; > + backref_ctx.found_itself = 0; > + backref_ctx.extent_len = num_bytes; > > /* > * The last extent of a file may be too large due to page alignment. > @@ -1405,7 +1399,7 @@ static int find_extent_clone(struct send_ctx *sctx, > * __iterate_backrefs work. > */ > if (data_offset + num_bytes >= ino_size) > - backref_ctx->extent_len = ino_size - data_offset; > + backref_ctx.extent_len = ino_size - data_offset; > > /* > * Now collect all backrefs. > @@ -1416,12 +1410,12 @@ static int find_extent_clone(struct send_ctx *sctx, > extent_item_pos = 0; > ret = iterate_extent_inodes(fs_info, found_key.objectid, > extent_item_pos, 1, __iterate_backrefs, > - backref_ctx, false); > + &backref_ctx, false); > > if (ret < 0) > goto out; > > - if (!backref_ctx->found_itself) { > + if (!backref_ctx.found_itself) { > /* found a bug in backref code? */ > ret = -EIO; > btrfs_err(fs_info, > @@ -1434,7 +1428,7 @@ static int find_extent_clone(struct send_ctx *sctx, > "find_extent_clone: data_offset=%llu, ino=%llu, num_bytes=%llu, logical=%llu", > data_offset, ino, num_bytes, logical); > > - if (!backref_ctx->found) > + if (!backref_ctx.found) > btrfs_debug(fs_info, "no clones found"); > > cur_clone_root = NULL; > @@ -1458,7 +1452,6 @@ static int find_extent_clone(struct send_ctx *sctx, > > out: > btrfs_free_path(tmp_path); > - kfree(backref_ctx); > return ret; > } > >
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index 6ac37ae6c811..e0553fa27f85 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -1307,7 +1307,7 @@ static int find_extent_clone(struct send_ctx *sctx, u64 flags = 0; struct btrfs_file_extent_item *fi; struct extent_buffer *eb = path->nodes[0]; - struct backref_ctx *backref_ctx = NULL; + struct backref_ctx backref_ctx = {0}; struct clone_root *cur_clone_root; struct btrfs_key found_key; struct btrfs_path *tmp_path; @@ -1322,12 +1322,6 @@ static int find_extent_clone(struct send_ctx *sctx, /* We only use this path under the commit sem */ tmp_path->need_commit_sem = 0; - backref_ctx = kmalloc(sizeof(*backref_ctx), GFP_KERNEL); - if (!backref_ctx) { - ret = -ENOMEM; - goto out; - } - if (data_offset >= ino_size) { /* * There may be extents that lie behind the file's size. @@ -1392,12 +1386,12 @@ static int find_extent_clone(struct send_ctx *sctx, cur_clone_root->found_refs = 0; } - backref_ctx->sctx = sctx; - backref_ctx->found = 0; - backref_ctx->cur_objectid = ino; - backref_ctx->cur_offset = data_offset; - backref_ctx->found_itself = 0; - backref_ctx->extent_len = num_bytes; + backref_ctx.sctx = sctx; + backref_ctx.found = 0; + backref_ctx.cur_objectid = ino; + backref_ctx.cur_offset = data_offset; + backref_ctx.found_itself = 0; + backref_ctx.extent_len = num_bytes; /* * The last extent of a file may be too large due to page alignment. @@ -1405,7 +1399,7 @@ static int find_extent_clone(struct send_ctx *sctx, * __iterate_backrefs work. */ if (data_offset + num_bytes >= ino_size) - backref_ctx->extent_len = ino_size - data_offset; + backref_ctx.extent_len = ino_size - data_offset; /* * Now collect all backrefs. @@ -1416,12 +1410,12 @@ static int find_extent_clone(struct send_ctx *sctx, extent_item_pos = 0; ret = iterate_extent_inodes(fs_info, found_key.objectid, extent_item_pos, 1, __iterate_backrefs, - backref_ctx, false); + &backref_ctx, false); if (ret < 0) goto out; - if (!backref_ctx->found_itself) { + if (!backref_ctx.found_itself) { /* found a bug in backref code? */ ret = -EIO; btrfs_err(fs_info, @@ -1434,7 +1428,7 @@ static int find_extent_clone(struct send_ctx *sctx, "find_extent_clone: data_offset=%llu, ino=%llu, num_bytes=%llu, logical=%llu", data_offset, ino, num_bytes, logical); - if (!backref_ctx->found) + if (!backref_ctx.found) btrfs_debug(fs_info, "no clones found"); cur_clone_root = NULL; @@ -1458,7 +1452,6 @@ static int find_extent_clone(struct send_ctx *sctx, out: btrfs_free_path(tmp_path); - kfree(backref_ctx); return ret; }