From: Andrew Deason Date: Wed, 24 Aug 2011 17:30:00 +0000 (-0500) Subject: ihandle: Actually assert active fdPs are not AVAIL X-Git-Tag: upstream/1.8.0_pre1^2~3363 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=6d79cfb36165c33dd1fd9c4d7ca8436d9a78f7ff;p=packages%2Fo%2Fopenafs.git ihandle: Actually assert active fdPs are not AVAIL FdHandle_t's that are on the linked list for an associated IHandle_t should not be in the state FD_HANDLE_AVAIL. For the non-PIO case, we assert that this is the case in ih_open (since we assert that if the FdHandle_t is not in INUSE state, then it must be in OPEN state). However, for the PIO case, we were just skipping over any FdHandle_t's that were in the AVAIL state. These should never exist while on that linked list, so assert for the PIO case, as well. In the absence of bugs, there is no functional change here, but it perhaps makes the ih_open loop easier to understand. Change-Id: I4e3b3319ae14b7e68a87f5fe172419f5ebf9d2c9 Reviewed-on: http://gerrit.openafs.org/5307 Reviewed-by: Derrick Brashear Tested-by: BuildBot --- diff --git a/src/vol/ihandle.c b/src/vol/ihandle.c index 0809aef8d..7d8a17ee0 100644 --- a/src/vol/ihandle.c +++ b/src/vol/ihandle.c @@ -330,20 +330,22 @@ ih_open(IHandle_t * ihP) * If we don't have positional i/o, don't try to share fds, since * we can't do so in a threadsafe way. */ - if (fdP->fd_status != FD_HANDLE_INUSE) { - osi_Assert(fdP->fd_status == FD_HANDLE_OPEN); + if (fdP->fd_status == FD_HANDLE_INUSE) { + continue; + } + osi_Assert(fdP->fd_status == FD_HANDLE_OPEN); #else /* HAVE_PIO */ - if (fdP->fd_status != FD_HANDLE_AVAIL) { + osi_Assert(fdP->fd_status != FD_HANDLE_AVAIL); #endif /* HAVE_PIO */ - fdP->fd_refcnt++; - if (fdP->fd_status == FD_HANDLE_OPEN) { - fdP->fd_status = FD_HANDLE_INUSE; - DLL_DELETE(fdP, fdLruHead, fdLruTail, fd_next, fd_prev); - } - ihP->ih_refcnt++; - IH_UNLOCK; - return fdP; + + fdP->fd_refcnt++; + if (fdP->fd_status == FD_HANDLE_OPEN) { + fdP->fd_status = FD_HANDLE_INUSE; + DLL_DELETE(fdP, fdLruHead, fdLruTail, fd_next, fd_prev); } + ihP->ih_refcnt++; + IH_UNLOCK; + return fdP; } /*