#include <string.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
+#include <stdio.h>
#include <rdma/rdma_cma.h>
#include <rdma/rdma_verbs.h>
rs->sseq_comp = (uint16_t) rs_msg_data(imm_data);
break;
case RS_OP_IOMAP_SGL:
+ printf("%s - updated iomap %d\n", __func__, rs_msg_data(imm_data));
/* The iomap was updated, that's nice to know. */
break;
case RS_OP_CTRL:
}
break;
case RS_OP_WRITE:
+ printf("%s - write op - BAD\n", __func__);
/* We really shouldn't be here. */
break;
default:
rs->state = rs_disconnected;
break;
case RS_OP_IOMAP_SGL:
+ printf("%s - iomap update completed\n", __func__);
rs->sqe_avail++;
rs->sbuf_bytes_avail += sizeof(struct rs_iomap);
break;
struct rs_iomap iom;
int ret;
+ printf("%s\n", __func__);
fastlock_acquire(&rs->iomap_lock);
while (!dlist_empty(&rs->iomap_queue)) {
if (!rs_can_send(rs)) {
break;
}
+<<<<<<< current
rs->iomap_pending = !dlist_empty(&rs->iomap_queue);
+=======
+ rs->iomap_pending = dlist_empty(&rs->iomap_queue);
+ printf("%s - pending = %d\n", __func__, rs->iomap_pending);
+>>>>>>> patched
fastlock_release(&rs->iomap_lock);
return ret;
}
{
int i;
+ printf("%s\n", __func__);
if (!rs->remote_iomappings) {
+ printf("%s - allocate remote iomappings\n", __func__);
rs->remote_iomappings = calloc(rs->remote_iomap.length,
sizeof(*rs->remote_iomappings));
if (!rs->remote_iomappings)
}
for (i = 0; i < rs->remote_iomap.length; i++) {
+ printf("%s - looking for empty slot %d\n", __func__, i);
if (!rs->remote_iomappings[i].mr)
return &rs->remote_iomappings[i];
}
+ printf("%s - all slots filled\n", __func__);
return NULL;
}
struct rs_iomap_mr *iomr;
int access = IBV_ACCESS_LOCAL_WRITE;
+ printf("%s\n", __func__);
rs = idm_at(&idm, socket);
if ((rs->state != rs_connect_rdwr) || (prot & ~(PROT_WRITE | PROT_NONE)))
return ERR(EINVAL);
fastlock_acquire(&rs->iomap_lock);
if (prot & PROT_WRITE) {
+ printf("%s - remote mapping\n", __func__);
iomr = rs_get_iomap_mr(rs);
access |= IBV_ACCESS_REMOTE_WRITE;
} else {
+ printf("%s - local mapping\n", __func__);
iomr = calloc(1, sizeof *iomr);
iomr->index = -1;
}
if (offset == -1)
offset = (uintptr_t) buf;
+ printf("%s mapped to offset %lld\n", __func__, offset);
iomr->offset = offset;
atomic_init(&iomr->refcnt);
atomic_set(&iomr->refcnt, 1);
if (iomr->index >= 0) {
+ printf("%s - map pending\n", __func__);
dlist_insert_tail(&iomr->entry, &rs->iomap_queue);
rs->iomap_pending = 1;
} else {
dlist_entry *entry;
int ret = 0;
+ printf("%s\n", __func__);
rs = idm_at(&idm, socket);
fastlock_acquire(&rs->iomap_lock);
static struct rs_iomap *rs_find_iomap(struct rsocket *rs, off_t offset)
{
int i;
+ printf("%s\n", __func__);
for (i = 0; i < rs->target_iomap_size; i++) {
+ printf("%s - checking target index %d\n", __func__, i);
if (offset >= rs->target_iomap[i].offset &&
offset < rs->target_iomap[i].offset + rs->target_iomap[i].sge.length)
return &rs->target_iomap[i];
}
+ printf("%s - offset not found\n", __func__);
return NULL;
}
uint32_t xfer_size, olen = RS_OLAP_START_SIZE;
int ret = 0;
+ printf("%s\n", __func__);
rs = idm_at(&idm, socket);
fastlock_acquire(&rs->slock);
if (rs->iomap_pending) {
if (ret)
goto out;
}
+ printf("%s - initiating RDMA write\n", __func__);
for (; left; left -= xfer_size, buf += xfer_size, offset += xfer_size) {
if (!iom || offset > iom->offset + iom->sge.length) {
iom = rs_find_iomap(rs, offset);