status_t dlist_add(nspace *vol, ino_t vnid) { DPRINTF(0, ("dlist_add vnid %Lx\n", vnid)); ASSERT(IS_DIR_CLUSTER_VNID(vnid)); ASSERT(dlist_find(vol, CLUSTER_OF_DIR_CLUSTER_VNID(vnid)) == -1LL); ASSERT(vnid != 0); if (vol->dlist.entries == vol->dlist.allocated) { if (dlist_realloc(vol, vol->dlist.allocated + DLIST_ENTRY_QUANTUM) < 0) return -ENOMEM; } vol->dlist.vnid_list[vol->dlist.entries++] = vnid; return B_OK; }
status_t dlist_add(nspace *vol, ino_t vnid) { DPRINTF(0, ("dlist_add vnid %" B_PRIdINO "\n", vnid)); ASSERT(IS_DIR_CLUSTER_VNID(vnid) || IS_ARTIFICIAL_VNID(vnid)); ASSERT(vnid != 0); // XXX: check for duplicate entries if (vol->dlist.entries == vol->dlist.allocated) { if (dlist_realloc(vol, vol->dlist.allocated + DLIST_ENTRY_QUANTUM) < 0) return B_ERROR; } vol->dlist.vnid_list[vol->dlist.entries++] = vnid; return B_OK; }
status_t dlist_remove(nspace *vol, ino_t vnid) { uint32 i; DPRINTF(0, ("dlist_remove vnid %" B_PRIdINO "\n", vnid)); for (i=0;i<vol->dlist.entries;i++) if (vol->dlist.vnid_list[i] == vnid) break; ASSERT(i < vol->dlist.entries); if (i == vol->dlist.entries) return ENOENT; for (;i<vol->dlist.entries-1;i++) vol->dlist.vnid_list[i] = vol->dlist.vnid_list[i+1]; vol->dlist.entries--; if (vol->dlist.allocated - vol->dlist.entries > 2*DLIST_ENTRY_QUANTUM) return dlist_realloc(vol, vol->dlist.allocated - DLIST_ENTRY_QUANTUM); return B_OK; }
status_t dlist_remove(nspace *vol, ino_t vnid) { int i; DPRINTF(0, ("dlist_remove vnid %Lx\n", vnid)); ASSERT(IS_DIR_CLUSTER_VNID(vnid)); for (i=0;i<vol->dlist.entries;i++) if (vol->dlist.vnid_list[i] == vnid) break; ASSERT(i < vol->dlist.entries); if (i == vol->dlist.entries) return -ENOENT; for (;i<vol->dlist.entries-1;i++) vol->dlist.vnid_list[i] = vol->dlist.vnid_list[i+1]; vol->dlist.entries--; if (vol->dlist.allocated - vol->dlist.entries > 2*DLIST_ENTRY_QUANTUM) return dlist_realloc(vol, vol->dlist.allocated - DLIST_ENTRY_QUANTUM); return B_OK; }