union_vfsops.c (172697) | union_vfsops.c (175202) |
---|---|
1/*- 2 * Copyright (c) 1994, 1995 The Regents of the University of California. 3 * Copyright (c) 1994, 1995 Jan-Simon Pendry. 4 * Copyright (c) 2005, 2006 Masanori Ozawa <ozawa@ongs.co.jp>, ONGS Inc. 5 * Copyright (c) 2006 Daichi Goto <daichi@freebsd.org> 6 * All rights reserved. 7 * 8 * This code is derived from software donated to Berkeley by --- 19 unchanged lines hidden (view full) --- 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)union_vfsops.c 8.20 (Berkeley) 5/20/95 | 1/*- 2 * Copyright (c) 1994, 1995 The Regents of the University of California. 3 * Copyright (c) 1994, 1995 Jan-Simon Pendry. 4 * Copyright (c) 2005, 2006 Masanori Ozawa <ozawa@ongs.co.jp>, ONGS Inc. 5 * Copyright (c) 2006 Daichi Goto <daichi@freebsd.org> 6 * All rights reserved. 7 * 8 * This code is derived from software donated to Berkeley by --- 19 unchanged lines hidden (view full) --- 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)union_vfsops.c 8.20 (Berkeley) 5/20/95 |
36 * $FreeBSD: head/sys/fs/unionfs/union_vfsops.c 172697 2007-10-16 10:54:55Z alfred $ | 36 * $FreeBSD: head/sys/fs/unionfs/union_vfsops.c 175202 2008-01-10 01:10:58Z attilio $ |
37 */ 38 39#include <sys/param.h> 40#include <sys/systm.h> 41#include <sys/kdb.h> 42#include <sys/kernel.h> 43#include <sys/lock.h> 44#include <sys/malloc.h> --- 140 unchanged lines hidden (view full) --- 185 ufile = mode2vmode(ufile); 186 } 187 /* check umask, uid and gid */ 188 if (udir == 0 && ufile != 0) 189 udir = ufile; 190 if (ufile == 0 && udir != 0) 191 ufile = udir; 192 | 37 */ 38 39#include <sys/param.h> 40#include <sys/systm.h> 41#include <sys/kdb.h> 42#include <sys/kernel.h> 43#include <sys/lock.h> 44#include <sys/malloc.h> --- 140 unchanged lines hidden (view full) --- 185 ufile = mode2vmode(ufile); 186 } 187 /* check umask, uid and gid */ 188 if (udir == 0 && ufile != 0) 189 udir = ufile; 190 if (ufile == 0 && udir != 0) 191 ufile = udir; 192 |
193 vn_lock(mp->mnt_vnodecovered, LK_SHARED | LK_RETRY, td); | 193 vn_lock(mp->mnt_vnodecovered, LK_SHARED | LK_RETRY); |
194 error = VOP_GETATTR(mp->mnt_vnodecovered, &va, mp->mnt_cred, td); 195 if (!error) { 196 if (udir == 0) 197 udir = va.va_mode; 198 if (ufile == 0) 199 ufile = va.va_mode; 200 uid = va.va_uid; 201 gid = va.va_gid; --- 82 unchanged lines hidden (view full) --- 284 ump = (struct unionfs_mount *)malloc(sizeof(struct unionfs_mount), 285 M_UNIONFSMNT, M_WAITOK | M_ZERO); 286 287 /* 288 * Save reference 289 */ 290 if (below) { 291 VOP_UNLOCK(upperrootvp, 0, td); | 194 error = VOP_GETATTR(mp->mnt_vnodecovered, &va, mp->mnt_cred, td); 195 if (!error) { 196 if (udir == 0) 197 udir = va.va_mode; 198 if (ufile == 0) 199 ufile = va.va_mode; 200 uid = va.va_uid; 201 gid = va.va_gid; --- 82 unchanged lines hidden (view full) --- 284 ump = (struct unionfs_mount *)malloc(sizeof(struct unionfs_mount), 285 M_UNIONFSMNT, M_WAITOK | M_ZERO); 286 287 /* 288 * Save reference 289 */ 290 if (below) { 291 VOP_UNLOCK(upperrootvp, 0, td); |
292 vn_lock(lowerrootvp, LK_EXCLUSIVE | LK_RETRY, td); | 292 vn_lock(lowerrootvp, LK_EXCLUSIVE | LK_RETRY); |
293 ump->um_lowervp = upperrootvp; 294 ump->um_uppervp = lowerrootvp; 295 } else { 296 ump->um_lowervp = lowerrootvp; 297 ump->um_uppervp = upperrootvp; 298 } 299 ump->um_rootvp = NULLVP; 300 ump->um_uid = uid; --- 123 unchanged lines hidden (view full) --- 424 ump = MOUNTTOUNIONFSMOUNT(mp); 425 vp = ump->um_rootvp; 426 427 UNIONFSDEBUG("unionfs_root: rootvp=%p locked=%x\n", 428 vp, VOP_ISLOCKED(vp, td)); 429 430 vref(vp); 431 if (flags & LK_TYPE_MASK) | 293 ump->um_lowervp = upperrootvp; 294 ump->um_uppervp = lowerrootvp; 295 } else { 296 ump->um_lowervp = lowerrootvp; 297 ump->um_uppervp = upperrootvp; 298 } 299 ump->um_rootvp = NULLVP; 300 ump->um_uid = uid; --- 123 unchanged lines hidden (view full) --- 424 ump = MOUNTTOUNIONFSMOUNT(mp); 425 vp = ump->um_rootvp; 426 427 UNIONFSDEBUG("unionfs_root: rootvp=%p locked=%x\n", 428 vp, VOP_ISLOCKED(vp, td)); 429 430 vref(vp); 431 if (flags & LK_TYPE_MASK) |
432 vn_lock(vp, flags, td); | 432 vn_lock(vp, flags); |
433 434 *vpp = vp; 435 436 return (0); 437} 438 439static int 440unionfs_quotactl(struct mount *mp, int cmd, uid_t uid, void *arg, --- 122 unchanged lines hidden --- | 433 434 *vpp = vp; 435 436 return (0); 437} 438 439static int 440unionfs_quotactl(struct mount *mp, int cmd, uid_t uid, void *arg, --- 122 unchanged lines hidden --- |