__u64 offset;
__u32 len;
__u32 flags;
+ __u32 xid;
void *page;
};
int ost_unpack_rep(char *buf, int len, struct ptlrep_hdr **hdr, union ptl_rep *rep);
void ost_pack_niobuf(void **tmp, void *addr, __u64 offset, __u32 len,
- __u32 flags);
+ __u32 flags, __u32 xid);
void ost_unpack_niobuf(void **tmp, struct niobuf **nbp);
void ost_pack_ioo(void **tmp, struct obdo *oa, int bufcnt);
void ost_unpack_ioo(void **tmp, struct obd_ioobj **ioop);
}
void ost_pack_niobuf(void **tmp, void *addr, __u64 offset, __u32 len,
- __u32 flags)
+ __u32 flags, __u32 xid)
{
struct niobuf *ioo = *tmp;
char *c = *tmp;
ioo->offset = NTOH__u64(offset);
ioo->len = NTOH__u32(len);
ioo->flags = NTOH__u32(flags);
+ ioo->xid = NTOH__u32(xid);
*tmp = c + sizeof(*ioo);
}
bulk[n]->b_buflen = PAGE_SIZE;
bulk[n]->b_portal = OST_BULK_PORTAL;
ost_pack_niobuf(&ptr2, bulk[n]->b_buf, offset[n],
- count[n], flags[n]);
+ count[n], flags[n], bulk[n]->b_xid);
n++;
}
}
ost_pack_ioo(&ptr1, oa[i], oa_bufs[i]);
for (j = 0; j < oa_bufs[i]; j++) {
ost_pack_niobuf(&ptr2, kmap(buf[n]), offset[n],
- count[n], flags[n]);
+ count[n], flags[n], 0);
n++;
}
}
barrier();
} else {
for (i = 0; i < niocount; i++) {
- struct ptlrpc_service *srv =
- req->rq_obd->u.ost.ost_service;
-
bulk = ptlrpc_prep_bulk(&req->rq_peer);
if (bulk == NULL) {
CERROR("cannot alloc bulk desc\n");
goto out;
}
- spin_lock(&srv->srv_lock);
- bulk->b_xid = srv->srv_xid++;
- spin_unlock(&srv->srv_lock);
-
src = &((struct niobuf *)tmp2)[i];
+ bulk->b_xid = src->xid;
bulk->b_buf = (void *)(unsigned long)src->addr;
bulk->b_buflen = PAGE_SIZE;
rc = ptlrpc_send_bulk(bulk, OST_BULK_PORTAL);
}
OBD_FREE(bulk, sizeof(*bulk));
+ bulk = NULL;
}
#if 0