[ -z "${MAPS}" ] && MAPS="/home/user/archip/xseg/peers/user/foo"
[ -z "${PITHOS}" ] && PITHOS="/srv/pithos/data/blocks"
[ -z "${PITHOSMAPS}" ] && PITHOSMAPS="/srv/pithos/data/maps"
- [ -z "${XSEG_LOGS}" ] && XSEG_LOGS="/home/philipgian/archip/logs"
+ [ -z "${XSEG_LOGS}" ] && XSEG_LOGS="/srv/archip/logs"
[ -z "${DEVICE_PREFIX}" ] && DEVICE_PREFIX="/dev/xsegbd"
[ -z "${XSEGBD_SYSFS}" ] && XSEGBD_SYSFS="/sys/bus/xsegbd"
[ -z "${CHRDEV_NAME}" ] && CHRDEV_NAME="/dev/`cat /proc/devices | grep segdev | awk '{print $2}'`"
map->ref--;
if (!map->ref){
//clean up map
- remove_map(mapper, map);
uint64_t i;
for (i = 0; i < calc_map_obj(map); i++) {
mn = get_mapnode(map, i);
static int do_dropcache(struct peer_req *pr, struct map *map)
{
struct map_node *mn;
+ struct peerd *peer = pr->peer;
+ struct mapperd *mapper = __get_mapperd(peer);
uint64_t i;
map->flags |= MF_MAP_DROPPING_CACHE;
for (i = 0; i < calc_map_obj(map); i++) {
}
map->flags &= ~MF_MAP_DROPPING_CACHE;
map->flags |= MF_MAP_DESTROYED;
+ remove_map(mapper, map);
put_map(map); // put map here to destroy it (matches m->ref = 1 on map create)
return 0;
}
uint64_t deleted = 0;
while (deleted < nr_obj){
deleted = 0;
- for (i = 0; i < nr_obj; i++)
+ for (i = 0; i < nr_obj; i++){
mn = get_mapnode(map, i);
if (mn) {
if (!(mn->flags & MF_OBJECT_DESTROYED)){
static int open_load_map(struct peer_req *pr, struct map *map, uint32_t flags)
{
int r, opened = 0;
+retry_open:
if (flags & MF_EXCLUSIVE){
r = open_map(pr, map);
if (r < 0) {
if (flags & MF_FORCE)
- return -1; // fail or retry?
+ goto retry_open;
} else {
opened = 1;
}