Module Name:    src
Committed By:   dholland
Date:           Sat May 17 07:09:36 UTC 2014

Modified Files:
        src/sys/ufs/lfs: lfs_vnops.c ulfs_extern.h

Log Message:
Merge ulfs_symlink into lfs_symlink.


To generate a diff of this commit:
cvs rdiff -u -r1.265 -r1.266 src/sys/ufs/lfs/lfs_vnops.c
cvs rdiff -u -r1.10 -r1.11 src/sys/ufs/lfs/ulfs_extern.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/ufs/lfs/lfs_vnops.c
diff -u src/sys/ufs/lfs/lfs_vnops.c:1.265 src/sys/ufs/lfs/lfs_vnops.c:1.266
--- src/sys/ufs/lfs/lfs_vnops.c:1.265	Sat May 17 07:09:09 2014
+++ src/sys/ufs/lfs/lfs_vnops.c	Sat May 17 07:09:36 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_vnops.c,v 1.265 2014/05/17 07:09:09 dholland Exp $	*/
+/*	$NetBSD: lfs_vnops.c,v 1.266 2014/05/17 07:09:36 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -125,7 +125,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.265 2014/05/17 07:09:09 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.266 2014/05/17 07:09:36 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -610,59 +610,6 @@ lfs_unmark_vnode(struct vnode *vp)
 	mutex_exit(&lfs_lock);
 }
 
-/*
- * symlink -- make a symbolic link
- */
-int
-ulfs_symlink(void *v)
-{
-	struct vop_symlink_v3_args /* {
-		struct vnode		*a_dvp;
-		struct vnode		**a_vpp;
-		struct componentname	*a_cnp;
-		struct vattr		*a_vap;
-		char			*a_target;
-	} */ *ap = v;
-	struct vnode	*vp, **vpp;
-	struct inode	*ip;
-	int		len, error;
-	struct ulfs_lookup_results *ulr;
-
-	vpp = ap->a_vpp;
-
-	/* XXX should handle this material another way */
-	ulr = &VTOI(ap->a_dvp)->i_crap;
-	ULFS_CHECK_CRAPCOUNTER(VTOI(ap->a_dvp));
-
-	fstrans_start(ap->a_dvp->v_mount, FSTRANS_SHARED);
-	error = ulfs_makeinode(LFS_IFLNK | ap->a_vap->va_mode, ap->a_dvp, ulr,
-			      vpp, ap->a_cnp);
-	if (error)
-		goto out;
-	VN_KNOTE(ap->a_dvp, NOTE_WRITE);
-	vp = *vpp;
-	len = strlen(ap->a_target);
-	ip = VTOI(vp);
-	if (len < ip->i_lfs->um_maxsymlinklen) {
-		memcpy((char *)SHORTLINK(ip), ap->a_target, len);
-		ip->i_size = len;
-		DIP_ASSIGN(ip, size, len);
-		uvm_vnp_setsize(vp, ip->i_size);
-		ip->i_flag |= IN_CHANGE | IN_UPDATE;
-		if (vp->v_mount->mnt_flag & MNT_RELATIME)
-			ip->i_flag |= IN_ACCESS;
-	} else
-		error = vn_rdwr(UIO_WRITE, vp, ap->a_target, len, (off_t)0,
-		    UIO_SYSSPACE, IO_NODELOCKED | IO_JOURNALLOCKED,
-		    ap->a_cnp->cn_cred, NULL, NULL);
-	VOP_UNLOCK(vp);
-	if (error)
-		vrele(vp);
-out:
-	fstrans_done(ap->a_dvp->v_mount);
-	return (error);
-}
-
 int
 lfs_symlink(void *v)
 {
@@ -675,6 +622,9 @@ lfs_symlink(void *v)
 	} */ *ap = v;
 	struct lfs *fs;
 	struct vnode *dvp, **vpp;
+	struct inode *ip;
+	struct ulfs_lookup_results *ulr;
+	ssize_t len; /* XXX should be size_t */
 	int error;
 
 	dvp = ap->a_dvp;
@@ -683,6 +633,10 @@ lfs_symlink(void *v)
 	KASSERT(vpp != NULL);
 	KASSERT(*vpp == NULL);
 
+	/* XXX should handle this material another way */
+	ulr = &VTOI(ap->a_dvp)->i_crap;
+	ULFS_CHECK_CRAPCOUNTER(VTOI(ap->a_dvp));
+
 	fs = VFSTOULFS(dvp->v_mount)->um_lfs;
 	ASSERT_NO_SEGLOCK(fs);
 	if (fs->lfs_ronly) {
@@ -711,7 +665,37 @@ lfs_symlink(void *v)
 		return error;
 	}
 
-	error = ulfs_symlink(ap);
+	fstrans_start(dvp->v_mount, FSTRANS_SHARED);
+	error = ulfs_makeinode(LFS_IFLNK | ap->a_vap->va_mode, dvp, ulr,
+			      vpp, ap->a_cnp);
+	if (error) {
+		goto out;
+	}
+
+	VN_KNOTE(ap->a_dvp, NOTE_WRITE);
+	ip = VTOI(*vpp);
+
+	len = strlen(ap->a_target);
+	if (len < ip->i_lfs->um_maxsymlinklen) {
+		memcpy((char *)SHORTLINK(ip), ap->a_target, len);
+		ip->i_size = len;
+		DIP_ASSIGN(ip, size, len);
+		uvm_vnp_setsize(*vpp, ip->i_size);
+		ip->i_flag |= IN_CHANGE | IN_UPDATE;
+		if ((*vpp)->v_mount->mnt_flag & MNT_RELATIME)
+			ip->i_flag |= IN_ACCESS;
+	} else {
+		error = vn_rdwr(UIO_WRITE, *vpp, ap->a_target, len, (off_t)0,
+		    UIO_SYSSPACE, IO_NODELOCKED | IO_JOURNALLOCKED,
+		    ap->a_cnp->cn_cred, NULL, NULL);
+	}
+
+	VOP_UNLOCK(*vpp);
+	if (error)
+		vrele(*vpp);
+
+out:
+	fstrans_done(dvp->v_mount);
 
 	UNMARK_VNODE(dvp);
 	/* XXX: is it even possible for the symlink to get MARK'd? */

Index: src/sys/ufs/lfs/ulfs_extern.h
diff -u src/sys/ufs/lfs/ulfs_extern.h:1.10 src/sys/ufs/lfs/ulfs_extern.h:1.11
--- src/sys/ufs/lfs/ulfs_extern.h:1.10	Sun Jul 28 01:22:55 2013
+++ src/sys/ufs/lfs/ulfs_extern.h	Sat May 17 07:09:36 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_extern.h,v 1.10 2013/07/28 01:22:55 dholland Exp $	*/
+/*	$NetBSD: ulfs_extern.h,v 1.11 2014/05/17 07:09:36 dholland Exp $	*/
 /*  from NetBSD: ufs_extern.h,v 1.72 2012/05/09 00:21:18 riastradh Exp  */
 
 /*-
@@ -90,7 +90,6 @@ int	ulfs_rmdir(void *);
 #define	ulfs_poll	genfs_poll
 int	ulfs_setattr(void *);
 int	ulfs_strategy(void *);
-int	ulfs_symlink(void *);
 #define	ulfs_unlock	genfs_unlock
 int	ulfs_whiteout(void *);
 int	ulfsspec_close(void *);

Reply via email to