continue;
if (ocapa->c_capa.lc_mdsid != mdsid)
continue;
- if (ocapa->c_capa.lc_op != capa_op)
+ if ((ocapa->c_capa.lc_op & capa_op) != ocapa->c_capa.lc_op)
continue;
if (ocapa->c_type != type)
continue;
/* TODO: this could be optimized: thie capability can be
* found from ll_inode_info->lli_capas. */
- capa_op = (opc == OST_WRITE) ? CAPA_WRITE : CAPA_READ;
-get_capa:
+ /* partial write might cause read, both CAPA_READ and CAPA_WRITE
+ * capability could be used here */
+ capa_op = (opc == OST_WRITE) ? CAPA_WRITE : CAPA_READ | CAPA_WRITE;
ocapa = capa_get(oa->o_fsuid, capa_op, raw_id->li_fid.lf_group,
raw_id->li_stc.u.e3s.l3s_ino, CLIENT_CAPA);
- if (!ocapa) {
- if (opc == OST_READ && capa_op == MAY_READ) {
- /* partial write might cause read, MAY_WRITE capability
- * should be used here */
- capa_op = MAY_WRITE;
- goto get_capa;
- }
- }
size[bufcnt++] = sizeof(*body);
size[bufcnt++] = sizeof(*ioobj);