ladvise RPC doesn't have OBD_MD_FLGROUP set, when RPC
reaches server, tgt_validate_obdo() will corrupt the FID
if it's seq is in FID_SEQ_NORMAL range.
Do not mess with seq in obdo_to_ioobj() and tgt_validate_obdo(),
since 2.0 all RPCs should have OBD_MD_FLGROUP set.
Add OBD_MD_FLGROUP for ladvise RPC to fix new client talking
to old servers.
Change-Id: I373b7f32458b18e29d9bb716a912fe4a54eccac5
Signed-off-by: Li Dongyang <dongyangli@ddn.com>
Reviewed-on: https://review.whamcloud.com/48080
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
void obdo_to_ioobj(const struct obdo *oa, struct obd_ioobj *ioobj)
{
ioobj->ioo_oid = oa->o_oi;
- if (unlikely(!(oa->o_valid & OBD_MD_FLGROUP)))
- ostid_set_seq_mdt0(&ioobj->ioo_oid);
-
/*
* Since 2.4 this does not contain o_mode in the low 16 bits.
* Instead, it holds (bd_md_max_brw - 1) for multi-bulk BRW RPCs
memset(oa, 0, sizeof(*oa));
oa->o_oi = loi->loi_oi;
- oa->o_valid = OBD_MD_FLID;
+ oa->o_valid = OBD_MD_FLID | OBD_MD_FLGROUP;
obdo_set_parent_fid(oa, lio->li_fid);
ladvise = ladvise_hdr->lah_advise;
/* Note: this check might be forced in 2.5 or 2.6, i.e.
* all of the requests are required to setup FLGROUP */
- if (unlikely(!(oa->o_valid & OBD_MD_FLGROUP))) {
- ostid_set_seq_mdt0(oi);
+ if (unlikely(!(oa->o_valid & OBD_MD_FLGROUP)))
oa->o_valid |= OBD_MD_FLGROUP;
- seq = ostid_seq(oi);
- }
if (unlikely(!(fid_seq_is_idif(seq) || fid_seq_is_mdt0(seq) ||
fid_seq_is_norm(seq) || fid_seq_is_echo(seq))))