ceph: convert bools in ceph_mds_request to a new r_req_flags field
Currently, we have a bunch of bool flags in struct ceph_mds_request. We need more flags though, but each bool takes (at least) a byte. Those add up over time. Merge all of the existing bools in this struct into a single unsigned long, and use the set/test/clear_bit macros to manipulate them. These are atomic operations, but that is required here to prevent load/modify/store races. The existing flags are protected by different locks, so we can't rely on them for that purpose. Signed-off-by: Jeff Layton <jlayton@redhat.com> Reviewed-by: Yan, Zheng <zyan@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:

committed by
Ilya Dryomov

parent
f5a03b0804
commit
bc2de10dc4
@@ -205,6 +205,14 @@ struct ceph_mds_request {
|
||||
struct inode *r_locked_dir; /* dir (if any) i_mutex locked by vfs */
|
||||
struct inode *r_target_inode; /* resulting inode */
|
||||
|
||||
#define CEPH_MDS_R_DIRECT_IS_HASH (1) /* r_direct_hash is valid */
|
||||
#define CEPH_MDS_R_ABORTED (2) /* call was aborted */
|
||||
#define CEPH_MDS_R_GOT_UNSAFE (3) /* got an unsafe reply */
|
||||
#define CEPH_MDS_R_GOT_SAFE (4) /* got a safe reply */
|
||||
#define CEPH_MDS_R_GOT_RESULT (5) /* got a result */
|
||||
#define CEPH_MDS_R_DID_PREPOPULATE (6) /* prepopulated readdir */
|
||||
unsigned long r_req_flags;
|
||||
|
||||
struct mutex r_fill_mutex;
|
||||
|
||||
union ceph_mds_request_args r_args;
|
||||
@@ -216,7 +224,6 @@ struct ceph_mds_request {
|
||||
/* for choosing which mds to send this request to */
|
||||
int r_direct_mode;
|
||||
u32 r_direct_hash; /* choose dir frag based on this dentry hash */
|
||||
bool r_direct_is_hash; /* true if r_direct_hash is valid */
|
||||
|
||||
/* data payload is used for xattr ops */
|
||||
struct ceph_pagelist *r_pagelist;
|
||||
@@ -234,7 +241,6 @@ struct ceph_mds_request {
|
||||
struct ceph_mds_reply_info_parsed r_reply_info;
|
||||
struct page *r_locked_page;
|
||||
int r_err;
|
||||
bool r_aborted;
|
||||
|
||||
unsigned long r_timeout; /* optional. jiffies, 0 is "wait forever" */
|
||||
unsigned long r_started; /* start time to measure timeout against */
|
||||
@@ -262,9 +268,7 @@ struct ceph_mds_request {
|
||||
ceph_mds_request_callback_t r_callback;
|
||||
ceph_mds_request_wait_callback_t r_wait_for_completion;
|
||||
struct list_head r_unsafe_item; /* per-session unsafe list item */
|
||||
bool r_got_unsafe, r_got_safe, r_got_result;
|
||||
|
||||
bool r_did_prepopulate;
|
||||
long long r_dir_release_cnt;
|
||||
long long r_dir_ordered_cnt;
|
||||
int r_readdir_cache_idx;
|
||||
|
Reference in New Issue
Block a user