From 38cf31463e3f3c675de727c1e793e117a90e6d20 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Mon, 12 Jul 2010 15:47:15 -0500 Subject: [PATCH] Avoid thread-unsafe PrintInode in threaded code Some potentially-threaded callers were calling PrintInode with a NULL first argument, which is not threadsafe. Alter them to use local storage. Change-Id: Ib9ad9c070bd659be30616b2c77cd244458357197 Reviewed-on: http://gerrit.openafs.org/2593 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/viced/afsfileprocs.c | 16 ++++++++++------ src/viced/physio.c | 10 ++++++---- src/vol/clone.c | 5 +++-- src/vol/listinodes.c | 14 ++++++++------ src/vol/vnode.c | 8 +++++--- src/vol/vol-salvage.c | 24 ++++++++++++++---------- src/vol/vutil.c | 9 +++++---- src/volser/dumpstuff.c | 5 +++-- src/volser/vol-dump.c | 10 ++++++---- 9 files changed, 60 insertions(+), 41 deletions(-) diff --git a/src/viced/afsfileprocs.c b/src/viced/afsfileprocs.c index d8d93a724..1eca526e5 100644 --- a/src/viced/afsfileprocs.c +++ b/src/viced/afsfileprocs.c @@ -1318,6 +1318,7 @@ DeleteTarget(Vnode * parentptr, Volume * volptr, Vnode ** targetptr, DirHandle childdir; /* Handle for dir package I/O */ Error errorCode = 0; int code; + afs_ino_str_t stmp; /* watch for invalid names */ if (!strcmp(Name, ".") || !strcmp(Name, "..")) @@ -1386,7 +1387,7 @@ DeleteTarget(Vnode * parentptr, Volume * volptr, Vnode ** targetptr, if (errorCode == -1) { ViceLog(0, ("DT: inode=%s, name=%s, errno=%d\n", - PrintInode(NULL, VN_GET_INO(*targetptr)), Name, + PrintInode(stmp, VN_GET_INO(*targetptr)), Name, errno)); if (errno != ENOENT) { @@ -1722,6 +1723,7 @@ Alloc_NewVnode(Vnode * parentptr, DirHandle * dir, Volume * volptr, Error temp; Inode inode = 0; Inode nearInode; /* hint for inode allocation in solaris */ + afs_ino_str_t stmp; if ((errorCode = AdjustDiskUsage(volptr, BlocksPreallocatedForVnode, @@ -1777,7 +1779,7 @@ Alloc_NewVnode(Vnode * parentptr, DirHandle * dir, Volume * volptr, if (IH_DEC(V_linkHandle(volptr), inode, V_parentId(volptr))) ViceLog(0, ("Alloc_NewVnode: partition %s idec %s failed\n", - volptr->partition->name, PrintInode(NULL, inode))); + volptr->partition->name, PrintInode(stmp, inode))); IH_RELEASE((*targetptr)->handle); return errorCode; @@ -1793,7 +1795,7 @@ Alloc_NewVnode(Vnode * parentptr, DirHandle * dir, Volume * volptr, if (IH_DEC(V_linkHandle(volptr), inode, V_parentId(volptr))) ViceLog(0, ("Alloc_NewVnode: partition %s idec %s failed\n", - volptr->partition->name, PrintInode(NULL, inode))); + volptr->partition->name, PrintInode(stmp, inode))); IH_RELEASE((*targetptr)->handle); return (errorCode); } @@ -3859,6 +3861,7 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName, struct client *t_client; /* tmp ptr to client data */ struct in_addr logHostAddr; /* host ip holder for inet_ntoa */ struct rx_connection *tcon = rx_ConnectionOf(acall); + afs_ino_str_t stmp; FidZero(&olddir); FidZero(&newdir); @@ -4147,7 +4150,7 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName, if (errorCode == -1) { ViceLog(0, ("Del: inode=%s, name=%s, errno=%d\n", - PrintInode(NULL, VN_GET_INO(newfileptr)), + PrintInode(stmp, VN_GET_INO(newfileptr)), NewName, errno)); if ((errno != ENOENT) && (errno != EIO) && (errno != ENXIO)) @@ -7270,6 +7273,7 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid, ssize_t nBytes; FdHandle_t *fdP, *origfdP = NULL; struct in_addr logHostAddr; /* host ip holder for inet_ntoa */ + afs_ino_str_t stmp; #if FS_STATS_DETAILED /* @@ -7302,7 +7306,7 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid, */ ViceLog(25, ("StoreData_RXStyle : Opening inode %s\n", - PrintInode(NULL, VN_GET_INO(targetptr)))); + PrintInode(stmp, VN_GET_INO(targetptr)))); fdP = IH_OPEN(targetptr->handle); if (fdP == NULL) return ENOENT; @@ -7318,7 +7322,7 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid, afs_fsize_t size; ViceLog(25, ("StoreData_RXStyle : inode %s has more than onelink\n", - PrintInode(NULL, VN_GET_INO(targetptr)))); + PrintInode(stmp, VN_GET_INO(targetptr)))); /* other volumes share this data, better copy it first */ /* Adjust the disk block count by the creation of the new inode. diff --git a/src/viced/physio.c b/src/viced/physio.c index 6021a53e1..6165dcc89 100644 --- a/src/viced/physio.c +++ b/src/viced/physio.c @@ -52,13 +52,14 @@ ReallyRead(DirHandle * file, int block, char *data) int code; ssize_t rdlen; FdHandle_t *fdP; + afs_ino_str_t stmp; fdP = IH_OPEN(file->dirh_handle); if (fdP == NULL) { code = errno; ViceLog(0, ("ReallyRead(): open failed device %X inode %s errno %d\n", - file->dirh_handle->ih_dev, PrintInode(NULL, + file->dirh_handle->ih_dev, PrintInode(stmp, file->dirh_handle-> ih_ino), code)); return code; @@ -81,7 +82,7 @@ ReallyRead(DirHandle * file, int block, char *data) code = EIO; ViceLog(0, ("ReallyRead(): read failed device %X inode %s errno %d\n", - file->dirh_handle->ih_dev, PrintInode(NULL, + file->dirh_handle->ih_dev, PrintInode(stmp, file->dirh_handle-> ih_ino), code)); FDH_REALLYCLOSE(fdP); @@ -98,12 +99,13 @@ ReallyWrite(DirHandle * file, int block, char *data) { ssize_t count; FdHandle_t *fdP; + afs_ino_str_t stmp; fdP = IH_OPEN(file->dirh_handle); if (fdP == NULL) { ViceLog(0, ("ReallyWrite(): open failed device %X inode %s errno %d\n", - file->dirh_handle->ih_dev, PrintInode(NULL, + file->dirh_handle->ih_dev, PrintInode(stmp, file->dirh_handle-> ih_ino), errno)); lpErrno = errno; @@ -122,7 +124,7 @@ ReallyWrite(DirHandle * file, int block, char *data) if ((count = FDH_WRITE(fdP, data, PAGESIZE)) != PAGESIZE) { ViceLog(0, ("ReallyWrite(): write failed device %X inode %s errno %d\n", - file->dirh_handle->ih_dev, PrintInode(NULL, + file->dirh_handle->ih_dev, PrintInode(stmp, file->dirh_handle-> ih_ino), errno)); lpCount = count; diff --git a/src/vol/clone.c b/src/vol/clone.c index 405176a99..e2e590932 100644 --- a/src/vol/clone.c +++ b/src/vol/clone.c @@ -174,6 +174,7 @@ DoCloneIndex(Volume * rwvp, Volume * clvp, VnodeClass class, int reclone) afs_int32 offset = 0; afs_int32 dircloned, inodeinced; afs_int32 filecount = 0, diskused = 0; + afs_ino_str_t stmp; struct VnodeClassInfo *vcp = &VnodeClassInfo[class]; int ReadWriteOriginal = VolumeWriteable(rwvp); @@ -260,7 +261,7 @@ DoCloneIndex(Volume * rwvp, Volume * clvp, VnodeClass class, int reclone) if (IH_INC(V_linkHandle(rwvp), rwinode, V_parentId(rwvp)) == -1) { Log("IH_INC failed: %"AFS_PTR_FMT", %s, %u errno %d\n", - V_linkHandle(rwvp), PrintInode(NULL, rwinode), + V_linkHandle(rwvp), PrintInode(stmp, rwinode), V_parentId(rwvp), errno); VForceOffline(rwvp); ERROR_EXIT(EIO); @@ -313,7 +314,7 @@ DoCloneIndex(Volume * rwvp, Volume * clvp, VnodeClass class, int reclone) if (IH_DEC(V_linkHandle(rwvp), rwinode, V_parentId(rwvp)) == -1) { Log("IH_DEC failed: %"AFS_PTR_FMT", %s, %u errno %d\n", - V_linkHandle(rwvp), PrintInode(NULL, rwinode), + V_linkHandle(rwvp), PrintInode(stmp, rwinode), V_parentId(rwvp), errno); VForceOffline(rwvp); ERROR_EXIT(EIO); diff --git a/src/vol/listinodes.c b/src/vol/listinodes.c index 8d7460444..090f95481 100644 --- a/src/vol/listinodes.c +++ b/src/vol/listinodes.c @@ -492,6 +492,7 @@ xfs_VerifyInode(char *dir, uint64_t pino, char *name, i_list_inode_t * info, char tmpName[32]; b64_string_t stmp; int tag; + afs_ino_str_t stmp; *rename = 0; (void)sprintf(path, "%s/%s", dir, name); @@ -499,7 +500,7 @@ xfs_VerifyInode(char *dir, uint64_t pino, char *name, i_list_inode_t * info, if (info->ili_magic != XFS_VICEMAGIC) { Log("%s magic for %s/%s (inode %s) from %d to %d\n", Testing ? "Would have changed" : "Changing", dir, name, - PrintInode(NULL, info->ili_info.inodeNumber), info->ili_magic, + PrintInode(stmp, info->ili_info.inodeNumber), info->ili_magic, XFS_VICEMAGIC); if (!Testing) update_chown = 1; @@ -509,7 +510,7 @@ xfs_VerifyInode(char *dir, uint64_t pino, char *name, i_list_inode_t * info, if (info->ili_vno != AFS_XFS_VNO_CLIP(vno)) { Log("%s volume id for %s/%s (inode %s) from %d to %d\n", Testing ? "Would have changed" : "Changing", dir, name, - PrintInode(NULL, info->ili_info.inodeNumber), info->ili_vno, + PrintInode(stmp, info->ili_info.inodeNumber), info->ili_vno, AFS_XFS_VNO_CLIP(vno)); if (!Testing) update_chown = 1; @@ -542,7 +543,7 @@ xfs_VerifyInode(char *dir, uint64_t pino, char *name, i_list_inode_t * info, if (strncmp(name, tmpName, strlen(tmpName))) { Log("%s name %s (inode %s) in directory %s, unique=%d, tag=%d\n", Testing ? "Would have returned bad" : "Bad", name, - PrintInode(NULL, info->ili_info.inodeNumber), dir, + PrintInode(stmp, info->ili_info.inodeNumber), dir, info->ili_info.param[2], info->ili_tag); if (!Testing) *rename = 1; @@ -558,7 +559,7 @@ xfs_VerifyInode(char *dir, uint64_t pino, char *name, i_list_inode_t * info, p = strchr(tmpName + 1, '.'); if (!p) { Log("No tag found on name %s (inode %s)in directory, %s.\n", - name, PrintInode(NULL, info->ili_info.inodeNumber), dir, + name, PrintInode(stmp, info->ili_info.inodeNumber), dir, Testing ? "would have renamed" : "will rename"); if (!Testing) *rename = 1; @@ -566,7 +567,7 @@ xfs_VerifyInode(char *dir, uint64_t pino, char *name, i_list_inode_t * info, tag = base64_to_int(p + 1); Log("%s the tag for %s (inode %s) from %d to %d.\n", Testing ? "Would have changed" : "Will change", path, - PrintInode(NULL, info->ili_info.inodeNumber), dir, tag, + PrintInode(stmp, info->ili_info.inodeNumber), dir, tag, info->ili_tag); if (!Testing) update_tag = 1; @@ -1501,8 +1502,9 @@ inode_ConvertROtoRWvolume(char *pname, afs_uint32 volumeId) /* Unlink the old special inode; otherwise we will get duplicate * special inodes if we recreate the RO again */ if (IH_DEC(ih, specinos[j].inodeNumber, volumeId) == -1) { + afs_ino_str_t stmp; Log("IH_DEC failed: %x, %s, %u errno %d\n", ih, - PrintInode(NULL, specinos[j].inodeNumber), volumeId, errno); + PrintInode(stmp, specinos[j].inodeNumber), volumeId, errno); } IH_RELEASE(ih); diff --git a/src/vol/vnode.c b/src/vol/vnode.c index 45cfa858c..18e201493 100644 --- a/src/vol/vnode.c +++ b/src/vol/vnode.c @@ -883,6 +883,7 @@ VnLoad(Error * ec, Volume * vp, Vnode * vnp, ssize_t nBytes; IHandle_t *ihP = vp->vnodeIndex[class].handle; FdHandle_t *fdP; + afs_ino_str_t stmp; *ec = 0; vcp->reads++; @@ -898,7 +899,7 @@ VnLoad(Error * ec, Volume * vp, Vnode * vnp, fdP = IH_OPEN(ihP); if (fdP == NULL) { Log("VnLoad: can't open index dev=%u, i=%s\n", vp->device, - PrintInode(NULL, vp->vnodeIndex[class].handle->ih_ino)); + PrintInode(stmp, vp->vnodeIndex[class].handle->ih_ino)); *ec = VIO; goto error_encountered_nolock; } else if (FDH_SEEK(fdP, vnodeIndexOffset(vcp, Vn_id(vnp)), SEEK_SET) @@ -912,7 +913,7 @@ VnLoad(Error * ec, Volume * vp, Vnode * vnp, * or the inode table is full. */ if (nBytes == BAD_IGET) { Log("VnLoad: bad inumber %s\n", - PrintInode(NULL, vp->vnodeIndex[class].handle->ih_ino)); + PrintInode(stmp, vp->vnodeIndex[class].handle->ih_ino)); *ec = VIO; dosalv = 0; } else if (nBytes == -1 && errno == EIO) { @@ -1010,6 +1011,7 @@ VnStore(Error * ec, Volume * vp, Vnode * vnp, afs_foff_t offset; IHandle_t *ihP = vp->vnodeIndex[class].handle; FdHandle_t *fdP; + afs_ino_str_t stmp; #ifdef AFS_DEMAND_ATTACH_FS VnState vn_state_save; #endif @@ -1042,7 +1044,7 @@ VnStore(Error * ec, Volume * vp, Vnode * vnp, FDH_REALLYCLOSE(fdP); if (nBytes == BAD_IGET) { Log("VnStore: bad inumber %s\n", - PrintInode(NULL, + PrintInode(stmp, vp->vnodeIndex[class].handle->ih_ino)); *ec = VIO; VOL_LOCK; diff --git a/src/vol/vol-salvage.c b/src/vol/vol-salvage.c index 148879ab4..964ae215f 100644 --- a/src/vol/vol-salvage.c +++ b/src/vol/vol-salvage.c @@ -1970,6 +1970,7 @@ DoSalvageVolumeGroup(struct SalvInfo *salvinfo, struct InodeSummary *isp, int nV /* Fix actual inode counts */ if (!Showmode) { + afs_ino_str_t stmp; Log("totalInodes %d\n",totalInodes); for (ip = inodes; totalInodes; ip++, totalInodes--) { static int TraceBadLinkCounts = 0; @@ -1982,14 +1983,14 @@ DoSalvageVolumeGroup(struct SalvInfo *salvinfo, struct InodeSummary *isp, int nV #endif if (ip->linkCount != 0 && TraceBadLinkCounts) { TraceBadLinkCounts--; /* Limit reports, per volume */ - Log("#### DEBUG #### Link count incorrect by %d; inode %s, size %llu, p=(%u,%u,%u,%u)\n", ip->linkCount, PrintInode(NULL, ip->inodeNumber), (afs_uintmax_t) ip->byteCount, ip->u.param[0], ip->u.param[1], ip->u.param[2], ip->u.param[3]); + Log("#### DEBUG #### Link count incorrect by %d; inode %s, size %llu, p=(%u,%u,%u,%u)\n", ip->linkCount, PrintInode(stmp, ip->inodeNumber), (afs_uintmax_t) ip->byteCount, ip->u.param[0], ip->u.param[1], ip->u.param[2], ip->u.param[3]); } while (ip->linkCount > 0) { /* below used to assert, not break */ if (!Testing) { if (IH_DEC(salvinfo->VGLinkH, ip->inodeNumber, ip->u.param[0])) { Log("idec failed. inode %s errno %d\n", - PrintInode(NULL, ip->inodeNumber), errno); + PrintInode(stmp, ip->inodeNumber), errno); break; } } @@ -2000,7 +2001,7 @@ DoSalvageVolumeGroup(struct SalvInfo *salvinfo, struct InodeSummary *isp, int nV if (!Testing) { if (IH_INC(salvinfo->VGLinkH, ip->inodeNumber, ip->u.param[0])) { Log("iinc failed. inode %s errno %d\n", - PrintInode(NULL, ip->inodeNumber), errno); + PrintInode(stmp, ip->inodeNumber), errno); break; } } @@ -2200,11 +2201,12 @@ SalvageVolumeHeaderFile(struct SalvInfo *salvinfo, struct InodeSummary *isp, } } for (i = 0; i < isp->nSpecialInodes; i++) { + afs_ino_str_t stmp; ip = &inodes[isp->index + i]; if (ip->u.special.type <= 0 || ip->u.special.type > MAXINODETYPE) { if (check) { Log("Rubbish header inode %s of type %d\n", - PrintInode(NULL, ip->inodeNumber), + PrintInode(stmp, ip->inodeNumber), ip->u.special.type); if (skip) { free(skip); @@ -2212,17 +2214,17 @@ SalvageVolumeHeaderFile(struct SalvInfo *salvinfo, struct InodeSummary *isp, return -1; } Log("Rubbish header inode %s of type %d; deleted\n", - PrintInode(NULL, ip->inodeNumber), + PrintInode(stmp, ip->inodeNumber), ip->u.special.type); } else if (!stuff[ip->u.special.type - 1].obsolete) { if (skip && skip[i]) { if (orphans == ORPH_REMOVE) { Log("Removing orphan special inode %s of type %d\n", - PrintInode(NULL, ip->inodeNumber), ip->u.special.type); + PrintInode(stmp, ip->inodeNumber), ip->u.special.type); continue; } else { Log("Ignoring orphan special inode %s of type %d\n", - PrintInode(NULL, ip->inodeNumber), ip->u.special.type); + PrintInode(stmp, ip->inodeNumber), ip->u.special.type); /* fall through to the ip->linkCount--; line below */ } } else { @@ -2728,13 +2730,14 @@ SalvageIndex(struct SalvInfo *salvinfo, Inode ino, VnodeClass class, int RW, ip++; nInodes--; } else { /* no matching inode */ + afs_ino_str_t stmp; if (VNDISK_GET_INO(vnode) != 0 || vnode->type == vDirectory) { /* No matching inode--get rid of the vnode */ if (check) { if (VNDISK_GET_INO(vnode)) { if (!Showmode) { - Log("Vnode %d (unique %u): corresponding inode %s is missing\n", vnodeNumber, vnode->uniquifier, PrintInode(NULL, VNDISK_GET_INO(vnode))); + Log("Vnode %d (unique %u): corresponding inode %s is missing\n", vnodeNumber, vnode->uniquifier, PrintInode(stmp, VNDISK_GET_INO(vnode))); } } else { if (!Showmode) @@ -2746,7 +2749,7 @@ SalvageIndex(struct SalvInfo *salvinfo, Inode ino, VnodeClass class, int RW, if (VNDISK_GET_INO(vnode)) { if (!Showmode) { time_t serverModifyTime = vnode->serverModifyTime; - Log("Vnode %d (unique %u): corresponding inode %s is missing; vnode deleted, vnode mod time=%s", vnodeNumber, vnode->uniquifier, PrintInode(NULL, VNDISK_GET_INO(vnode)), ctime(&serverModifyTime)); + Log("Vnode %d (unique %u): corresponding inode %s is missing; vnode deleted, vnode mod time=%s", vnodeNumber, vnode->uniquifier, PrintInode(stmp, VNDISK_GET_INO(vnode)), ctime(&serverModifyTime)); } } else { if (!Showmode) { @@ -4406,6 +4409,7 @@ PrintInodeList(struct SalvInfo *salvinfo) struct ViceInodeInfo *buf; struct afs_stat status; int nInodes; + afs_ino_str_t stmp; assert(afs_fstat(salvinfo->inodeFd, &status) == 0); buf = (struct ViceInodeInfo *)malloc(status.st_size); @@ -4414,7 +4418,7 @@ PrintInodeList(struct SalvInfo *salvinfo) assert(read(salvinfo->inodeFd, buf, status.st_size) == status.st_size); for (ip = buf; nInodes--; ip++) { Log("Inode:%s, linkCount=%d, size=%#llx, p=(%u,%u,%u,%u)\n", - PrintInode(NULL, ip->inodeNumber), ip->linkCount, + PrintInode(stmp, ip->inodeNumber), ip->linkCount, (afs_uintmax_t) ip->byteCount, ip->u.param[0], ip->u.param[1], ip->u.param[2], ip->u.param[3]); } diff --git a/src/vol/vutil.c b/src/vol/vutil.c index d9c3246a8..3d643c699 100644 --- a/src/vol/vutil.c +++ b/src/vol/vutil.c @@ -127,6 +127,7 @@ VCreateVolume_r(Error * ec, char *partname, VolId volumeId, VolId parentId) struct stat st; struct VolumeHeader tempHeader; struct afs_inode_info stuff[MAXINODETYPE]; + afs_ino_str_t stmp; # ifdef AFS_DEMAND_ATTACH_FS int locktype = 0; # endif /* AFS_DEMAND_ATTACH_FS */ @@ -271,7 +272,7 @@ VCreateVolume_r(Error * ec, char *partname, VolId volumeId, VolId parentId) fdP = IH_OPEN(handle); if (fdP == NULL) { Log("VCreateVolume: Problem iopen inode %s (err=%d)\n", - PrintInode(NULL, *(p->inode)), errno); + PrintInode(stmp, *(p->inode)), errno); goto bad; } if (FDH_SEEK(fdP, 0, SEEK_SET) < 0) { @@ -283,7 +284,7 @@ VCreateVolume_r(Error * ec, char *partname, VolId volumeId, VolId parentId) if (FDH_WRITE(fdP, (char *)&p->stamp, sizeof(p->stamp)) != sizeof(p->stamp)) { Log("VCreateVolume: Problem writing to inode %s (err=%d)\n", - PrintInode(NULL, *(p->inode)), errno); + PrintInode(stmp, *(p->inode)), errno); FDH_REALLYCLOSE(fdP); goto bad; } @@ -296,7 +297,7 @@ VCreateVolume_r(Error * ec, char *partname, VolId volumeId, VolId parentId) fdP = IH_OPEN(handle); if (fdP == NULL) { Log("VCreateVolume: Problem iopen inode %s (err=%d)\n", - PrintInode(NULL, tempHeader.volumeInfo), errno); + PrintInode(stmp, tempHeader.volumeInfo), errno); goto bad; } if (FDH_SEEK(fdP, 0, SEEK_SET) < 0) { @@ -307,7 +308,7 @@ VCreateVolume_r(Error * ec, char *partname, VolId volumeId, VolId parentId) } if (FDH_WRITE(fdP, (char *)&vol, sizeof(vol)) != sizeof(vol)) { Log("VCreateVolume: Problem writing to inode %s (err=%d)\n", - PrintInode(NULL, tempHeader.volumeInfo), errno); + PrintInode(stmp, tempHeader.volumeInfo), errno); FDH_REALLYCLOSE(fdP); goto bad; } diff --git a/src/volser/dumpstuff.c b/src/volser/dumpstuff.c index 0b06feb43..732a3f67c 100644 --- a/src/volser/dumpstuff.c +++ b/src/volser/dumpstuff.c @@ -714,6 +714,7 @@ DumpFile(struct iod *iodp, int vnode, FdHandle_t * handleP) afs_foff_t lcode = 0; byte *p; afs_uint32 hi, lo; + afs_ino_str_t stmp; #ifndef AFS_NT40_ENV struct afs_stat status; #endif @@ -796,9 +797,9 @@ DumpFile(struct iod *iodp, int vnode, FdHandle_t * handleP) /* Record the read error */ if (n < 0) { n = 0; - Log("1 Volser: DumpFile: Error reading inode %s for vnode %d: %s\n", PrintInode(NULL, handleP->fd_ih->ih_ino), vnode, afs_error_message(errno)); + Log("1 Volser: DumpFile: Error reading inode %s for vnode %d: %s\n", PrintInode(stmp, handleP->fd_ih->ih_ino), vnode, afs_error_message(errno)); } else if (!pad) { - Log("1 Volser: DumpFile: Error reading inode %s for vnode %d\n", PrintInode(NULL, handleP->fd_ih->ih_ino), vnode); + Log("1 Volser: DumpFile: Error reading inode %s for vnode %d\n", PrintInode(stmp, handleP->fd_ih->ih_ino), vnode); } /* Pad the rest of the buffer with zeros. Remember offset we started diff --git a/src/volser/vol-dump.c b/src/volser/vol-dump.c index cef91bfd8..cb862f99a 100644 --- a/src/volser/vol-dump.c +++ b/src/volser/vol-dump.c @@ -565,6 +565,7 @@ DumpFile(int dumpfd, int vnode, FdHandle_t * handleP, struct VnodeDiskObject *v size_t howMany; byte *p; afs_uint32 hi, lo; + afs_ino_str_t stmp; #ifndef AFS_NT40_ENV struct afs_stat status; #endif @@ -650,11 +651,11 @@ DumpFile(int dumpfd, int vnode, FdHandle_t * handleP, struct VnodeDiskObject *v if (n < 0) { n = 0; fprintf(stderr, "Error %d reading inode %s for vnode %d\n", - errno, PrintInode(NULL, handleP->fd_ih->ih_ino), + errno, PrintInode(stmp, handleP->fd_ih->ih_ino), vnode); } else if (!pad) { fprintf(stderr, "Error reading inode %s for vnode %d\n", - PrintInode(NULL, handleP->fd_ih->ih_ino), vnode); + PrintInode(stmp, handleP->fd_ih->ih_ino), vnode); } /* Pad the rest of the buffer with zeros. Remember offset we started @@ -708,6 +709,7 @@ DumpVnode(int dumpfd, struct VnodeDiskObject *v, int volid, int vnodeNumber, int code = 0; IHandle_t *ihP; FdHandle_t *fdP; + afs_ino_str_t stmp; if (verbose) fprintf(stderr, "dumping vnode %d\n", vnodeNumber); @@ -752,14 +754,14 @@ DumpVnode(int dumpfd, struct VnodeDiskObject *v, int volid, int vnodeNumber, if (fdP == NULL) { fprintf(stderr, "Unable to open inode %s for vnode %u (volume %i); not dumped, error %d\n", - PrintInode(NULL, VNDISK_GET_INO(v)), vnodeNumber, volid, + PrintInode(stmp, VNDISK_GET_INO(v)), vnodeNumber, volid, errno); } else { if (verbose) fprintf(stderr, "about to dump inode %s for vnode %u\n", - PrintInode(NULL, VNDISK_GET_INO(v)), vnodeNumber); + PrintInode(stmp, VNDISK_GET_INO(v)), vnodeNumber); code = DumpFile(dumpfd, vnodeNumber, fdP, v); FDH_CLOSE(fdP); } -- 2.39.5