- if (rkey && bkey && capa_key_cmp(&rkey->k_key, &bkey->k_key) < 0) {
- tmp = rkey;
- rkey = bkey;
- bkey = tmp;
- }
-
- if ((!rkey || rkey->k_key.lk_keyid != capa->lc_keyid) &&
- (!bkey || bkey->k_key.lk_keyid != capa->lc_keyid)) {
- spin_unlock(&filter->fo_capa_lock);
- GOTO(out, rc = -ESTALE);
- }
-
- LASSERT(rkey);
-
- memcpy(&tcapa, capa, sizeof(tcapa));
- tcapa.lc_keyid = rkey->k_key.lk_keyid;
- memcpy(hmac_key, rkey->k_key.lk_key, sizeof(hmac_key));
- spin_unlock(&filter->fo_capa_lock);
-
- capa_hmac(filter->fo_capa_hmac, hmac_key, &tcapa);
-
- /* store in capa cache */
- ocapa = capa_get(capa->lc_uid, capa->lc_op, capa->lc_mdsid,
- capa->lc_ino, FILTER_CAPA, capa, NULL, NULL);
- if (!ocapa)
- GOTO(out, rc = -ENOMEM);
-
- if (bkey) {
- spin_lock(&filter->fo_capa_lock);
- tcapa.lc_keyid = bkey->k_key.lk_keyid;
- memcpy(hmac_key, bkey->k_key.lk_key, sizeof(hmac_key));
- ocapa->c_bkeyid = bkey->k_key.lk_keyid;
- spin_unlock(&filter->fo_capa_lock);