From: Andrew Deason Date: Wed, 11 Jan 2012 15:00:35 +0000 (-0500) Subject: vol: Fix VCreateVolume special inode cleanup X-Git-Tag: upstream/1.6.1.pre2^2~8 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=e6ddb2a18857e1e1509d910e46c4b6959e2df789;p=packages%2Fo%2Fopenafs.git vol: Fix VCreateVolume special inode cleanup In order to dec the relevant special inodes, we need to know the parent vol id in addition to the vol id itself. Use the appropriate volume IDs when IH_DEC'ing special inodes after we fail to create the volume, so we don't leave behind special inodes. (cherry picked from commit 627cfb1d4e7b32b4342c59b162a36ba9beb8a066) Reviewed-on: http://gerrit.openafs.org/6529 Tested-by: BuildBot Reviewed-by: Derrick Brashear Change-Id: I9f40f170cd6a0fffe2e17fc199af99e087066902 Reviewed-on: http://gerrit.openafs.org/6550 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- diff --git a/src/vol/vutil.c b/src/vol/vutil.c index 6f7f7ce13..acda92a31 100644 --- a/src/vol/vutil.c +++ b/src/vol/vutil.c @@ -91,7 +91,7 @@ #ifdef FSSYNC_BUILD_CLIENT static void -RemoveInodes(Device dev, VolumeId vid) +RemoveInodes(Device dev, VolumeId parent, VolumeId vid) { int i; IHandle_t *handle; @@ -99,11 +99,16 @@ RemoveInodes(Device dev, VolumeId vid) /* This relies on the fact that IDEC only needs the device and NT only * needs the dev and vid to decrement volume special files. */ - IH_INIT(handle, dev, vid, -1); + IH_INIT(handle, dev, parent, -1); for (i = 0; i < nFILES; i++) { Inode inode = *stuff[i].inode; - if (VALID_INO(inode)) - IH_DEC(handle, inode, vid); + if (VALID_INO(inode)) { + if (stuff[i].inodeType == VI_LINKTABLE) { + IH_DEC(handle, inode, parent); + } else { + IH_DEC(handle, inode, vid); + } + } } IH_RELEASE(handle); } @@ -256,7 +261,7 @@ VCreateVolume_r(Error * ec, char *partname, VolId volumeId, VolId parentId) bad: if (handle) IH_RELEASE(handle); - RemoveInodes(device, vol.id); + RemoveInodes(device, vol.parentId, vol.id); if (!*ec) { *ec = VNOVOL; }