Merge branch 'dev/pending-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux into for-linus
This commit is contained in:
@@ -1407,6 +1407,11 @@ struct btrfs_fs_info {
|
||||
*/
|
||||
u64 last_trans_log_full_commit;
|
||||
unsigned long mount_opt;
|
||||
/*
|
||||
* Track requests for actions that need to be done during transaction
|
||||
* commit (like for some mount options).
|
||||
*/
|
||||
unsigned long pending_changes;
|
||||
unsigned long compress_type:4;
|
||||
int commit_interval;
|
||||
/*
|
||||
@@ -2098,7 +2103,6 @@ struct btrfs_ioctl_defrag_range_args {
|
||||
#define BTRFS_MOUNT_CHECK_INTEGRITY_INCLUDING_EXTENT_DATA (1 << 21)
|
||||
#define BTRFS_MOUNT_PANIC_ON_FATAL_ERROR (1 << 22)
|
||||
#define BTRFS_MOUNT_RESCAN_UUID_TREE (1 << 23)
|
||||
#define BTRFS_MOUNT_CHANGE_INODE_CACHE (1 << 24)
|
||||
|
||||
#define BTRFS_DEFAULT_COMMIT_INTERVAL (30)
|
||||
#define BTRFS_DEFAULT_MAX_INLINE (8192)
|
||||
@@ -2108,6 +2112,7 @@ struct btrfs_ioctl_defrag_range_args {
|
||||
#define btrfs_raw_test_opt(o, opt) ((o) & BTRFS_MOUNT_##opt)
|
||||
#define btrfs_test_opt(root, opt) ((root)->fs_info->mount_opt & \
|
||||
BTRFS_MOUNT_##opt)
|
||||
|
||||
#define btrfs_set_and_info(root, opt, fmt, args...) \
|
||||
{ \
|
||||
if (!btrfs_test_opt(root, opt)) \
|
||||
@@ -2122,6 +2127,49 @@ struct btrfs_ioctl_defrag_range_args {
|
||||
btrfs_clear_opt(root->fs_info->mount_opt, opt); \
|
||||
}
|
||||
|
||||
/*
|
||||
* Requests for changes that need to be done during transaction commit.
|
||||
*
|
||||
* Internal mount options that are used for special handling of the real
|
||||
* mount options (eg. cannot be set during remount and have to be set during
|
||||
* transaction commit)
|
||||
*/
|
||||
|
||||
#define BTRFS_PENDING_SET_INODE_MAP_CACHE (0)
|
||||
#define BTRFS_PENDING_CLEAR_INODE_MAP_CACHE (1)
|
||||
#define BTRFS_PENDING_COMMIT (2)
|
||||
|
||||
#define btrfs_test_pending(info, opt) \
|
||||
test_bit(BTRFS_PENDING_##opt, &(info)->pending_changes)
|
||||
#define btrfs_set_pending(info, opt) \
|
||||
set_bit(BTRFS_PENDING_##opt, &(info)->pending_changes)
|
||||
#define btrfs_clear_pending(info, opt) \
|
||||
clear_bit(BTRFS_PENDING_##opt, &(info)->pending_changes)
|
||||
|
||||
/*
|
||||
* Helpers for setting pending mount option changes.
|
||||
*
|
||||
* Expects corresponding macros
|
||||
* BTRFS_PENDING_SET_ and CLEAR_ + short mount option name
|
||||
*/
|
||||
#define btrfs_set_pending_and_info(info, opt, fmt, args...) \
|
||||
do { \
|
||||
if (!btrfs_raw_test_opt((info)->mount_opt, opt)) { \
|
||||
btrfs_info((info), fmt, ##args); \
|
||||
btrfs_set_pending((info), SET_##opt); \
|
||||
btrfs_clear_pending((info), CLEAR_##opt); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define btrfs_clear_pending_and_info(info, opt, fmt, args...) \
|
||||
do { \
|
||||
if (btrfs_raw_test_opt((info)->mount_opt, opt)) { \
|
||||
btrfs_info((info), fmt, ##args); \
|
||||
btrfs_set_pending((info), CLEAR_##opt); \
|
||||
btrfs_clear_pending((info), SET_##opt); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
/*
|
||||
* Inode flags
|
||||
*/
|
||||
|
Reference in New Issue
Block a user