exp_connecting:1,
exp_replay_needed:1,
exp_need_sync:1, /* needs sync from connect */
+ exp_bflag:1, /* for 1.6 only to track
+ MDS_BFLAG_EXT_FLAGS */
exp_libclient:1; /* liblustre client? */
struct list_head exp_queued_rpc; /* RPC to be handled */
union {
mds_pack_inode2fid(&body->fid1, inode);
body->flags = reqbody->flags; /* copy MDS_BFLAG_EXT_FLAGS if present */
+
+ /* Compatibility for clients that do not set BLFAG_EXT_FLAGS in
+ * intent lock requests even though they check it in the reply.
+ * In 1.8+ this is set unconditionally, but 1.4.6- clients do
+ * not understand this flag. b=17465 */
+ if ((reqbody->flags & MDS_BFLAG_EXT_FLAGS) &&
+ !obd->obd_self_export->exp_bflag) {
+ spin_lock(&obd->obd_self_export->exp_lock);
+ obd->obd_self_export->exp_bflag = 1;
+ spin_unlock(&obd->obd_self_export->exp_lock);
+ }
+
mds_pack_inode2body(body, inode);
reply_off++;
found_child:
mds_pack_inode2fid(&body->fid1, dchild->d_inode);
+ if (obd->obd_self_export->exp_bflag)
+ body->flags |= MDS_BFLAG_EXT_FLAGS;
mds_pack_inode2body(body, dchild->d_inode);
if (S_ISREG(dchild->d_inode->i_mode)) {