Initialize the unused fields in the on-disk nodemap records to zero.
This will allow them to be used in the future for expanded nodemap
functionality.
It may be that initial usage will also depend on storing a magic
into one of the fields so that the rest of the fields can be trusted.
Test-Parameters: trivial testlist=sanity-sec
Test-Parameters: testlist=sanity-quota
Test-Parameters: testlist=sanity-selinux
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I58f46396911e28f91e03a287c5b308dcaf3ebbe5
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/56450
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Sebastien Buisson <sbuisson@ddn.com>
Reviewed-by: Timothy Day <timday@amazon.com>
Reviewed-by: Maximilian Dilger <mdilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
char ncr_name[LUSTRE_NODEMAP_NAME_LENGTH + 1];
enum nm_flag_bits ncr_flags:8;
enum nm_flag2_bits ncr_flags2:8;
- __u8 ncr_padding1;
+ __u8 ncr_padding1; /* zeroed since 2.16 */
__u32 ncr_squash_projid;
__u32 ncr_squash_uid;
__u32 ncr_squash_gid;
struct nodemap_range_rec {
lnet_nid_t nrr_start_nid;
lnet_nid_t nrr_end_nid;
- __u64 nrr_padding1;
- __u64 nrr_padding2;
+ __u64 nrr_padding1; /* zeroed since 2.16 */
+ __u64 nrr_padding2; /* zeroed since 2.16 */
};
struct nodemap_range2_rec {
struct lnet_nid nrr_nid_prefix;
- __u32 nrr_padding1; /* these fields may be used if */
- __u32 nrr_padding2; /* nrr_nid_prefix.nid_size > 12 */
- __u16 nrr_padding3;
- __u8 nrr_padding4;
+ __u32 nrr_padding1; /* padding may be used for nid_prefix */
+ __u32 nrr_padding2; /* if nrr_nid_prefix.nid_size > 12 */
+ __u16 nrr_padding3; /* zeroed since 2.16 */
+ __u8 nrr_padding4; /* zeroed since 2.16 */
__u8 nrr_netmask;
};
struct nodemap_id_rec {
__u32 nir_id_fs;
- __u32 nir_padding1;
- __u64 nir_padding2;
- __u64 nir_padding3;
- __u64 nir_padding4;
+ __u32 nir_padding1; /* zeroed since 2.16 */
+ __u64 nir_padding2; /* zeroed since 2.16 */
+ __u64 nir_padding3; /* zeroed since 2.16 */
+ __u64 nir_padding4; /* zeroed since 2.16 */
};
struct nodemap_global_rec {
__u8 ngr_is_active;
- __u8 ngr_padding1;
- __u16 ngr_padding2;
- __u32 ngr_padding3;
- __u64 ngr_padding4;
- __u64 ngr_padding5;
- __u64 ngr_padding6;
+ __u8 ngr_padding1; /* zeroed since 2.16 */
+ __u16 ngr_padding2; /* zeroed since 2.16 */
+ __u32 ngr_padding3; /* zeroed since 2.16 */
+ __u64 ngr_padding4; /* zeroed since 2.16 */
+ __u64 ngr_padding5; /* zeroed since 2.16 */
+ __u64 ngr_padding6; /* zeroed since 2.16 */
};
struct nodemap_cluster_roles_rec {
- __u64 ncrr_roles; /* enum nodemap_rbac_roles */
- __u64 ncrr_unused1;
- __u64 ncrr_unused2;
- __u64 ncrr_unused3;
+ __u64 ncrr_roles; /* enum nodemap_rbac_roles */
+ __u64 ncrr_padding1; /* zeroed since 2.16 (always) */
+ __u64 ncrr_padding2; /* zeroed since 2.16 (always) */
+ __u64 ncrr_padding3; /* zeroed since 2.16 (always) */
};
union nodemap_rec {
{
BUILD_BUG_ON(sizeof(nr->ncr.ncr_name) != sizeof(nodemap->nm_name));
- strncpy(nr->ncr.ncr_name, nodemap->nm_name, sizeof(nr->ncr.ncr_name));
- nr->ncr.ncr_squash_uid = cpu_to_le32(nodemap->nm_squash_uid);
- nr->ncr.ncr_squash_gid = cpu_to_le32(nodemap->nm_squash_gid);
- nr->ncr.ncr_squash_projid = cpu_to_le32(nodemap->nm_squash_projid);
+ strscpy(nr->ncr.ncr_name, nodemap->nm_name, sizeof(nr->ncr.ncr_name));
nr->ncr.ncr_flags =
(nodemap->nmf_trust_client_ids ?
NM_FL_TRUST_CLIENT_IDS : 0) |
nr->ncr.ncr_flags2 =
(nodemap->nmf_readonly_mount ?
NM_FL2_READONLY_MOUNT : 0);
+ nr->ncr.ncr_padding1 = 0;
+ nr->ncr.ncr_squash_projid = cpu_to_le32(nodemap->nm_squash_projid);
+ nr->ncr.ncr_squash_uid = cpu_to_le32(nodemap->nm_squash_uid);
+ nr->ncr.ncr_squash_gid = cpu_to_le32(nodemap->nm_squash_gid);
}
static void nodemap_cluster_roles_rec_init(union nodemap_rec *nr,
{
struct nodemap_cluster_roles_rec *ncrr = &nr->ncrr;
- memset(ncrr, 0, sizeof(struct nodemap_cluster_roles_rec));
ncrr->ncrr_roles = cpu_to_le64(nodemap->nmf_rbac);
+ ncrr->ncrr_padding1 = 0;
+ ncrr->ncrr_padding2 = 0;
+ ncrr->ncrr_padding3 = 0;
}
static void nodemap_idmap_key_init(struct nodemap_key *nk, unsigned int nm_id,
static void nodemap_idmap_rec_init(union nodemap_rec *nr, u32 id_fs)
{
nr->nir.nir_id_fs = cpu_to_le32(id_fs);
+ nr->nir.nir_padding1 = 0;
+ nr->nir.nir_padding2 = 0;
+ nr->nir.nir_padding3 = 0;
+ nr->nir.nir_padding4 = 0;
}
static void nodemap_range_key_init(struct nodemap_key *nk,
{
if (range->rn_netmask) {
nr->nrr2.nrr_nid_prefix = range->rn_start;
+ nr->nrr2.nrr_padding1 = 0;
+ nr->nrr2.nrr_padding2 = 0;
+ nr->nrr2.nrr_padding3 = 0;
+ nr->nrr2.nrr_padding4 = 0;
nr->nrr2.nrr_netmask = range->rn_netmask;
if (NID_BYTES(&nr->nrr2.nrr_nid_prefix) >
nid4[1] = lnet_nid_to_nid4(&range->rn_end);
nr->nrr.nrr_start_nid = cpu_to_le64(nid4[0]);
nr->nrr.nrr_end_nid = cpu_to_le64(nid4[1]);
+ nr->nrr.nrr_padding1 = 0;
+ nr->nrr.nrr_padding2 = 0;
}
return 0;
static void nodemap_global_rec_init(union nodemap_rec *nr, bool active)
{
nr->ngr.ngr_is_active = active;
+ nr->ngr.ngr_padding1 = 0;
+ nr->ngr.ngr_padding2 = 0;
+ nr->ngr.ngr_padding3 = 0;
+ nr->ngr.ngr_padding4 = 0;
+ nr->ngr.ngr_padding5 = 0;
+ nr->ngr.ngr_padding6 = 0;
}
/* should be called with dt_write lock */
(long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_roles));
LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_roles) == 8, "found %lld\n",
(long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_roles));
- LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused1) == 8, "found %lld\n",
- (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused1));
- LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused1) == 8, "found %lld\n",
- (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused1));
- LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused2) == 16, "found %lld\n",
- (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused2));
- LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused2) == 8, "found %lld\n",
- (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused2));
- LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused3) == 24, "found %lld\n",
- (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused3));
- LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused3) == 8, "found %lld\n",
- (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused3));
+ LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding1) == 8, "found %lld\n",
+ (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding1));
+ LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding1) == 8, "found %lld\n",
+ (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding1));
+ LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding2) == 16, "found %lld\n",
+ (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding2));
+ LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding2) == 8, "found %lld\n",
+ (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding2));
+ LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding3) == 24, "found %lld\n",
+ (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding3));
+ LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding3) == 8, "found %lld\n",
+ (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding3));
/* Checks for union nodemap_rec */
LASSERTF((int)sizeof(union nodemap_rec) == 32, "found %lld\n",
[[ "$SLOW" == "no" ]] && EXCEPT_SLOW="26"
-NODEMAP_TESTS=$(seq 7 26)
+NODEMAP_TESTS={7..26}
if ! check_versions; then
echo "It is NOT necessary to test nodemap under interoperation mode"
BLANK_LINE();
CHECK_STRUCT(nodemap_cluster_roles_rec);
CHECK_MEMBER(nodemap_cluster_roles_rec, ncrr_roles);
- CHECK_MEMBER(nodemap_cluster_roles_rec, ncrr_unused1);
- CHECK_MEMBER(nodemap_cluster_roles_rec, ncrr_unused2);
- CHECK_MEMBER(nodemap_cluster_roles_rec, ncrr_unused3);
+ CHECK_MEMBER(nodemap_cluster_roles_rec, ncrr_padding1);
+ CHECK_MEMBER(nodemap_cluster_roles_rec, ncrr_padding2);
+ CHECK_MEMBER(nodemap_cluster_roles_rec, ncrr_padding3);
}
static void check_nodemap_rec(void)
(long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_roles));
LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_roles) == 8, "found %lld\n",
(long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_roles));
- LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused1) == 8, "found %lld\n",
- (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused1));
- LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused1) == 8, "found %lld\n",
- (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused1));
- LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused2) == 16, "found %lld\n",
- (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused2));
- LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused2) == 8, "found %lld\n",
- (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused2));
- LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused3) == 24, "found %lld\n",
- (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_unused3));
- LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused3) == 8, "found %lld\n",
- (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_unused3));
+ LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding1) == 8, "found %lld\n",
+ (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding1));
+ LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding1) == 8, "found %lld\n",
+ (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding1));
+ LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding2) == 16, "found %lld\n",
+ (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding2));
+ LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding2) == 8, "found %lld\n",
+ (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding2));
+ LASSERTF((int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding3) == 24, "found %lld\n",
+ (long long)(int)offsetof(struct nodemap_cluster_roles_rec, ncrr_padding3));
+ LASSERTF((int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding3) == 8, "found %lld\n",
+ (long long)(int)sizeof(((struct nodemap_cluster_roles_rec *)0)->ncrr_padding3));
/* Checks for union nodemap_rec */
LASSERTF((int)sizeof(union nodemap_rec) == 32, "found %lld\n",