return EIO;
goto Bad_Extract;
}
- code = STREAM_SEEK(stream, vcp->diskSize, 0);
+ code = STREAM_ASEEK(stream, vcp->diskSize);
if (code)
goto Bad_Extract;
if (class == vLarge) {
if (*parent) {
offset = (*parent + 1 - class) << (vcp->logSize -1);
- code = STREAM_SEEK(stream, offset, 0);
+ code = STREAM_ASEEK(stream, offset);
if (STREAM_READ(vnode, vcp->diskSize, 1, stream) == 1)
memcpy(parentvd, vnode, vcp->diskSize);
else
FdHandle_t *infdP, *outfdP;
char *tbuf;
afs_sfsize_t size;
+ afs_foff_t offset;
infdP = IH_OPEN(inh);
if (!infdP) {
return EIO;
}
tbuf = malloc(2048);
- FDH_SEEK(infdP, 0, 0);
- FDH_SEEK(outfdP, 0, 0);
+ offset = 0;
size = FDH_SIZE(infdP);
while (size) {
size_t tlen;
tlen = size > 2048 ? 2048 : size;
- if (FDH_READ(infdP, tbuf, tlen) != tlen) {
+ if (FDH_PREAD(infdP, tbuf, tlen, offset) != tlen) {
sprintf(m->line, "Couldn't read directory %u.%u.%u\n",
infdP->fd_ih->ih_vid,
(afs_uint32)(infdP->fd_ih->ih_ino & NAMEI_VNODEMASK),
free(tbuf);
return EIO;
}
- if (FDH_WRITE(outfdP, tbuf, tlen) != tlen) {
+ if (FDH_PWRITE(outfdP, tbuf, tlen, offset) != tlen) {
sprintf(m->line, "Couldn't write directory %u.%u.%u\n",
outfdP->fd_ih->ih_vid,
(afs_uint32)(outfdP->fd_ih->ih_ino & NAMEI_VNODEMASK),
return EIO;
}
size -= tlen;
+ offset += tlen;
}
free(tbuf);
FDH_CLOSE(outfdP);
if (e->flag) {
afs_uint64 size;
offset = (e->vN + 1 - class) << (vcp->logSize -1);
- if (FDH_SEEK(fdP, offset, 0) != offset
- || FDH_READ(fdP, vnode, vcp->diskSize) != vcp->diskSize) {
+ if (FDH_PREAD(fdP, vnode, vcp->diskSize, offset) != vcp->diskSize) {
Log("Couldn't read in %s Index of volume %u at offset %"
AFS_UINT64_FMT "\n", class ? "small":"large",
V_id(vol), offset);
/* Now update the vnode and write it back to disk */
VNDISK_SET_INO(vnode, newino);
vnode->cloned = 0;
- if (FDH_SEEK(fdP, offset, 0) != offset
- || FDH_WRITE(fdP, vnode, vcp->diskSize) != vcp->diskSize) {
+ if (FDH_PWRITE(fdP, vnode, vcp->diskSize, offset) != vcp->diskSize) {
Log("Couldn't write in %s Index of volume %u at offset %"
AFS_UINT64_FMT "\n", class ? "small":"large",
V_id(vol), offset);
if (e->flag & CHANGEPARENT)
vnode->parent = 1; /* in new root-directory */
vnode->cloned = 0;
- if (FDH_SEEK(newfdP, offset, 0) != offset
- || FDH_WRITE(newfdP, vnode, vcp->diskSize) != vcp->diskSize) {
+ if (FDH_PWRITE(newfdP, vnode, vcp->diskSize, offset) != vcp->diskSize) {
Log("Couldn't write in %s Index of volume %u to offset %"
AFS_UINT64_FMT "\n", class ? "small":"large",
V_id(newvol), offset);
afs_uint64 newoffset;
newoffset = vcp->diskSize;
- if (FDH_SEEK(newfdP, newoffset, 0) != newoffset
- || FDH_READ(newfdP, vnode2, vcp->diskSize) != vcp->diskSize) {
+ if (FDH_PREAD(newfdP, vnode2, vcp->diskSize, newoffset) != vcp->diskSize) {
Log("splitvolume: couldn't read in large Index of new volume %u at offset %u\n",
V_id(newvol), vcp->diskSize);
code = EIO;
goto Bad_Copy;
}
offset = (where + 1 - class) << (vcp->logSize -1);
- if (FDH_SEEK(fdP, offset, 0) != offset
- || FDH_READ(fdP, vnode, vcp->diskSize) != vcp->diskSize) {
+ if (FDH_PREAD(fdP, vnode, vcp->diskSize, offset) != vcp->diskSize) {
Log("Couldn't read in large Index of old volume %u at offset %"
AFS_UINT64_FMT "\n", V_id(vol), offset);
code = EIO;
vnode->cloned = 0;
vnode->parent = vnode2->parent;
vnode->serverModifyTime = vnode2->serverModifyTime;
- if (FDH_SEEK(newfdP, newoffset, 0) != newoffset
- || FDH_WRITE(newfdP, vnode, vcp->diskSize) != vcp->diskSize) {
+ if (FDH_PWRITE(newfdP, vnode, vcp->diskSize, newoffset) != vcp->diskSize) {
Log("splitvolume: couldn't write in large Index of %u at offset %u\n",
V_id(newvol), vcp->diskSize);
code = EIO;
struct timeval now;
afs_uint32 newvN;
char symlink[32];
+ ssize_t rc;
FT_GetTimeOfDay(&now, 0);
fdP = IH_OPEN(vol->vnodeIndex[vSmall].handle);
return EIO;
}
offset = vcp->diskSize;
- if (FDH_SEEK(fdP, offset, 0) != offset) {
- Log("split volume: error seeking in small vnode index of %u\n", V_id(vol));
- return EIO;
- }
while (1) {
- if (FDH_READ(fdP, &vnode, vcp->diskSize) != vcp->diskSize)
- break;
+ rc = FDH_PREAD(fdP, &vnode, vcp->diskSize, offset);
+ if (rc != vcp->diskSize) {
+ if (rc < 0) {
+ Log("split volume: error reading small vnode index of %u\n", V_id(vol));
+ return EIO;
+ }
+ if (rc == 0)
+ break;
+ if (rc < vcp->diskSize)
+ break;
+ }
if (vnode.type == vNull)
break;
offset += vcp->diskSize;
V_id(vol), newvN, vnode.uniquifier);
return EIO;
}
- FDH_SEEK(fdP2, 0, 0);
sprintf(symlink, "#%s", V_name(newvol));
size = strlen(symlink) + 1;
- if (FDH_WRITE(fdP2, symlink, size) != size) {
+ if (FDH_PWRITE(fdP2, symlink, size, 0) != size) {
Log("split volume: couldn't write mountpoint %u.%u.%u\n",
V_id(vol), newvN, vnode.uniquifier);
return EIO;
#ifndef AFS_RXOSD_SUPPORT
vnode.vnodeMagic = SMALLVNODEMAGIC;
#endif
- if (FDH_SEEK(fdP, offset, 0) != offset
- || FDH_WRITE(fdP, &vnode, vcp->diskSize) != vcp->diskSize) {
+ if (FDH_PWRITE(fdP, &vnode, vcp->diskSize, offset) != vcp->diskSize) {
Log("split volume: couldn't write vnode for mountpoint %u.%u.%u\n",
V_id(vol), newvN, vnode.uniquifier);
return EIO;
fdP = IH_OPEN(vol->vnodeIndex[class].handle);
offset = (vN + 1 - class) << (vcp->logSize -1);
parent->dataVersion++;
- if (FDH_SEEK(fdP, offset, 0) != offset
- || FDH_WRITE(fdP, parent, vcp->diskSize) != vcp->diskSize) {
+ if (FDH_PWRITE(fdP, parent, vcp->diskSize, offset) != vcp->diskSize) {
Log("split volume: couldn't write vnode for parent directory %u.%u.%u\n",
V_id(vol), vN, parent->uniquifier);
return EIO;
if (e->flag & NEEDED) {
afs_uint64 size;
offset = (e->vN + 1 - class) << (vcp->logSize -1);
- if (FDH_SEEK(fdP, offset, 0) != offset) {
- Log("Couldn't seek in %s Index of volume %u to offset %"
- AFS_UINT64_FMT "\n", class ? "small":"large", V_id(vol),
- offset);
- code = EIO;
- goto Bad_Delete;
- }
- if (FDH_READ(fdP, vnode, vcp->diskSize) != vcp->diskSize) {
+ if (FDH_PREAD(fdP, vnode, vcp->diskSize, offset) != vcp->diskSize) {
Log("Couldn't read in %s Index of volume %u at offset %"
AFS_UINT64_FMT "\n", class ? "small":"large", V_id(vol),
offset);
}
memset(vnode, 0, vcp->diskSize);
vnode->type = vNull;
- if (FDH_SEEK(fdP, offset, 0) != offset
- || FDH_WRITE(fdP, vnode, vcp->diskSize) != vcp->diskSize) {
+ if (FDH_PWRITE(fdP, vnode, vcp->diskSize, offset) != vcp->diskSize) {
Log("Couldn't write in %s Index of volume %u to offset %"
AFS_UINT64_FMT "\n", class ? "small":"large",
V_id(vol), offset);