return ONE_MB_BRW_SIZE;
}
-static inline int exp_connect_multibulk(struct obd_export *exp)
+static inline bool exp_connect_multibulk(struct obd_export *exp)
{
return exp_max_brw_size(exp) > ONE_MB_BRW_SIZE;
}
-static inline int exp_connect_cancelset(struct obd_export *exp)
+static inline bool exp_connect_cancelset(struct obd_export *exp)
{
LASSERT(exp != NULL);
- return !!(exp_connect_flags(exp) & OBD_CONNECT_CANCELSET);
+ return exp_connect_flags(exp) & OBD_CONNECT_CANCELSET;
}
-static inline int exp_connect_lru_resize(struct obd_export *exp)
+static inline bool exp_connect_lru_resize(struct obd_export *exp)
{
LASSERT(exp != NULL);
- return !!(exp_connect_flags(exp) & OBD_CONNECT_LRU_RESIZE);
+ return exp_connect_flags(exp) & OBD_CONNECT_LRU_RESIZE;
}
-static inline int exp_connect_vbr(struct obd_export *exp)
+static inline bool exp_connect_vbr(struct obd_export *exp)
{
LASSERT(exp != NULL);
LASSERT(exp->exp_connection);
- return !!(exp_connect_flags(exp) & OBD_CONNECT_VBR);
+ return exp_connect_flags(exp) & OBD_CONNECT_VBR;
}
-static inline int exp_connect_umask(struct obd_export *exp)
+static inline bool exp_connect_umask(struct obd_export *exp)
{
- return !!(exp_connect_flags(exp) & OBD_CONNECT_UMASK);
+ return exp_connect_flags(exp) & OBD_CONNECT_UMASK;
}
-static inline int imp_connect_lru_resize(struct obd_import *imp)
+static inline bool imp_connect_lru_resize(struct obd_import *imp)
{
struct obd_connect_data *ocd;
LASSERT(imp != NULL);
ocd = &imp->imp_connect_data;
- return !!(ocd->ocd_connect_flags & OBD_CONNECT_LRU_RESIZE);
+ return ocd->ocd_connect_flags & OBD_CONNECT_LRU_RESIZE;
}
-static inline int exp_connect_layout(struct obd_export *exp)
+static inline bool exp_connect_layout(struct obd_export *exp)
{
- return !!(exp_connect_flags(exp) & OBD_CONNECT_LAYOUTLOCK);
+ return exp_connect_flags(exp) & OBD_CONNECT_LAYOUTLOCK;
}
static inline bool exp_connect_lvb_type(struct obd_export *exp)
{
LASSERT(exp != NULL);
- if (exp_connect_flags(exp) & OBD_CONNECT_LVB_TYPE)
- return true;
- else
- return false;
+ return exp_connect_flags(exp) & OBD_CONNECT_LVB_TYPE;
+}
+
+static inline bool exp_connect_mirror_id_fix(struct obd_export *exp)
+{
+ return exp_connect_flags2(exp) & OBD_CONNECT2_MIRROR_ID_FIX;
}
static inline bool imp_connect_lvb_type(struct obd_import *imp)
LASSERT(imp != NULL);
ocd = &imp->imp_connect_data;
- if (ocd->ocd_connect_flags & OBD_CONNECT_LVB_TYPE)
- return true;
- else
- return false;
+ return ocd->ocd_connect_flags & OBD_CONNECT_LVB_TYPE;
}
static inline bool imp_connect_disp_stripe(struct obd_import *imp)
*/
#define OBD_CONNECT2_UNALIGNED_DIO 0x400000000ULL /* unaligned DIO */
#define OBD_CONNECT2_CONN_POLICY 0x800000000ULL /* server-side connection policy */
+#define OBD_CONNECT2_MIRROR_ID_FIX 0x2000000000ULL /* rr_mirror_id move */
/* XXX README XXX README XXX README XXX README XXX README XXX README XXX
* Please DO NOT add OBD_CONNECT flags before first ensuring that this value
* is not in use by some other branch/patch. Email adilger@whamcloud.com
OBD_CONNECT2_ENCRYPT_FID2PATH | \
OBD_CONNECT2_DMV_IMP_INHERIT |\
OBD_CONNECT2_UNALIGNED_DIO | \
- OBD_CONNECT2_PCCRO)
+ OBD_CONNECT2_PCCRO | \
+ OBD_CONNECT2_MIRROR_ID_FIX)
#define OST_CONNECT_SUPPORTED (OBD_CONNECT_SRVLOCK | OBD_CONNECT_GRANT | \
OBD_CONNECT_REQPORTAL | OBD_CONNECT_VERSION | \
__u32 rs_padding5; /* rr_mode */
__u32 rs_padding6; /* rr_flags */
__u32 rs_padding7; /* rr_flags_h */
- __u32 rs_padding8; /* rr_umask */
- __u16 rs_mirror_id;
+ /* The rr_mirror_id_old field used the last reserved field
+ * in mdt_rec_reint but is not used for any other reint type.
+ * There are lots of unused fields in this strict that could be
+ * used instead, so rr_umask was chosen for rs_mirror_id_new
+ * since it is unlikely that a file resync operation will ever
+ * need it. The other unused fields could potentially be needed
+ * eventually (timestamps or size/blocks) so they were not used.
+ */
+ __u32 rs_mirror_id_new; /* rr_umask */
+ __u16 rs_mirror_id_old; /* deprecated 2.16.0 */
__u16 rs_padding9; /* rr_padding_4 */
};
__u32 rr_flags;
__u32 rr_flags_h;
__u32 rr_umask;
- __u16 rr_mirror_id;
+ __u16 rr_mirror_id_old; /* deprecated 2.16.0 */
__u16 rr_padding_4; /* also fix lustre_swab_mdt_rec_reint */
};
+#define rr_mirror_id_new rr_umask
#define LMV_DESC_QOS_MAXAGE_DEFAULT 60 /* Seconds */
OBD_CONNECT2_BATCH_RPC |
OBD_CONNECT2_DMV_IMP_INHERIT |
OBD_CONNECT2_UNALIGNED_DIO |
- OBD_CONNECT2_PCCRO;
+ OBD_CONNECT2_PCCRO |
+ OBD_CONNECT2_MIRROR_ID_FIX;
#ifdef HAVE_LRU_RESIZE_SUPPORT
if (test_bit(LL_SBI_LRU_RESIZE, sbi->ll_flags))
rec->rs_cap = ll_capability_u32(op_data->op_cap);
rec->rs_fid = op_data->op_fid1;
rec->rs_bias = op_data->op_bias;
- rec->rs_mirror_id = op_data->op_mirror_id;
+ if (exp_connect_mirror_id_fix(exp))
+ rec->rs_mirror_id_new = op_data->op_mirror_id;
+ else
+ rec->rs_mirror_id_old = op_data->op_mirror_id;
lock = ldlm_handle2lock(&op_data->op_lease_handle);
if (lock != NULL) {
RETURN(0);
}
-static inline int mdt_dlmreq_unpack(struct mdt_thread_info *info) {
+static inline int mdt_dlmreq_unpack(struct mdt_thread_info *info)
+{
struct req_capsule *pill = info->mti_pill;
if (!info->mti_intent_lock &&
static int mdt_resync_unpack(struct mdt_thread_info *info)
{
+ struct obd_export *exp = mdt_info_req(info)->rq_export;
struct req_capsule *pill = info->mti_pill;
struct mdt_reint_record *rr = &info->mti_rr;
struct lu_ucred *uc = mdt_ucred(info);
uc->uc_cap = CAP_EMPTY_SET;
ll_set_capability_u32(&uc->uc_cap, rec->rs_cap);
- rr->rr_fid1 = &rec->rs_fid;
- rr->rr_mirror_id = rec->rs_mirror_id;
+ rr->rr_fid1 = &rec->rs_fid;
+ if (exp_connect_mirror_id_fix(exp))
+ rr->rr_mirror_id = (__u16)rec->rs_mirror_id_new;
+ else
+ rr->rr_mirror_id = rec->rs_mirror_id_old;
/* cookie doesn't need to be swapped but it has been swapped
* in lustre_swab_mdt_rec_reint() as rr_mtime, so here it needs
"compressed_file", /* 0x200000000 */
"unaligned_dio", /* 0x400000000 */
"conn_policy", /* 0x800000000 */
+ "sparse_read", /* 0x1000000000 */
+ "mirror_id_fix", /* 0x2000000000 */
NULL
};
__swab32s(&rr->rr_flags);
__swab32s(&rr->rr_flags_h);
__swab32s(&rr->rr_umask);
- __swab16s(&rr->rr_mirror_id);
+ __swab16s(&rr->rr_mirror_id_old);
BUILD_BUG_ON(offsetof(typeof(*rr), rr_padding_4) == 0);
};
OBD_CONNECT2_UNALIGNED_DIO);
LASSERTF(OBD_CONNECT2_CONN_POLICY == 0x800000000ULL, "found 0x%.16llxULL\n",
OBD_CONNECT2_CONN_POLICY);
+ LASSERTF(OBD_CONNECT2_MIRROR_ID_FIX == 0x2000000000ULL, "found 0x%.16llxULL\n",
+ OBD_CONNECT2_MIRROR_ID_FIX);
LASSERTF(OBD_CKSUM_CRC32 == 0x00000001UL, "found 0x%.8xUL\n",
(unsigned)OBD_CKSUM_CRC32);
(long long)(int)offsetof(struct mdt_rec_resync, rs_padding7));
LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_padding7) == 4, "found %lld\n",
(long long)(int)sizeof(((struct mdt_rec_resync *)0)->rs_padding7));
- LASSERTF((int)offsetof(struct mdt_rec_resync, rs_padding8) == 128, "found %lld\n",
- (long long)(int)offsetof(struct mdt_rec_resync, rs_padding8));
- LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_padding8) == 4, "found %lld\n",
- (long long)(int)sizeof(((struct mdt_rec_resync *)0)->rs_padding8));
- LASSERTF((int)offsetof(struct mdt_rec_resync, rs_mirror_id) == 132, "found %lld\n",
- (long long)(int)offsetof(struct mdt_rec_resync, rs_mirror_id));
- LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id) == 2, "found %lld\n",
- (long long)(int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id));
+ LASSERTF((int)offsetof(struct mdt_rec_resync, rs_mirror_id_new) == 128, "found %lld\n",
+ (long long)(int)offsetof(struct mdt_rec_resync, rs_mirror_id_new));
+ LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id_new) == 4, "found %lld\n",
+ (long long)(int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id_new));
+ LASSERTF((int)offsetof(struct mdt_rec_resync, rs_mirror_id_old) == 132, "found %lld\n",
+ (long long)(int)offsetof(struct mdt_rec_resync, rs_mirror_id_old));
+ LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id_old) == 2, "found %lld\n",
+ (long long)(int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id_old));
LASSERTF((int)offsetof(struct mdt_rec_resync, rs_padding9) == 134, "found %lld\n",
(long long)(int)offsetof(struct mdt_rec_resync, rs_padding9));
LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_padding9) == 2, "found %lld\n",
(long long)(int)offsetof(struct mdt_rec_reint, rr_umask));
LASSERTF((int)sizeof(((struct mdt_rec_reint *)0)->rr_umask) == 4, "found %lld\n",
(long long)(int)sizeof(((struct mdt_rec_reint *)0)->rr_umask));
- LASSERTF((int)offsetof(struct mdt_rec_reint, rr_mirror_id) == 132, "found %lld\n",
- (long long)(int)offsetof(struct mdt_rec_reint, rr_mirror_id));
- LASSERTF((int)sizeof(((struct mdt_rec_reint *)0)->rr_mirror_id) == 2, "found %lld\n",
- (long long)(int)sizeof(((struct mdt_rec_reint *)0)->rr_mirror_id));
+ LASSERTF((int)offsetof(struct mdt_rec_reint, rr_mirror_id_old) == 132, "found %lld\n",
+ (long long)(int)offsetof(struct mdt_rec_reint, rr_mirror_id_old));
+ LASSERTF((int)sizeof(((struct mdt_rec_reint *)0)->rr_mirror_id_old) == 2, "found %lld\n",
+ (long long)(int)sizeof(((struct mdt_rec_reint *)0)->rr_mirror_id_old));
LASSERTF((int)offsetof(struct mdt_rec_reint, rr_padding_4) == 134, "found %lld\n",
(long long)(int)offsetof(struct mdt_rec_reint, rr_padding_4));
LASSERTF((int)sizeof(((struct mdt_rec_reint *)0)->rr_padding_4) == 2, "found %lld\n",
CHECK_DEFINE_64X(OBD_CONNECT2_COMPRESS);
CHECK_DEFINE_64X(OBD_CONNECT2_UNALIGNED_DIO);
CHECK_DEFINE_64X(OBD_CONNECT2_CONN_POLICY);
+ CHECK_DEFINE_64X(OBD_CONNECT2_MIRROR_ID_FIX);
BLANK_LINE();
CHECK_VALUE_X(OBD_CKSUM_CRC32);
CHECK_MEMBER(mdt_rec_resync, rs_padding5);
CHECK_MEMBER(mdt_rec_resync, rs_padding6);
CHECK_MEMBER(mdt_rec_resync, rs_padding7);
- CHECK_MEMBER(mdt_rec_resync, rs_padding8);
- CHECK_MEMBER(mdt_rec_resync, rs_mirror_id);
+ CHECK_MEMBER(mdt_rec_resync, rs_mirror_id_new);
+ CHECK_MEMBER(mdt_rec_resync, rs_mirror_id_old);
CHECK_MEMBER(mdt_rec_resync, rs_padding9);
}
CHECK_MEMBER(mdt_rec_reint, rr_flags);
CHECK_MEMBER(mdt_rec_reint, rr_flags_h);
CHECK_MEMBER(mdt_rec_reint, rr_umask);
- CHECK_MEMBER(mdt_rec_reint, rr_mirror_id);
+ CHECK_MEMBER(mdt_rec_reint, rr_mirror_id_old);
CHECK_MEMBER(mdt_rec_reint, rr_padding_4);
}
OBD_CONNECT2_UNALIGNED_DIO);
LASSERTF(OBD_CONNECT2_CONN_POLICY == 0x800000000ULL, "found 0x%.16llxULL\n",
OBD_CONNECT2_CONN_POLICY);
+ LASSERTF(OBD_CONNECT2_MIRROR_ID_FIX == 0x2000000000ULL, "found 0x%.16llxULL\n",
+ OBD_CONNECT2_MIRROR_ID_FIX);
LASSERTF(OBD_CKSUM_CRC32 == 0x00000001UL, "found 0x%.8xUL\n",
(unsigned)OBD_CKSUM_CRC32);
(long long)(int)offsetof(struct mdt_rec_resync, rs_padding7));
LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_padding7) == 4, "found %lld\n",
(long long)(int)sizeof(((struct mdt_rec_resync *)0)->rs_padding7));
- LASSERTF((int)offsetof(struct mdt_rec_resync, rs_padding8) == 128, "found %lld\n",
- (long long)(int)offsetof(struct mdt_rec_resync, rs_padding8));
- LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_padding8) == 4, "found %lld\n",
- (long long)(int)sizeof(((struct mdt_rec_resync *)0)->rs_padding8));
- LASSERTF((int)offsetof(struct mdt_rec_resync, rs_mirror_id) == 132, "found %lld\n",
- (long long)(int)offsetof(struct mdt_rec_resync, rs_mirror_id));
- LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id) == 2, "found %lld\n",
- (long long)(int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id));
+ LASSERTF((int)offsetof(struct mdt_rec_resync, rs_mirror_id_new) == 128, "found %lld\n",
+ (long long)(int)offsetof(struct mdt_rec_resync, rs_mirror_id_new));
+ LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id_new) == 4, "found %lld\n",
+ (long long)(int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id_new));
+ LASSERTF((int)offsetof(struct mdt_rec_resync, rs_mirror_id_old) == 132, "found %lld\n",
+ (long long)(int)offsetof(struct mdt_rec_resync, rs_mirror_id_old));
+ LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id_old) == 2, "found %lld\n",
+ (long long)(int)sizeof(((struct mdt_rec_resync *)0)->rs_mirror_id_old));
LASSERTF((int)offsetof(struct mdt_rec_resync, rs_padding9) == 134, "found %lld\n",
(long long)(int)offsetof(struct mdt_rec_resync, rs_padding9));
LASSERTF((int)sizeof(((struct mdt_rec_resync *)0)->rs_padding9) == 2, "found %lld\n",
(long long)(int)offsetof(struct mdt_rec_reint, rr_umask));
LASSERTF((int)sizeof(((struct mdt_rec_reint *)0)->rr_umask) == 4, "found %lld\n",
(long long)(int)sizeof(((struct mdt_rec_reint *)0)->rr_umask));
- LASSERTF((int)offsetof(struct mdt_rec_reint, rr_mirror_id) == 132, "found %lld\n",
- (long long)(int)offsetof(struct mdt_rec_reint, rr_mirror_id));
- LASSERTF((int)sizeof(((struct mdt_rec_reint *)0)->rr_mirror_id) == 2, "found %lld\n",
- (long long)(int)sizeof(((struct mdt_rec_reint *)0)->rr_mirror_id));
+ LASSERTF((int)offsetof(struct mdt_rec_reint, rr_mirror_id_old) == 132, "found %lld\n",
+ (long long)(int)offsetof(struct mdt_rec_reint, rr_mirror_id_old));
+ LASSERTF((int)sizeof(((struct mdt_rec_reint *)0)->rr_mirror_id_old) == 2, "found %lld\n",
+ (long long)(int)sizeof(((struct mdt_rec_reint *)0)->rr_mirror_id_old));
LASSERTF((int)offsetof(struct mdt_rec_reint, rr_padding_4) == 134, "found %lld\n",
(long long)(int)offsetof(struct mdt_rec_reint, rr_padding_4));
LASSERTF((int)sizeof(((struct mdt_rec_reint *)0)->rr_padding_4) == 2, "found %lld\n",