union_subr.c (675ea6f083681647144cacb97165ba4a19e873e9) union_subr.c (3ae6029808af0eb900867d075eb933a52a975304)
1/*
2 * Copyright (c) 1994 Jan-Simon Pendry
3 * Copyright (c) 1994
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * Jan-Simon Pendry.
8 *

--- 21 unchanged lines hidden (view full) ---

30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * SUCH DAMAGE.
36 *
37 * @(#)union_subr.c 8.20 (Berkeley) 5/20/95
1/*
2 * Copyright (c) 1994 Jan-Simon Pendry
3 * Copyright (c) 1994
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * Jan-Simon Pendry.
8 *

--- 21 unchanged lines hidden (view full) ---

30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * SUCH DAMAGE.
36 *
37 * @(#)union_subr.c 8.20 (Berkeley) 5/20/95
38 * $Id: union_subr.c,v 1.22 1997/11/18 15:07:35 phk Exp $
38 * $Id: union_subr.c,v 1.23 1997/12/27 02:56:26 bde Exp $
39 */
40
41#include <sys/param.h>
42#include <sys/systm.h>
43#include <sys/vnode.h>
44#include <sys/namei.h>
45#include <sys/malloc.h>
46#include <sys/fcntl.h>

--- 255 unchanged lines hidden (view full) ---

302{
303 int error;
304 struct union_node *un = 0;
305 struct vnode *xlowervp = NULLVP;
306 struct union_mount *um = MOUNTTOUNIONMOUNT(mp);
307 int hash;
308 int vflag;
309 int try;
39 */
40
41#include <sys/param.h>
42#include <sys/systm.h>
43#include <sys/vnode.h>
44#include <sys/namei.h>
45#include <sys/malloc.h>
46#include <sys/fcntl.h>

--- 255 unchanged lines hidden (view full) ---

302{
303 int error;
304 struct union_node *un = 0;
305 struct vnode *xlowervp = NULLVP;
306 struct union_mount *um = MOUNTTOUNIONMOUNT(mp);
307 int hash;
308 int vflag;
309 int try;
310 int klocked;
310
311 if (uppervp == NULLVP && lowervp == NULLVP)
312 panic("union: unidentifiable allocation");
313
314 if (uppervp && lowervp && (uppervp->v_type != lowervp->v_type)) {
315 xlowervp = lowervp;
316 lowervp = NULLVP;
317 }

--- 39 unchanged lines hidden (view full) ---

357
358 for (un = unhead[hash].lh_first; un != 0;
359 un = un->un_cache.le_next) {
360 if ((un->un_lowervp == lowervp ||
361 un->un_lowervp == NULLVP) &&
362 (un->un_uppervp == uppervp ||
363 un->un_uppervp == NULLVP) &&
364 (UNIONTOV(un)->v_mount == mp)) {
311
312 if (uppervp == NULLVP && lowervp == NULLVP)
313 panic("union: unidentifiable allocation");
314
315 if (uppervp && lowervp && (uppervp->v_type != lowervp->v_type)) {
316 xlowervp = lowervp;
317 lowervp = NULLVP;
318 }

--- 39 unchanged lines hidden (view full) ---

358
359 for (un = unhead[hash].lh_first; un != 0;
360 un = un->un_cache.le_next) {
361 if ((un->un_lowervp == lowervp ||
362 un->un_lowervp == NULLVP) &&
363 (un->un_uppervp == uppervp ||
364 un->un_uppervp == NULLVP) &&
365 (UNIONTOV(un)->v_mount == mp)) {
366 /*
367 * Do not assume that vget() does not
368 * lock the vnode even though flags
369 * argument is 0.
370 */
371 if ((un->un_uppervp != NULLVP) &&
372 ((un->un_flags & UN_KLOCK) == 0)) {
373 SETKLOCK(un);
374 klocked = 1;
375 } else {
376 klocked = 0;
377 }
365 if (vget(UNIONTOV(un), 0,
366 cnp ? cnp->cn_proc : NULL)) {
378 if (vget(UNIONTOV(un), 0,
379 cnp ? cnp->cn_proc : NULL)) {
380 if (klocked)
381 CLEARKLOCK(un);
367 union_list_unlock(hash);
368 goto loop;
369 }
382 union_list_unlock(hash);
383 goto loop;
384 }
385 if (klocked)
386 CLEARKLOCK(un);
370 break;
371 }
372 }
373
374 union_list_unlock(hash);
375
376 if (un)
377 break;

--- 759 unchanged lines hidden ---
387 break;
388 }
389 }
390
391 union_list_unlock(hash);
392
393 if (un)
394 break;

--- 759 unchanged lines hidden ---