mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 00:48:50 +00:00
btrfs: DEFINE_FREE for struct btrfs_path
Add a DEFINE_FREE for struct btrfs_path. This defines a function that can be called using the __free attribute. Define a macro BTRFS_PATH_AUTO_FREE to make the declaration of an auto freeing path very clear. The intended use is to define the auto free of path in cases where the path is allocated somewhere at the beginning and freed either on all error paths or at the end of the function. int func() { BTRFS_PATH_AUTO_FREE(path); if (...) return -ERROR; path = alloc_path(); ... if (...) return -ERROR; ... return 0; } Signed-off-by: Leo Martins <loemra.dev@gmail.com> [ update changelog ] Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
ab6eac7c91
commit
4c74a32ad3
1 changed files with 5 additions and 0 deletions
|
@ -6,6 +6,7 @@
|
|||
#ifndef BTRFS_CTREE_H
|
||||
#define BTRFS_CTREE_H
|
||||
|
||||
#include "linux/cleanup.h"
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/rbtree.h>
|
||||
|
@ -84,6 +85,9 @@ struct btrfs_path {
|
|||
unsigned int nowait:1;
|
||||
};
|
||||
|
||||
#define BTRFS_PATH_AUTO_FREE(path_name) \
|
||||
struct btrfs_path *path_name __free(btrfs_free_path) = NULL
|
||||
|
||||
/*
|
||||
* The state of btrfs root
|
||||
*/
|
||||
|
@ -598,6 +602,7 @@ int btrfs_search_slot_for_read(struct btrfs_root *root,
|
|||
void btrfs_release_path(struct btrfs_path *p);
|
||||
struct btrfs_path *btrfs_alloc_path(void);
|
||||
void btrfs_free_path(struct btrfs_path *p);
|
||||
DEFINE_FREE(btrfs_free_path, struct btrfs_path *, btrfs_free_path(_T))
|
||||
|
||||
int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root,
|
||||
struct btrfs_path *path, int slot, int nr);
|
||||
|
|
Loading…
Reference in a new issue