Deleted Added
full compact
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 ---