svn commit: r310988 - in head/net/iet: . files
Xin LI
delphij at FreeBSD.org
Fri Jan 25 21:30:25 UTC 2013
Author: delphij
Date: Fri Jan 25 21:30:24 2013
New Revision: 310988
URL: http://svnweb.freebsd.org/changeset/ports/310988
Log:
Add a workaround for r231949 which fixes the problem of uio_resid being
truncated into int but introduced an KPI/KBI change. While I'm there,
also add code to support the now MPSAFE VFS.
Added:
head/net/iet/files/patch-freebsd10 (contents, props changed)
Modified:
head/net/iet/Makefile
Modified: head/net/iet/Makefile
==============================================================================
--- head/net/iet/Makefile Fri Jan 25 21:10:02 2013 (r310987)
+++ head/net/iet/Makefile Fri Jan 25 21:30:24 2013 (r310988)
@@ -7,7 +7,7 @@
PORTNAME= iet
PORTVERSION= 1.4.20.2
-PORTREVISION= 4
+PORTREVISION= 5
CATEGORIES= net
MASTER_SITES= SF/iscsitarget/iscsitarget/${PORTVERSION}/
DISTNAME= iscsitarget-${PORTVERSION}
Added: head/net/iet/files/patch-freebsd10
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/net/iet/files/patch-freebsd10 Fri Jan 25 21:30:24 2013 (r310988)
@@ -0,0 +1,222 @@
+--- kernel/iscsi.c.orig 2013-01-25 12:58:06.191784106 -0800
++++ kernel/iscsi.c 2013-01-25 12:58:45.785782759 -0800
+@@ -1963,7 +1963,7 @@
+ return ctr_major;
+ }
+ #else
+- ietdev = make_dev(&iet_csw, 0, UID_ROOT, GID_WHEEL, 0550, ctr_name);
++ ietdev = make_dev(&iet_csw, 0, UID_ROOT, GID_WHEEL, 0550, "%s", ctr_name);
+ #endif
+
+ #ifdef LINUX
+--- kernel/block-io.c.orig 2013-01-25 12:58:06.194781035 -0800
++++ kernel/block-io.c 2013-01-25 12:58:45.786780433 -0800
+@@ -260,7 +260,9 @@
+ int flags = FMODE_READ | (LUReadonly(volume) ? 0 : FMODE_WRITE);
+ int vaccess;
+ int error;
++#if defined(NDHASGIANT)
+ int vfslocked;
++#endif
+ struct vnode *devvp = NULL;
+ struct g_provider *pp;
+ struct g_geom *gp;
+@@ -270,13 +272,19 @@
+ if (!bio_data->path)
+ return -(ENOMEM);
+
++#if defined(MPSAFE)
+ NDINIT(&nd, LOOKUP, NOFOLLOW | MPSAFE, UIO_SYSSPACE, path, curthread);
++#else
++ NDINIT(&nd, LOOKUP, NOFOLLOW, UIO_SYSSPACE, path, curthread);
++#endif
+ error = vn_open(&nd, &flags, 0, NULL);
+ if (error) {
+ eprintk("failed to open disk %s error %d\n", path, error);
+ return -(error);
+ }
++#if defined(NDHASGIANT)
+ vfslocked = NDHASGIANT(&nd);
++#endif
+ NDFREE(&nd, NDF_ONLY_PNBUF);
+
+ devvp = nd.ni_vp;
+@@ -321,7 +329,9 @@
+ g_topology_unlock();
+ bio_data->bdev = devvp;
+ VOP_UNLOCK(devvp, 0);
++#if defined(NDHASGIANT)
+ VFS_UNLOCK_GIANT(vfslocked);
++#endif
+ return 0;
+
+ gcleanup: /* On geom errors */
+@@ -331,7 +341,9 @@
+ failed:
+ VOP_UNLOCK(devvp, 0);
+ (void)vn_close(devvp, flags, curthread->td_ucred, curthread);
++#if defined(NDHASGIANT)
+ VFS_UNLOCK_GIANT(vfslocked);
++#endif
+ return -(error);
+ }
+ #endif
+@@ -439,11 +451,15 @@
+ }
+
+ if (bio_data->bdev) {
++#if defined(NDHASGIANT)
+ int vfslocked;
+
+ vfslocked = VFS_LOCK_GIANT(bio_data->bdev->v_mount);
++#endif
+ (void)vn_close(bio_data->bdev, flags, curthread->td_ucred, curthread);
++#if defined(NDHASGIANT)
+ VFS_UNLOCK_GIANT(vfslocked);
++#endif
+ }
+
+ if (bio_data->path)
+--- kernel/file-io.c.orig 2013-01-25 12:58:06.197782092 -0800
++++ kernel/file-io.c 2013-01-25 13:01:32.708794758 -0800
+@@ -24,8 +24,15 @@
+ struct file *filp;
+ #else
+ struct vnode *vp;
++#if defined(NDHASGIANT)
+ int vfslocked;
+- int error, aresid;
++#endif
++ int error;
++#if ((__FreeBSD_version < 1000000 && __FreeBSD_version >= 900506) || (__FreeBSD_version >= 1000009))
++ ssize_t aresid;
++#else
++ int aresid;
++#endif
+ #endif
+ struct fileio_data *p = lu->private;
+ page_t *page;
+@@ -40,8 +47,10 @@
+ filp = p->filp;
+ #else
+ vp = p->filevp;
++#if defined(NDHASGIANT)
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+ #endif
++#endif
+
+ size = tio->size;
+ offset= tio->offset;
+@@ -87,8 +96,10 @@
+ }
+ assert(!size);
+ #ifdef FREEBSD
++#if defined(NDHASGIANT)
+ VFS_UNLOCK_GIANT(vfslocked);
+ #endif
++#endif
+ return err;
+ }
+
+@@ -149,12 +160,17 @@
+ static int fileio_sync(struct iet_volume *lu, struct tio *tio)
+ {
+ struct fileio_data *p = lu->private;
+- int vfslocked, error;
++#if defined(NDHASGIANT)
++ int vfslocked;
++#endif
++ int error;
+ struct vnode *vp;
+ struct mount *mp;
+
+ vp = p->filevp;
++#if defined(NDHASGIANT)
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
++#endif
+ if ((error = vn_start_write(vp, &mp, V_WAIT | PCATCH)) != 0)
+ goto drop;
+
+@@ -163,7 +179,9 @@
+ VOP_UNLOCK(vp, 0);
+ vn_finished_write(mp);
+ drop:
++#if defined(NDHASGIANT)
+ VFS_UNLOCK_GIANT(vfslocked);
++#endif
+ return error;
+ }
+
+@@ -174,16 +192,25 @@
+ struct nameidata nd;
+ struct vnode *filevp;
+ struct vattr vattr;
++#if defined(NDHASGIANT)
+ int vfslocked;
++#endif
+ int flags = FMODE_READ | (LUReadonly(volume) ? 0 : FMODE_WRITE);
+
+ info->path = kstrdup(path, GFP_KERNEL);
+ if (!info->path)
+ return -ENOMEM;
+
++#if defined(NDHASGIANT)
+ NDINIT(&nd, LOOKUP, NOFOLLOW | MPSAFE, UIO_SYSSPACE, path, curthread);
++#else
++ NDINIT(&nd, LOOKUP, NOFOLLOW, UIO_SYSSPACE, path, curthread);
++#endif
+ error = namei(&nd);
++#if defined(NDHASGIANT)
+ vfslocked = NDHASGIANT(&nd);
++#else
++#endif
+ if (error) {
+ eprintk("lookup failed for %s err %d\n", path, error);
+ return -(error);
+@@ -193,7 +220,9 @@
+ if (filevp->v_type != VREG) {
+ eprintk("path %s not a regular file\n", path);
+ NDFREE(&nd, 0);
++#if defined(NDHASGIANT)
+ VFS_UNLOCK_GIANT(vfslocked);
++#endif
+ return -(EINVAL);
+ }
+
+@@ -201,7 +230,9 @@
+ if (error != 0) {
+ eprintk("failed to open path %s err %d\n", path, error);
+ NDFREE(&nd, 0);
++#if defined(NDHASGIANT)
+ VFS_UNLOCK_GIANT(vfslocked);
++#endif
+ return -(error);
+ }
+ NDFREE(&nd, NDF_ONLY_PNBUF);
+@@ -212,7 +243,9 @@
+ VOP_UNLOCK(filevp, 0);
+ (void)vn_close(filevp, flags, curthread->td_ucred, curthread);
+ vrele(filevp);
++#if defined(NDHASGIANT)
+ VFS_UNLOCK_GIANT(vfslocked);
++#endif
+ return -(error);
+ }
+
+@@ -300,12 +333,16 @@
+ #else
+ if (p->filevp) {
+ int flags = FMODE_READ | (LUReadonly(lu) ? 0 : FMODE_WRITE);
++#if defined(NDHASGIANT)
+ int vfslocked;
+
+ vfslocked = VFS_LOCK_GIANT(p->filevp->v_mount);
++#endif
+ vn_close(p->filevp, flags, curthread->td_ucred, curthread);
+ vrele(p->filevp);
++#if defined(NDHASGIANT)
+ VFS_UNLOCK_GIANT(vfslocked);
++#endif
+ }
+ #endif
+ kfree(p);
More information about the svn-ports-all
mailing list