Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Oct 2013 21:03:34 +0000 (UTC)
From:      Mark Murray <markm@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r256243 - in projects/random_number_generator: . bin bin/freebsd-version lib/libprocstat libexec libexec/freebsd-version sys/dev/cxgbe sys/dev/isci sys/dev/iscsi sys/dev/ixgbe sys/kern ...
Message-ID:  <201310092103.r99L3YYp028514@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markm
Date: Wed Oct  9 21:03:34 2013
New Revision: 256243
URL: http://svnweb.freebsd.org/changeset/base/256243

Log:
  MFC - tracking commit.

Added:
  projects/random_number_generator/bin/freebsd-version/
     - copied from r256242, head/bin/freebsd-version/
Deleted:
  projects/random_number_generator/libexec/freebsd-version/
Modified:
  projects/random_number_generator/ObsoleteFiles.inc
  projects/random_number_generator/bin/Makefile
  projects/random_number_generator/lib/libprocstat/libprocstat.c
  projects/random_number_generator/libexec/Makefile
  projects/random_number_generator/sys/dev/cxgbe/t4_main.c
  projects/random_number_generator/sys/dev/isci/isci_io_request.c
  projects/random_number_generator/sys/dev/isci/isci_sysctl.c
  projects/random_number_generator/sys/dev/isci/isci_task_request.c
  projects/random_number_generator/sys/dev/iscsi/icl.c
  projects/random_number_generator/sys/dev/iscsi/iscsi.c
  projects/random_number_generator/sys/dev/ixgbe/ixgbe.c
  projects/random_number_generator/sys/kern/kern_descrip.c
  projects/random_number_generator/sys/kern/vfs_bio.c
  projects/random_number_generator/sys/kern/vfs_subr.c
  projects/random_number_generator/sys/net/if.h
  projects/random_number_generator/sys/net/if_ethersubr.c
  projects/random_number_generator/sys/net/if_lagg.c
  projects/random_number_generator/usr.sbin/bhyveload/bhyveload.8
Directory Properties:
  projects/random_number_generator/   (props changed)
  projects/random_number_generator/sys/   (props changed)
  projects/random_number_generator/usr.sbin/bhyveload/   (props changed)

Modified: projects/random_number_generator/ObsoleteFiles.inc
==============================================================================
--- projects/random_number_generator/ObsoleteFiles.inc	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/ObsoleteFiles.inc	Wed Oct  9 21:03:34 2013	(r256243)
@@ -38,6 +38,8 @@
 #   xargs -n1 | sort | uniq -d;
 # done
 
+# 20131009: freebsd-version moved from /libexec to /bin
+OLD_FILES+=/libexec/freebsd-version
 # 20131001: ar and ranlib from binutils not used
 OLD_FILES+=usr/bin/gnu-ar
 OLD_FILES+=usr/bin/gnu-ranlib

Modified: projects/random_number_generator/bin/Makefile
==============================================================================
--- projects/random_number_generator/bin/Makefile	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/bin/Makefile	Wed Oct  9 21:03:34 2013	(r256243)
@@ -15,6 +15,7 @@ SUBDIR= cat \
 	echo \
 	ed \
 	expr \
+	freebsd-version \
 	getfacl \
 	hostname \
 	kenv \

Modified: projects/random_number_generator/lib/libprocstat/libprocstat.c
==============================================================================
--- projects/random_number_generator/lib/libprocstat/libprocstat.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/lib/libprocstat/libprocstat.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/conf.h>
 #include <sys/ksem.h>
 #include <sys/mman.h>
+#include <sys/capability.h>
 #define	_KERNEL
 #include <sys/mount.h>
 #include <sys/pipe.h>
@@ -395,7 +396,10 @@ filestat_new_entry(void *typedep, int ty
 	entry->fs_ref_count = refcount;
 	entry->fs_offset = offset;
 	entry->fs_path = path;
-	entry->fs_cap_rights = *cap_rightsp;
+	if (cap_rightsp != NULL)
+		entry->fs_cap_rights = *cap_rightsp;
+	else
+		cap_rights_init(&entry->fs_cap_rights);
 	return (entry);
 }
 
@@ -478,21 +482,21 @@ procstat_getfiles_kvm(struct procstat *p
 	/* root directory vnode, if one. */
 	if (filed.fd_rdir) {
 		entry = filestat_new_entry(filed.fd_rdir, PS_FST_TYPE_VNODE, -1,
-		    PS_FST_FFLAG_READ, PS_FST_UFLAG_RDIR, 0, 0, NULL, 0);
+		    PS_FST_FFLAG_READ, PS_FST_UFLAG_RDIR, 0, 0, NULL, NULL);
 		if (entry != NULL)
 			STAILQ_INSERT_TAIL(head, entry, next);
 	}
 	/* current working directory vnode. */
 	if (filed.fd_cdir) {
 		entry = filestat_new_entry(filed.fd_cdir, PS_FST_TYPE_VNODE, -1,
-		    PS_FST_FFLAG_READ, PS_FST_UFLAG_CDIR, 0, 0, NULL, 0);
+		    PS_FST_FFLAG_READ, PS_FST_UFLAG_CDIR, 0, 0, NULL, NULL);
 		if (entry != NULL)
 			STAILQ_INSERT_TAIL(head, entry, next);
 	}
 	/* jail root, if any. */
 	if (filed.fd_jdir) {
 		entry = filestat_new_entry(filed.fd_jdir, PS_FST_TYPE_VNODE, -1,
-		    PS_FST_FFLAG_READ, PS_FST_UFLAG_JAIL, 0, 0, NULL, 0);
+		    PS_FST_FFLAG_READ, PS_FST_UFLAG_JAIL, 0, 0, NULL, NULL);
 		if (entry != NULL)
 			STAILQ_INSERT_TAIL(head, entry, next);
 	}
@@ -500,14 +504,14 @@ procstat_getfiles_kvm(struct procstat *p
 	if (kp->ki_tracep) {
 		entry = filestat_new_entry(kp->ki_tracep, PS_FST_TYPE_VNODE, -1,
 		    PS_FST_FFLAG_READ | PS_FST_FFLAG_WRITE,
-		    PS_FST_UFLAG_TRACE, 0, 0, NULL, 0);
+		    PS_FST_UFLAG_TRACE, 0, 0, NULL, NULL);
 		if (entry != NULL)
 			STAILQ_INSERT_TAIL(head, entry, next);
 	}
 	/* text vnode, if one */
 	if (kp->ki_textvp) {
 		entry = filestat_new_entry(kp->ki_textvp, PS_FST_TYPE_VNODE, -1,
-		    PS_FST_FFLAG_READ, PS_FST_UFLAG_TEXT, 0, 0, NULL, 0);
+		    PS_FST_FFLAG_READ, PS_FST_UFLAG_TEXT, 0, 0, NULL, NULL);
 		if (entry != NULL)
 			STAILQ_INSERT_TAIL(head, entry, next);
 	}
@@ -515,7 +519,7 @@ procstat_getfiles_kvm(struct procstat *p
 	if ((vp = getctty(kd, kp)) != NULL) {
 		entry = filestat_new_entry(vp, PS_FST_TYPE_VNODE, -1,
 		    PS_FST_FFLAG_READ | PS_FST_FFLAG_WRITE,
-		    PS_FST_UFLAG_CTTY, 0, 0, NULL, 0);
+		    PS_FST_UFLAG_CTTY, 0, 0, NULL, NULL);
 		if (entry != NULL)
 			STAILQ_INSERT_TAIL(head, entry, next);
 	}
@@ -578,7 +582,7 @@ procstat_getfiles_kvm(struct procstat *p
 		}
 		/* XXXRW: No capability rights support for kvm yet. */
 		entry = filestat_new_entry(data, type, i,
-		    to_filestat_flags(file.f_flag), 0, 0, 0, NULL, 0);
+		    to_filestat_flags(file.f_flag), 0, 0, 0, NULL, NULL);
 		if (entry != NULL)
 			STAILQ_INSERT_TAIL(head, entry, next);
 	}
@@ -637,7 +641,7 @@ do_mmapped:
 			 */
 			entry = filestat_new_entry(object.handle,
 			    PS_FST_TYPE_VNODE, -1, fflags,
-			    PS_FST_UFLAG_MMAP, 0, 0, NULL, 0);
+			    PS_FST_UFLAG_MMAP, 0, 0, NULL, NULL);
 			if (entry != NULL)
 				STAILQ_INSERT_TAIL(head, entry, next);
 		}
@@ -878,7 +882,7 @@ procstat_getfiles_sysctl(struct procstat
 				path = NULL;
 			entry = filestat_new_entry(kve, PS_FST_TYPE_VNODE, -1,
 			    fflags, PS_FST_UFLAG_MMAP, refcount, offset, path,
-			    0);
+			    NULL);
 			if (entry != NULL)
 				STAILQ_INSERT_TAIL(head, entry, next);
 		}

Modified: projects/random_number_generator/libexec/Makefile
==============================================================================
--- projects/random_number_generator/libexec/Makefile	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/libexec/Makefile	Wed Oct  9 21:03:34 2013	(r256243)
@@ -8,7 +8,6 @@ SUBDIR=	${_atf} \
 	bootpd \
 	${_comsat} \
 	fingerd \
-	freebsd-version \
 	ftpd \
 	getty \
 	${_mail.local} \

Modified: projects/random_number_generator/sys/dev/cxgbe/t4_main.c
==============================================================================
--- projects/random_number_generator/sys/dev/cxgbe/t4_main.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/dev/cxgbe/t4_main.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -950,7 +950,7 @@ cxgbe_probe(device_t dev)
 
 #define T4_CAP (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | \
     IFCAP_VLAN_HWCSUM | IFCAP_TSO | IFCAP_JUMBO_MTU | IFCAP_LRO | \
-    IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE | IFCAP_HWCSUM_IPV6)
+    IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE | IFCAP_HWCSUM_IPV6 | IFCAP_HWSTATS)
 #define T4_CAP_ENABLE (T4_CAP)
 
 static int

Modified: projects/random_number_generator/sys/dev/isci/isci_io_request.c
==============================================================================
--- projects/random_number_generator/sys/dev/isci/isci_io_request.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/dev/isci/isci_io_request.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -153,11 +153,16 @@ isci_io_request_complete(SCI_CONTROLLER_
 
 	case SCI_IO_FAILURE_REMOTE_DEVICE_RESET_REQUIRED:
 		isci_remote_device_reset(isci_remote_device, NULL);
+		ccb->ccb_h.status |= CAM_REQ_TERMIO;
+		isci_log_message(0, "ISCI",
+		    "isci: bus=%x target=%x lun=%x cdb[0]=%x remote device reset required\n",
+		    ccb->ccb_h.path_id, ccb->ccb_h.target_id,
+		    ccb->ccb_h.target_lun, ccb->csio.cdb_io.cdb_bytes[0]);
+		break;
 
-		/* drop through */
 	case SCI_IO_FAILURE_TERMINATED:
 		ccb->ccb_h.status |= CAM_REQ_TERMIO;
-		isci_log_message(1, "ISCI",
+		isci_log_message(0, "ISCI",
 		    "isci: bus=%x target=%x lun=%x cdb[0]=%x terminated\n",
 		    ccb->ccb_h.path_id, ccb->ccb_h.target_id,
 		    ccb->ccb_h.target_lun, ccb->csio.cdb_io.cdb_bytes[0]);

Modified: projects/random_number_generator/sys/dev/isci/isci_sysctl.c
==============================================================================
--- projects/random_number_generator/sys/dev/isci/isci_sysctl.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/dev/isci/isci_sysctl.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -193,6 +193,35 @@ isci_sysctl_start_phy(SYSCTL_HANDLER_ARG
 	return 0;
 }
 
+static int
+isci_sysctl_log_frozen_lun_masks(SYSCTL_HANDLER_ARGS)
+{
+	struct isci_softc	*isci = (struct isci_softc *)arg1;
+	struct ISCI_REMOTE_DEVICE *device;
+	int32_t			log_frozen_devices = 0;
+	int			error, i, j;
+
+	error = sysctl_handle_int(oidp, &log_frozen_devices, 0, req);
+
+	if (error || log_frozen_devices == 0)
+		return (error);
+
+	for (i = 0; i < isci->controller_count; i++) {
+		for (j = 0; j < SCI_MAX_REMOTE_DEVICES; j++) {
+			device = isci->controllers[i].remote_device[j];
+
+			if (device == NULL)
+				continue;
+
+			device_printf(isci->device,
+			    "controller %d device %3d frozen_lun_mask 0x%02x\n",
+			    i, j, device->frozen_lun_mask);
+		}
+	}
+
+	return (0);
+}
+
 void isci_sysctl_initialize(struct isci_softc *isci)
 {
 	struct sysctl_ctx_list *sysctl_ctx = device_get_sysctl_ctx(isci->device);
@@ -225,5 +254,10 @@ void isci_sysctl_initialize(struct isci_
 	SYSCTL_ADD_PROC(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
 	    "start_phy", CTLTYPE_UINT| CTLFLAG_RW, isci, 0,
 	    isci_sysctl_start_phy, "IU", "Start PHY on a controller");
+
+	SYSCTL_ADD_PROC(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
+	    "log_frozen_lun_masks", CTLTYPE_UINT| CTLFLAG_RW, isci, 0,
+	    isci_sysctl_log_frozen_lun_masks, "IU",
+	    "Log frozen lun masks to kernel log");
 }
 

Modified: projects/random_number_generator/sys/dev/isci/isci_task_request.c
==============================================================================
--- projects/random_number_generator/sys/dev/isci/isci_task_request.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/dev/isci/isci_task_request.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -194,11 +194,20 @@ isci_task_request_complete(SCI_CONTROLLE
 		break;
 
 	case SCI_TASK_FAILURE_INVALID_STATE:
+		retry_task = TRUE;
+		isci_log_message(0, "ISCI",
+		    "task failure (invalid state) - retrying\n");
+		break;
+
 	case SCI_TASK_FAILURE_INSUFFICIENT_RESOURCES:
-	case SCI_FAILURE_TIMEOUT:
 		retry_task = TRUE;
 		isci_log_message(0, "ISCI",
-		    "unhandled task completion code 0x%x\n", completion_status);
+		    "task failure (insufficient resources) - retrying\n");
+		break;
+
+	case SCI_FAILURE_TIMEOUT:
+		retry_task = TRUE;
+		isci_log_message(0, "ISCI", "task timeout - retrying\n");
 		break;
 
 	case SCI_TASK_FAILURE:

Modified: projects/random_number_generator/sys/dev/iscsi/icl.c
==============================================================================
--- projects/random_number_generator/sys/dev/iscsi/icl.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/dev/iscsi/icl.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -564,6 +564,7 @@ icl_conn_receive_pdu(struct icl_conn *ic
 			    "MaxDataSegmentLength %zd; "
 			    "dropping connection",
 			    len, ic->ic_max_data_segment_length);
+			error = EINVAL;
 			break;
 		}
 

Modified: projects/random_number_generator/sys/dev/iscsi/iscsi.c
==============================================================================
--- projects/random_number_generator/sys/dev/iscsi/iscsi.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/dev/iscsi/iscsi.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -950,40 +950,59 @@ iscsi_pdu_handle_data_in(struct icl_pdu 
 
 	csio = &io->io_ccb->csio;
 
-	if (ntohl(bhsdi->bhsdi_buffer_offset) + data_segment_len >
-	    csio->dxfer_len) {
+	if (io->io_received + data_segment_len > csio->dxfer_len) {
 		ISCSI_SESSION_WARN(is, "oversize data segment (%zd bytes "
-		    "at offset %d, buffer is %d)",
-		    data_segment_len, ntohl(bhsdi->bhsdi_buffer_offset),
-		    csio->dxfer_len);
+		    "at offset %zd, buffer is %d)",
+		    data_segment_len, io->io_received, csio->dxfer_len);
 		icl_pdu_free(response);
 		iscsi_session_reconnect(is);
 		return;
 	}
 
-	icl_pdu_get_data(response, 0, csio->data_ptr + ntohl(bhsdi->bhsdi_buffer_offset), data_segment_len);
+	icl_pdu_get_data(response, 0, csio->data_ptr + io->io_received, data_segment_len);
 	io->io_received += data_segment_len;
 
 	/*
 	 * XXX: Check DataSN.
 	 * XXX: Check F.
 	 */
-	if (bhsdi->bhsdi_flags & BHSDI_FLAGS_S) {
-		//ISCSI_SESSION_DEBUG(is, "got S flag; status 0x%x", bhsdi->bhsdi_status);
-		if (bhsdi->bhsdi_status == 0) {
-			io->io_ccb->ccb_h.status = CAM_REQ_CMP;
-		} else {
-			if ((io->io_ccb->ccb_h.status & CAM_DEV_QFRZN) == 0) {
-				xpt_freeze_devq(io->io_ccb->ccb_h.path, 1);
-				ISCSI_SESSION_DEBUG(is, "freezing devq");
+	if ((bhsdi->bhsdi_flags & BHSDI_FLAGS_S) == 0) {
+		/*
+		 * Nothing more to do.
+		 */
+		icl_pdu_free(response);
+		return;
+	}
+
+	//ISCSI_SESSION_DEBUG(is, "got S flag; status 0x%x", bhsdi->bhsdi_status);
+	if (bhsdi->bhsdi_status == 0) {
+		io->io_ccb->ccb_h.status = CAM_REQ_CMP;
+	} else {
+		if ((io->io_ccb->ccb_h.status & CAM_DEV_QFRZN) == 0) {
+			xpt_freeze_devq(io->io_ccb->ccb_h.path, 1);
+			ISCSI_SESSION_DEBUG(is, "freezing devq");
+		}
+		io->io_ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR | CAM_DEV_QFRZN;
+		csio->scsi_status = bhsdi->bhsdi_status;
+	}
+
+	if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
+		KASSERT(io->io_received <= csio->dxfer_len,
+		    ("io->io_received > csio->dxfer_len"));
+		if (io->io_received < csio->dxfer_len) {
+			csio->resid = ntohl(bhsdi->bhsdi_residual_count);
+			if (csio->resid != csio->dxfer_len - io->io_received) {
+				ISCSI_SESSION_WARN(is, "underflow mismatch: "
+				    "target indicates %d, we calculated %zd",
+				    csio->resid,
+				    csio->dxfer_len - io->io_received);
 			}
-			io->io_ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR | CAM_DEV_QFRZN;
-			csio->scsi_status = bhsdi->bhsdi_status;
+			csio->resid = csio->dxfer_len - io->io_received;
 		}
-		xpt_done(io->io_ccb);
-		iscsi_outstanding_remove(is, io);
 	}
 
+	xpt_done(io->io_ccb);
+	iscsi_outstanding_remove(is, io);
 	icl_pdu_free(response);
 }
 
@@ -1033,8 +1052,24 @@ iscsi_pdu_handle_r2t(struct icl_pdu *res
 	 */
 
 	io->io_datasn = 0;
+
 	off = ntohl(bhsr2t->bhsr2t_buffer_offset);
+	if (off > csio->dxfer_len) {
+		ISCSI_SESSION_WARN(is, "target requested invalid offset "
+		    "%zd, buffer is is %d; reconnecting", off, csio->dxfer_len);
+		icl_pdu_free(response);
+		iscsi_session_reconnect(is);
+		return;
+	}
+
 	total_len = ntohl(bhsr2t->bhsr2t_desired_data_transfer_length);
+	if (total_len == 0 || total_len > csio->dxfer_len) {
+		ISCSI_SESSION_WARN(is, "target requested invalid length "
+		    "%zd, buffer is %d; reconnecting", total_len, csio->dxfer_len);
+		icl_pdu_free(response);
+		iscsi_session_reconnect(is);
+		return;
+	}
 
 	//ISCSI_SESSION_DEBUG(is, "r2t; off %zd, len %zd", off, total_len);
 
@@ -1045,7 +1080,8 @@ iscsi_pdu_handle_r2t(struct icl_pdu *res
 			len = is->is_max_data_segment_length;
 
 		if (off + len > csio->dxfer_len) {
-			ISCSI_SESSION_WARN(is, "bad off %zd, len %d",
+			ISCSI_SESSION_WARN(is, "target requested invalid "
+			    "length/offset %zd, buffer is %d; reconnecting",
 			    off + len, csio->dxfer_len);
 			icl_pdu_free(response);
 			iscsi_session_reconnect(is);
@@ -1068,8 +1104,11 @@ iscsi_pdu_handle_r2t(struct icl_pdu *res
 		    bhsr2t->bhsr2t_target_transfer_tag;
 		bhsdo->bhsdo_datasn = htonl(io->io_datasn++);
 		bhsdo->bhsdo_buffer_offset = htonl(off);
-		error = icl_pdu_append_data(request, csio->data_ptr + off, len, M_NOWAIT);
+		error = icl_pdu_append_data(request, csio->data_ptr + off, len,
+		    M_NOWAIT);
 		if (error != 0) {
+			ISCSI_SESSION_WARN(is, "failed to allocate memory; "
+			    "reconnecting");
 			icl_pdu_free(request);
 			icl_pdu_free(response);
 			iscsi_session_reconnect(is);

Modified: projects/random_number_generator/sys/dev/ixgbe/ixgbe.c
==============================================================================
--- projects/random_number_generator/sys/dev/ixgbe/ixgbe.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/dev/ixgbe/ixgbe.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -2662,7 +2662,8 @@ ixgbe_setup_interface(device_t dev, stru
 	ifp->if_capabilities |= IFCAP_LRO;
 	ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING
 			     |  IFCAP_VLAN_HWTSO
-			     |  IFCAP_VLAN_MTU;
+			     |  IFCAP_VLAN_MTU
+			     |  IFCAP_HWSTATS;
 	ifp->if_capenable = ifp->if_capabilities;
 
 	/*

Modified: projects/random_number_generator/sys/kern/kern_descrip.c
==============================================================================
--- projects/random_number_generator/sys/kern/kern_descrip.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/kern/kern_descrip.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -119,6 +119,7 @@ static int	closefp(struct filedesc *fdp,
 static int	fd_first_free(struct filedesc *fdp, int low, int size);
 static int	fd_last_used(struct filedesc *fdp, int size);
 static void	fdgrowtable(struct filedesc *fdp, int nfd);
+static void	fdgrowtable_exp(struct filedesc *fdp, int nfd);
 static void	fdunused(struct filedesc *fdp, int fd);
 static void	fdused(struct filedesc *fdp, int fd);
 static int	fill_pipe_info(struct pipe *pi, struct kinfo_file *kif);
@@ -129,6 +130,7 @@ static int	fill_sem_info(struct file *fp
 static int	fill_shm_info(struct file *fp, struct kinfo_file *kif);
 static int	fill_socket_info(struct socket *so, struct kinfo_file *kif);
 static int	fill_vnode_info(struct vnode *vp, struct kinfo_file *kif);
+static int	getmaxfd(struct proc *p);
 
 /*
  * Each process has:
@@ -771,6 +773,18 @@ kern_fcntl(struct thread *td, int fd, in
 	return (error);
 }
 
+static int
+getmaxfd(struct proc *p)
+{
+	int maxfd;
+
+	PROC_LOCK(p);
+	maxfd = min((int)lim_cur(p, RLIMIT_NOFILE), maxfilesperproc);
+	PROC_UNLOCK(p);
+
+	return (maxfd);
+}
+
 /*
  * Common code for dup, dup2, fcntl(F_DUPFD) and fcntl(F_DUP2FD).
  */
@@ -797,9 +811,7 @@ do_dup(struct thread *td, int flags, int
 		return (EBADF);
 	if (new < 0)
 		return (flags & DUP_FCNTL ? EINVAL : EBADF);
-	PROC_LOCK(p);
-	maxfd = min((int)lim_cur(p, RLIMIT_NOFILE), maxfilesperproc);
-	PROC_UNLOCK(p);
+	maxfd = getmaxfd(p);
 	if (new >= maxfd)
 		return (flags & DUP_FCNTL ? EINVAL : EBADF);
 
@@ -844,7 +856,7 @@ do_dup(struct thread *td, int flags, int
 				return (EMFILE);
 			}
 #endif
-			fdgrowtable(fdp, new + 1);
+			fdgrowtable_exp(fdp, new + 1);
 			oldfde = &fdp->fd_ofiles[old];
 		}
 		newfde = &fdp->fd_ofiles[new];
@@ -1467,6 +1479,24 @@ filecaps_validate(const struct filecaps 
 	    ("%s: ioctls without CAP_IOCTL", func));
 }
 
+static void
+fdgrowtable_exp(struct filedesc *fdp, int nfd)
+{
+	int nfd1, maxfd;
+
+	FILEDESC_XLOCK_ASSERT(fdp);
+
+	nfd1 = fdp->fd_nfiles * 2;
+	if (nfd1 < nfd)
+		nfd1 = nfd;
+	maxfd = getmaxfd(curproc);
+	if (maxfd < nfd1)
+		nfd1 = maxfd;
+	KASSERT(nfd <= nfd1,
+	    ("too low nfd1 %d %d %d %d", nfd, fdp->fd_nfiles, maxfd, nfd1));
+	fdgrowtable(fdp, nfd1);
+}
+
 /*
  * Grow the file table to accomodate (at least) nfd descriptors.
  */
@@ -1563,9 +1593,7 @@ fdalloc(struct thread *td, int minfd, in
 	if (fdp->fd_freefile > minfd)
 		minfd = fdp->fd_freefile;
 
-	PROC_LOCK(p);
-	maxfd = min((int)lim_cur(p, RLIMIT_NOFILE), maxfilesperproc);
-	PROC_UNLOCK(p);
+	maxfd = getmaxfd(p);
 
 	/*
 	 * Search the bitmap for a free descriptor starting at minfd.
@@ -1587,7 +1615,7 @@ fdalloc(struct thread *td, int minfd, in
 		 * fd is already equal to first free descriptor >= minfd, so
 		 * we only need to grow the table and we are done.
 		 */
-		fdgrowtable(fdp, allocfd);
+		fdgrowtable_exp(fdp, allocfd);
 	}
 
 	/*
@@ -1652,9 +1680,7 @@ fdavail(struct thread *td, int n)
 	 *      call racct_add() from there instead of dealing with containers
 	 *      here.
 	 */
-	PROC_LOCK(p);
-	lim = min((int)lim_cur(p, RLIMIT_NOFILE), maxfilesperproc);
-	PROC_UNLOCK(p);
+	lim = getmaxfd(p);
 	if ((i = lim - fdp->fd_nfiles) > 0 && (n -= i) <= 0)
 		return (1);
 	last = min(fdp->fd_nfiles, lim);

Modified: projects/random_number_generator/sys/kern/vfs_bio.c
==============================================================================
--- projects/random_number_generator/sys/kern/vfs_bio.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/kern/vfs_bio.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -2076,7 +2076,8 @@ getnewbuf_bufd_help(struct vnode *vp, in
 	wait = MNT_NOWAIT;
 	mtx_lock(&nblock);
 	while (needsbuffer & flags) {
-		if (vp != NULL && (td->td_pflags & TDP_BUFNEED) == 0) {
+		if (vp != NULL && vp->v_type != VCHR &&
+		    (td->td_pflags & TDP_BUFNEED) == 0) {
 			mtx_unlock(&nblock);
 
 			/*

Modified: projects/random_number_generator/sys/kern/vfs_subr.c
==============================================================================
--- projects/random_number_generator/sys/kern/vfs_subr.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/kern/vfs_subr.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -1315,6 +1315,8 @@ vinvalbuf(struct vnode *vp, int flags, i
 
 	CTR3(KTR_VFS, "%s: vp %p with flags %d", __func__, vp, flags);
 	ASSERT_VOP_LOCKED(vp, "vinvalbuf");
+	if (vp->v_object != NULL && vp->v_object->handle != vp)
+		return (0);
 	return (bufobj_invalbuf(&vp->v_bufobj, flags, slpflag, slptimeo));
 }
 

Modified: projects/random_number_generator/sys/net/if.h
==============================================================================
--- projects/random_number_generator/sys/net/if.h	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/net/if.h	Wed Oct  9 21:03:34 2013	(r256243)
@@ -231,6 +231,7 @@ struct if_data {
 #define	IFCAP_NETMAP		0x100000 /* netmap mode supported/enabled */
 #define	IFCAP_RXCSUM_IPV6	0x200000  /* can offload checksum on IPv6 RX */
 #define	IFCAP_TXCSUM_IPV6	0x400000  /* can offload checksum on IPv6 TX */
+#define	IFCAP_HWSTATS		0x800000 /* manages counters internally */
 
 #define IFCAP_HWCSUM_IPV6	(IFCAP_RXCSUM_IPV6 | IFCAP_TXCSUM_IPV6)
 

Modified: projects/random_number_generator/sys/net/if_ethersubr.c
==============================================================================
--- projects/random_number_generator/sys/net/if_ethersubr.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/net/if_ethersubr.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -528,7 +528,8 @@ ether_input_internal(struct ifnet *ifp, 
 		m->m_flags &= ~M_HASFCS;
 	}
 
-	ifp->if_ibytes += m->m_pkthdr.len;
+	if (!(ifp->if_capenable & IFCAP_HWSTATS))
+		ifp->if_ibytes += m->m_pkthdr.len;
 
 	/* Allow monitor mode to claim this frame, after stats are updated. */
 	if (ifp->if_flags & IFF_MONITOR) {

Modified: projects/random_number_generator/sys/net/if_lagg.c
==============================================================================
--- projects/random_number_generator/sys/net/if_lagg.c	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/sys/net/if_lagg.c	Wed Oct  9 21:03:34 2013	(r256243)
@@ -347,6 +347,7 @@ lagg_clone_create(struct if_clone *ifc, 
 	ifp->if_init = lagg_init;
 	ifp->if_ioctl = lagg_ioctl;
 	ifp->if_flags = IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST;
+	ifp->if_capenable = ifp->if_capabilities = IFCAP_HWSTATS;
 
 	/*
 	 * Attach as an ordinary ethernet device, children will be attached

Modified: projects/random_number_generator/usr.sbin/bhyveload/bhyveload.8
==============================================================================
--- projects/random_number_generator/usr.sbin/bhyveload/bhyveload.8	Wed Oct  9 20:58:50 2013	(r256242)
+++ projects/random_number_generator/usr.sbin/bhyveload/bhyveload.8	Wed Oct  9 21:03:34 2013	(r256243)
@@ -1,4 +1,4 @@
-\"
+.\"
 .\" Copyright (c) 2012 NetApp Inc
 .\" All rights reserved.
 .\"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310092103.r99L3YYp028514>