function spawn_pfiledm {
"${XSEG_HOME}/peers/user/pfiled" -p "$MBPORT" -g "${SPEC}" -n \
- ${NR_OPS} "${PITHOSMAPS}" "${MAPS}" -v &> "${XSEG_LOGS}/pfiledm-${HOSTNAME}" &
+ ${NR_OPS} "${PITHOSMAPS}" "${MAPS}" &> "${XSEG_LOGS}/pfiledm-${HOSTNAME}" &
}
function spawn_vlmcd {
}
function spawn_mapperdc {
- echo "${XSEG_HOME}/peers/user/mt-mapperd -t 1 -p $MPORT -bp $BPORT -mbp $MBPORT -g \"${SPEC}\"\
- -v 3 &> \"${XSEG_LOGS}/mapperd-${HOSTNAME}\" &"
pgrep -f "mt-mapperd" || \
"${XSEG_HOME}/peers/user/mt-mapperd" -t 1 -p "$MPORT" -bp "$BPORT" -mbp "$MBPORT" -g "${SPEC}"\
- -v 3 &> "${XSEG_LOGS}/mapperd-${HOSTNAME}" &
+ &> "${XSEG_LOGS}/mapperd-${HOSTNAME}" &
# alloc_requests "$MPORT:0" 128
}
struct xseg_request *xreq )
{
void *data;
+ if (!xreq) {
+ XSEGLOG("Invalid xreq");
+ return -EIO;
+ }
if (xreq->state & XS_FAILED)
return -ENOENT;
return -EIO;
data = xseg_get_data(xsegbd_dev->xseg, xreq);
+ if (!data) {
+ XSEGLOG("Invalid req data");
+ return -EIO;
+ }
xsegbd_dev->sectors = *((uint64_t *) data) / 512ULL;
return 0;
}
goto out_queue;
}
WARN_ON(xseg_signal(xsegbd_dev->xseg, p) < 0);
-
+ XSEGLOG("Before wait for completion, xreq %lx", (unsigned long) xreq);
wait_for_completion_interruptible(&comp);
- //XSEGLOG("Woken up after wait_for_completion_interruptible()\n");
+ XSEGLOG("Woken up after wait_for_completion_interruptible(), xreq: %lx", (unsigned long) xreq);
ret = update_dev_sectors_from_request(xsegbd_dev, xreq);
//XSEGLOG("get_size: sectors = %ld\n", (long)xsegbd_dev->sectors);
out:
pending->request = NULL;
comp = pending->comp;
pending->comp = NULL;
+ if (blkreq)
+ blk_end_request_all(blkreq, -EIO);
+ if (comp)
+ complete(comp);
}
- if (blkreq)
- blk_end_request_all(blkreq, -EIO);
- if (comp)
- complete(comp);
xlock_release(&xsegbd_dev->blk_queue_pending.lock);
}
//assert targetlen <= XSEG_MAX_TARGETLEN
strncpy(buf, target, targetlen);
buf[targetlen] = 0;
- XSEGLOG2(&lc, D, "looking up map %s, len %u", buf, targetlen);
+ XSEGLOG2(&lc, E, "looking up map %s, len %u", buf, targetlen);
r = xhash_lookup(mapper->hashmaps, (xhashidx) buf, (xhashidx *) &m);
if (r < 0)
return NULL;
goto out;
}
- XSEGLOG2(&lc, D, "Inserting map %s, len: %d", map->volume, strlen(map->volume));
+ XSEGLOG2(&lc, E, "Inserting map %s, len: %d", map->volume, strlen(map->volume));
r = xhash_insert(mapper->hashmaps, (xhashidx) map->volume, (xhashidx) map);
if (r == -XHASH_ERESIZE) {
xhashidx shift = xhash_grow_size_shift(map->objects);
{
struct mapperd *mapper = __get_mapperd(peer);
struct mapper_io *mio = __get_mapper_io(pr);
+ struct map *map = mn->map;
void *dummy;
int r = -1, i;
xport p;
char new_target[XSEG_MAX_TARGETLEN + 1];
unsigned char buf[SHA256_DIGEST_SIZE]; //assert sha256_digest_size(32) <= MAXTARGETLEN
char new_object[XSEG_MAX_TARGETLEN + 20]; //20 is an arbitrary padding able to hold string representation of objectidx
- strncpy(new_object, mn->object, mn->objectlen);
- sprintf(new_object + mn->objectlen, "%u", mn->objectidx); //sprintf adds null termination
+ strncpy(new_object, map->volume, map->volumelen);
+ sprintf(new_object + map->volumelen, "%u", mn->objectidx); //sprintf adds null termination
new_object[XSEG_MAX_TARGETLEN + 19] = 0;
gcry_md_hash_buffer(GCRY_MD_SHA256, buf, new_object, strlen(new_object));
goto out_object_copying;
}
- XSEGLOG2(&lc, E, "pr->req->offset: %llu, pr->req->size %llu, block_size %u\n",
- (unsigned long long) pr->req->offset,
- (unsigned long long) pr->req->size,
- block_size);
+// XSEGLOG2(&lc, D, "pr->req->offset: %llu, pr->req->size %llu, block_size %u\n",
+// (unsigned long long) pr->req->offset,
+// (unsigned long long) pr->req->size,
+// block_size);
strncpy(reply->segs[idx].target, mn->object, mn->objectlen);
reply->segs[idx].targetlen = mn->objectlen;
reply->segs[idx].target[mn->objectlen] = 0;
struct peer_req * preq = (struct peer_req *) idx;
fail(peer, preq);
}
+ return 0;
out_err:
XSEGLOG2(&lc, E, "Cannot get map node");