From owner-svn-src-user@FreeBSD.ORG  Sun Sep  6 01:03:20 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 6E134106566C;
	Sun,  6 Sep 2009 01:03:20 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 5B8188FC1D;
	Sun,  6 Sep 2009 01:03:20 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n8613KEH068643;
	Sun, 6 Sep 2009 01:03:20 GMT (envelope-from kmacy@svn.freebsd.org)
Received: (from kmacy@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n8613KGD068634;
	Sun, 6 Sep 2009 01:03:20 GMT (envelope-from kmacy@svn.freebsd.org)
Message-Id: <200909060103.n8613KGD068634@svn.freebsd.org>
From: Kip Macy <kmacy@FreeBSD.org>
Date: Sun, 6 Sep 2009 01:03:19 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r196875 - in user/kmacy/releng_7_2_fcs_1/sys:
	compat/freebsd32 kern sys
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 06 Sep 2009 01:03:20 -0000

Author: kmacy
Date: Sun Sep  6 01:03:19 2009
New Revision: 196875
URL: http://svn.freebsd.org/changeset/base/196875

Log:
  - make parallel sendfile request handling more robust
  - eliminate per-write memory allocation

Modified:
  user/kmacy/releng_7_2_fcs_1/sys/compat/freebsd32/freebsd32_misc.c
  user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_sockbuf.c
  user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c
  user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c
  user/kmacy/releng_7_2_fcs_1/sys/sys/sockbuf.h
  user/kmacy/releng_7_2_fcs_1/sys/sys/socket.h
  user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h
  user/kmacy/releng_7_2_fcs_1/sys/sys/syscallsubr.h

Modified: user/kmacy/releng_7_2_fcs_1/sys/compat/freebsd32/freebsd32_misc.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/compat/freebsd32/freebsd32_misc.c	Sat Sep  5 23:23:49 2009	(r196874)
+++ user/kmacy/releng_7_2_fcs_1/sys/compat/freebsd32/freebsd32_misc.c	Sun Sep  6 01:03:19 2009	(r196875)
@@ -1861,7 +1861,8 @@ freebsd32_do_sendfile(struct thread *td,
 		}
 	}
 
-	error = kern_sendfile(td, &ap, hdr_uio, trl_uio, compat);
+	error = kern_sendfile(td, &ap, hdr_uio, trl_uio, compat,
+	    NULL, NULL, NULL);
 out:
 	if (hdr_uio)
 		free(hdr_uio, M_IOV);

Modified: user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_sockbuf.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_sockbuf.c	Sat Sep  5 23:23:49 2009	(r196874)
+++ user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_sockbuf.c	Sun Sep  6 01:03:19 2009	(r196875)
@@ -133,7 +133,7 @@ sbwait(struct sockbuf *sb)
 }
 
 int
-sblock(struct sockbuf *sb, int flags)
+_sblock(struct sockbuf *sb, int flags, const char *file, int line)
 {
 
 	KASSERT((flags & SBL_VALID) == flags,
@@ -142,12 +142,12 @@ sblock(struct sockbuf *sb, int flags)
 	if (flags & SBL_WAIT) {
 		if ((sb->sb_flags & SB_NOINTR) ||
 		    (flags & SBL_NOINTR)) {
-			sx_xlock(&sb->sb_sx);
+			_sx_xlock(&sb->sb_sx, 0, file, line);
 			return (0);
 		}
-		return (sx_xlock_sig(&sb->sb_sx));
+		return (_sx_xlock(&sb->sb_sx, SX_INTERRUPTIBLE, file, line));
 	} else {
-		if (sx_try_xlock(&sb->sb_sx) == 0)
+		if (_sx_try_xlock(&sb->sb_sx, file, line) == 0)
 			return (EWOULDBLOCK);
 		return (0);
 	}
@@ -882,8 +882,6 @@ sbdrop_internal(struct sockbuf *sb, int 
 	}
 }
 
-extern void sosendingwakeup(void *unused __unused);
-
 /*
  * Drop data from (the front of) a sockbuf.
  */
@@ -895,7 +893,7 @@ sbdrop_locked(struct sockbuf *sb, int le
 
 	sbdrop_internal(sb, len);
 	if (sb->sb_flags & SB_SENDING)
-		sosendingwakeup(NULL);
+		sosendingwakeup(sb);
 }
 
 void

Modified: user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c	Sat Sep  5 23:23:49 2009	(r196874)
+++ user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c	Sun Sep  6 01:03:19 2009	(r196875)
@@ -133,6 +133,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/sysproto.h>
 #include <sys/taskqueue.h>
 #include <sys/uio.h>
+#include <sys/vnode.h>
 #include <sys/jail.h>
 
 #include <security/mac/mac_framework.h>
@@ -3108,45 +3109,77 @@ soisdisconnected(struct socket *so)
 
 struct socketref {
 	struct proc *sr_proc;
+	struct ucred *sr_ucred;
 	struct file *sr_sock_fp;
 	struct file *sr_fp;
+	struct socket *sr_so;
 	struct sendfile_args sr_uap;
 	struct uio sr_hdr_uio;
 	struct uio sr_trl_uio;
-	int sr_compat;
+	short sr_compat;
 	int sr_magic;
+	struct task sr_task;
 	TAILQ_ENTRY(socketref) entry;
 
 };
 TAILQ_HEAD(srq, socketref);
 
-struct socketref_object {
-	struct srq sro_srh;
-	struct task sro_task;
-};
-
 struct srq *sendfile_bg_queue;
 struct mtx sendfile_bg_lock;
 struct callout *sendfile_callout;
 struct taskqueue *sendfile_tq;
 extern int getsock(struct filedesc *fdp, int fd,
     struct file **fpp, u_int *fflagp);
+static void sendfile_task_func(void *context, int pending __unused);
+static int srsendingwakeup(struct socketref *sr);
 
 MALLOC_DEFINE(M_SOCKREF, "sockref", "socket reference memory");
 
+#define SOCKBUF_LOCK_COND(sb, lockflag) do {	\
+		if ((lockflag))			\
+			SOCKBUF_LOCK((sb));	\
+} while (0)
+
+#define SOCKBUF_UNLOCK_COND(sb, lockflag) do {	\
+		if ((lockflag))			\
+			SOCKBUF_UNLOCK((sb));	\
+} while (0)
+
+
+static void
+socketref_free(struct socketref *sr)
+{
+	struct thread *td;
+	struct file *fp = sr->sr_fp;
+	struct file *sock_fp = sr->sr_sock_fp;
+	struct proc *p = sr->sr_proc;
+	struct ucred *cred = sr->sr_ucred;
+
+	if (cred != NULL)
+		crfree(cred);
+	vrele(fp->f_vnode);
+	fdrop(fp, NULL);
+	fdrop(sock_fp, NULL);
+	PRELE(p);
+#ifdef INVARIANTS
+	bzero(sr, sizeof(*sr));
+#endif	
+	free(sr, M_SOCKREF);
+}
+
 void
 soissending(struct socket *so, struct thread *td,
     struct sendfile_args *uap, struct uio *hdr_uio,
-    struct uio *trl_uio, int compat)
+    struct uio *trl_uio, int compat, int sbytes)
 {
 	struct socketref *ref;
-	struct srq *srh;
 	int error;
 	struct socket *refso;
+	struct vnode *vp;
 	
 	SOCKBUF_LOCK_ASSERT(&so->so_snd);
 	ref = malloc(sizeof(struct socketref), 
-	    M_SOCKREF, M_NOWAIT);
+	    M_SOCKREF, M_NOWAIT|M_ZERO);
 	if (ref == NULL)
 		return;
 	/*
@@ -3154,36 +3187,43 @@ soissending(struct socket *so, struct th
 	 * drop when done sending
 	 */
 	so->so_snd.sb_flags |= SB_SENDING;
+	PROC_LOCK(td->td_proc);
+	td->td_proc->p_lock++;
+	PROC_UNLOCK(td->td_proc);
+   
 	ref->sr_proc = td->td_proc;
 
 	if ((error = getsock(td->td_proc->p_fd, uap->s, &ref->sr_sock_fp,
 		    NULL)) != 0) {
-		free(ref, M_DEVBUF);
-		return;
+		goto error;
 	}
 	if (ref->sr_sock_fp->f_type != DTYPE_SOCKET) {
 		printf("socket descriptor s=%d is not socket", uap->s);
-		free(ref, M_DEVBUF);
-		return;
+		goto error;
 	}
 
 	refso = ref->sr_sock_fp->f_data;
 	if (refso != so) {
 		printf("socket mismatch between refso: %p so: %p\n",
 		    refso, so);
-		free(ref, M_DEVBUF);
-		return;		
+		goto error_sock_fp;
 	}
-	
+	ref->sr_so = refso;
+
 	if ((error = fget(td, uap->fd, &ref->sr_fp)) != 0) {
-		fdrop(ref->sr_sock_fp, td);
-		free(ref, M_DEVBUF);
-		return;
+		goto error_sock_fp;
+	} else if (ref->sr_fp->f_vnode != NULL) {
+		vp = ref->sr_fp->f_vnode;
+		vref(vp);
+	} else {
+		goto error_fp;
 	}
 
 	bcopy(uap, &ref->sr_uap, sizeof(*uap));
 	ref->sr_uap.sbytes = NULL;
-
+	ref->sr_uap.offset += sbytes;
+	if (uap->nbytes)
+		ref->sr_uap.nbytes -= sbytes;
 	/*
 	 * XXX 
 	 * We have to malloc memory for the uio data
@@ -3196,231 +3236,192 @@ soissending(struct socket *so, struct th
 		      sizeof(*trl_uio));
 	ref->sr_compat = compat;
 	ref->sr_magic = 0xCAFEBABE;
+	TASK_INIT(&ref->sr_task, 0, sendfile_task_func, ref);
+
 	CTR3(KTR_SPARE2, "enqueueing socket %p sock_fp %p s %d", so, ref->sr_sock_fp, uap->s);
 	mtx_lock(&sendfile_bg_lock);
-	srh = sendfile_bg_queue;
-	TAILQ_INSERT_HEAD(srh, ref, entry);
+	TAILQ_INSERT_TAIL(sendfile_bg_queue, ref, entry);
 	mtx_unlock(&sendfile_bg_lock);
-}
-
-static void
-socketref_free(struct socketref *sr)
-{
-	struct thread *td = curthread;
-
-	fdrop(sr->sr_sock_fp, td);
-	fdrop(sr->sr_fp, td);
-	free(sr, M_SOCKREF);
+	return;
+error_fp:
+	fdrop(ref->sr_fp, td);
+error_sock_fp:
+	fdrop(ref->sr_sock_fp, td);
+error:
+	free(ref, M_DEVBUF);
 }
 
 static void
 sendfile_task_func(void *context, int pending __unused)
 {
-	struct socketref_object *sro;
-	struct srq *sh;
-	struct socketref *sr, *srtmp;
+	struct socketref *sr;
 	struct socket *so;
 	struct sockbuf *sb;
-	struct proc *p;
-	struct thread *td;
 	struct file *sock_fp, *fp;
 	int error, writeable;
+	struct uio *hdr_uio = NULL, *trl_uio = NULL;
+	off_t sbytes;
 
-	sro = context;
-	sh = &sro->sro_srh;
-	td = curthread;
-
+	sr = context;
 	CTR0(KTR_SPARE2, "task_func running");
-	while (!TAILQ_EMPTY(sh)) {
-		sr = TAILQ_FIRST(sh);
-		TAILQ_REMOVE(sh, sr, entry);
-		if (sr->sr_magic != 0xCAFEBABE) {
-			printf("bad magic! 0x%x\n", sr->sr_magic);
-			continue;
-		}
-		p = td->td_proc;
-		td->td_proc = sr->sr_proc;
-		sock_fp = sr->sr_sock_fp;
-
-		CTR2(KTR_SPARE2, "processing sr %p sock_fp %p", sr, sock_fp);
-		if (sock_fp->f_type != DTYPE_SOCKET)
-			goto done;
+	if (sr->sr_magic != 0xCAFEBABE) {
+		printf("bad magic! 0x%x\n", sr->sr_magic);
+		/* XXX memory leak */
+		return;
+	}
+
+	sock_fp = sr->sr_sock_fp;
+	fp = sr->sr_fp;
+	CTR2(KTR_SPARE2, "processing sr %p sock_fp %p", sr, sock_fp);
+	if (sock_fp->f_type != DTYPE_SOCKET)
+		goto done;
 		
-		so = sock_fp->f_data;
-		CTR1(KTR_SPARE2, "task processing socket %p", so);
+	so = sock_fp->f_data;
+	CTR1(KTR_SPARE2, "task processing socket %p", so);
 		
-		if ((so->so_state & SS_ISCONNECTED) == 0)
-			goto done;
-		sb = &so->so_snd;
-		fp = sr->sr_fp;
+	if ((so->so_state & SS_ISCONNECTED) == 0)
+		goto done;
 
-		SOCKBUF_LOCK(sb);
-		sb->sb_flags &= ~SB_SENDING;
-		if (so->so_snd.sb_state & SBS_CANTSENDMORE) {
-			CTR1(KTR_SPARE2, "task expired socket %p", so);
-			sowwakeup_locked(so);
-		} else if (sowriteable(so)) {
-			off_t sbytes;
+	if (sr->sr_ucred == NULL &&
+	    (sr->sr_ucred = crdup(sr->sr_proc->p_ucred)) == NULL)
+		goto done;
 
-			sb->sb_flags |= SB_SENDING;
+	sb = &so->so_snd;
+	SOCKBUF_UNLOCK_ASSERT(sb);
+	SOCKBUF_LOCK(sb);
+	sb->sb_flags &= ~SB_SENDING;
+	if (sb->sb_state & SBS_CANTSENDMORE) {
+		CTR1(KTR_SPARE2, "SBS_CANTSENDMORE - socket %p", so);
+		sowwakeup_locked(so);
+		goto done;
+	} else if (sowriteable(so)) {
+		sb->sb_flags |= SB_SENDING;
+		SOCKBUF_UNLOCK(sb);
+		if (sr->sr_hdr_uio.uio_td != NULL)
+			hdr_uio = &sr->sr_hdr_uio;
+		if (sr->sr_trl_uio.uio_td != NULL)
+			trl_uio = &sr->sr_trl_uio;
+
+		sr->sr_uap.sbytes = &sbytes;
+		sr->sr_uap.flags |= SF_TASKQ;
+		CTR1(KTR_SPARE2, "task sending on socket %p", so);
+		
+		error = kern_sendfile(curthread, &sr->sr_uap,
+		    hdr_uio, trl_uio,
+		    sr->sr_compat, fp, so, sr->sr_ucred);
+		atomic_add_long(&fp->f_sfbytes, sbytes);
+		sr->sr_uap.offset += sbytes;
+		if (sr->sr_uap.nbytes)
+			sr->sr_uap.nbytes -= sbytes;
+		/*
+		 * XXX we have a race here 
+		 * - if sbdrop is called before a re-enqueue,
+		 *   we'll have a lost wakeup ... maybe call
+		 * sosendingwakup? Or check for sowriteable(so)	
+		 */
+		SOCKBUF_LOCK(sb);
+		if (error == EAGAIN && srsendingwakeup(sr) != ENOTCONN) {
 			SOCKBUF_UNLOCK(sb);
-			sr->sr_uap.sbytes = &sbytes;
-			CTR1(KTR_SPARE2, "task sending on socket %p", so);
-			error = kern_sendfile(td, &sr->sr_uap,
-			    &sr->sr_hdr_uio, &sr->sr_trl_uio,
-			    sr->sr_compat);
-			atomic_add_long(&fp->f_sfbytes, sbytes);
-			if (error != EAGAIN) {
-				SOCKBUF_LOCK(sb);
-				sb->sb_flags &= ~SB_SENDING;
-				sowwakeup_locked(so);
-			}
+			return;
 		}
-		td->td_proc = p;
-	done:
-		fdrop(fp, td);
-		fdrop(sr->sr_sock_fp, td);
-		free(sr, M_DEVBUF);
-	}
-	free(sro, M_DEVBUF);
+	} 
+	sb->sb_flags &= ~SB_SENDING;
+	sowwakeup_locked(so);
+done:
+	SOCKBUF_UNLOCK_ASSERT(sb);
+	socketref_free(sr);
 }
 
-#define SOCKBUF_LOCK_COND(sb, lockflag) do {	\
-		if ((lockflag))			\
-			SOCKBUF_LOCK((sb));	\
-} while (0)
-
-#define SOCKBUF_UNLOCK_COND(sb, lockflag) do {	\
-		if ((lockflag))			\
-			SOCKBUF_UNLOCK((sb));	\
-} while (0)
-
-
-void
-sosendingwakeup(void *unused __unused)
+static int
+srsendingwakeup(struct socketref *sr) 
 {
-	struct socketref *sr, *srtmp;
-	struct srq *srh_local, *srh_global, srh_tmp;
-	struct socketref_object *sro;
-	struct task *srh_task;
 	struct socket *so;
-	struct sockbuf *sb;
 	struct file *fp;
-	struct proc *p;
-	struct thread *td;
-	int writeable, sblockneeded;
+	struct sockbuf *sb;
+
+	if (sr->sr_magic != 0xCAFEBABE) {
+		printf("bad magic! sr: %p magic : 0x%x in %s\n",
+		    sr, sr->sr_magic, __FUNCTION__);
+		/*
+		 * XXX leak - should be assert perhaps
+		 * 
+		 */
+		return (0);
+	}
 
-	srh_global = sendfile_bg_queue;
-	if (!TAILQ_EMPTY(srh_global)) {
-		TAILQ_INIT(&srh_tmp);
+	fp = sr->sr_sock_fp;
+	CTR2(KTR_SPARE2, "processing s %d sock_fp %p", sr->sr_uap.s, fp);
+	if (fp->f_type != DTYPE_SOCKET) {
+		CTR1(KTR_SPARE2, "not socket - type %d", fp->f_type);
+		goto error;
+	}
+	so = fp->f_data;
+	if ((so->so_state & SS_ISCONNECTED) == 0) {
+		CTR0(KTR_SPARE2, "not connected %p");
+		goto error;
+	}
+
+	CTR1(KTR_SPARE2, "processing socket %p", so);
+	sb = &so->so_snd;
+	SOCKBUF_LOCK_ASSERT(sb);
+	if (sb->sb_state & SBS_CANTSENDMORE) {
+		;
+	} else if (sowriteable(so)) {
+		CTR2(KTR_SPARE2, "enqueue socket to task %p sr %p", so, sr);
+		sb->sb_flags |= SB_SENDING;
+		taskqueue_enqueue(sendfile_tq, &sr->sr_task);
+	} else {
 		mtx_lock(&sendfile_bg_lock);
-		TAILQ_CONCAT(&srh_tmp, srh_global, entry);
+		TAILQ_INSERT_TAIL(sendfile_bg_queue, sr, entry);
 		mtx_unlock(&sendfile_bg_lock);
-		if (TAILQ_EMPTY(&srh_tmp))
-		    goto done;
+	}
+	return (0);
+error:
+	return (ENOTCONN);
+}
 
-		if ((sro = malloc(sizeof(struct socketref_object),
-			    M_DEVBUF, M_NOWAIT)) == NULL)
-			goto done;
-
-		srh_local = &sro->sro_srh;
-		srh_task = &sro->sro_task;
-		TAILQ_INIT(srh_local);
-		TASK_INIT(srh_task, 0, sendfile_task_func, sro);
-		CTR0(KTR_SPARE2, "processing pcpu list");
-	} else
-		goto done;
+void
+sosendingwakeup(struct sockbuf *sb)
+{
+	struct socketref *sr = NULL;
 
-	td = curthread;
-	p = td->td_proc;
-	TAILQ_FOREACH_SAFE(sr, &srh_tmp, entry, srtmp) {
-		fp = sr->sr_sock_fp;
-		td->td_proc = sr->sr_proc;
-		CTR2(KTR_SPARE2, "processing s %d sock_fp %p", sr->sr_uap.s, fp);
-
-		if (fp->f_type != DTYPE_SOCKET) {
-			CTR1(KTR_SPARE2, "not socket - type %d", fp->f_type);
-			goto next;
-		}
-		so = fp->f_data;
-		if ((so->so_state & SS_ISCONNECTED) == 0) {
-			CTR0(KTR_SPARE2, "not connected %p");
-			goto next;
+	SOCKBUF_LOCK_ASSERT(sb);
+	mtx_lock(&sendfile_bg_lock);
+	if (!TAILQ_EMPTY(sendfile_bg_queue)) {
+		TAILQ_FOREACH(sr, sendfile_bg_queue, entry) {
+			if (sb == &sr->sr_so->so_snd) {
+				sb->sb_flags &= ~SB_SENDING;
+				TAILQ_REMOVE(sendfile_bg_queue, sr, entry);
+				break;
+			}
 		}
-		CTR1(KTR_SPARE2, "processing socket %p", so);
-		sb = &so->so_snd;
-		sblockneeded = !SOCKBUF_OWNED(sb);
-		writeable = 0;
-		SOCKBUF_LOCK_COND(sb, sblockneeded);
-		sb->sb_flags &= ~SB_SENDING;
-		if (sb->sb_state & SBS_CANTSENDMORE) {
-			SOCKBUF_UNLOCK_COND(sb, sblockneeded);
-			goto next;
-		} else {
-			writeable = sowriteable(so);
-			sb->sb_flags |= SB_SENDING;
-			SOCKBUF_UNLOCK_COND(sb, sblockneeded);
-		}
-
-		if (writeable) {
-			CTR2(KTR_SPARE2, "enqueue socket to task %p sr %p", so, sr);
-			TAILQ_REMOVE(&srh_tmp, sr, entry);
-			TAILQ_INSERT_HEAD(srh_local, sr, entry);
-		}
-		if (sr->sr_magic != 0xCAFEBABE)
-			printf("bad magic! 0x%x in %s\n",
-			    sr->sr_magic, __FUNCTION__);
-
-		continue;
-	next:
-		CTR1(KTR_SPARE2, "freeing expired socket %p", so);
-		TAILQ_REMOVE(&srh_tmp, sr, entry);
-		socketref_free(sr);
-	}
-	td->td_proc = p;
 
-	if (!TAILQ_EMPTY(&srh_tmp)) {
-		mtx_lock(&sendfile_bg_lock);
-		TAILQ_CONCAT(srh_global, &srh_tmp, entry);
-		mtx_unlock(&sendfile_bg_lock);
 	}
+	mtx_unlock(&sendfile_bg_lock);
 	
-	if (!TAILQ_EMPTY(srh_local)) {
-		taskqueue_enqueue(sendfile_tq, srh_task);
-	} else {
-		free(sro, M_DEVBUF);
+	/*
+	 * Buffer in flight
+	 */
+	if (sr != NULL && srsendingwakeup(sr) == ENOTCONN) {
+		CTR2(KTR_SPARE2, "freeing expired socket %p ref %p",
+		    sr->sr_so, sr);
+		socketref_free(sr);
 	}
-done:
-	if (!callout_pending(sendfile_callout))
-		callout_reset(sendfile_callout, MAX(hz/10, 1),
-		    sosendingwakeup, NULL);
 }
 
 static void
 init_bgsend(void *unused __unused)
 {	
-	struct srq *srh;
 
 	sendfile_tq = taskqueue_create("sendfile background taskq",  M_NOWAIT,
 	    taskqueue_thread_enqueue, &sendfile_tq);
-	taskqueue_start_threads(&sendfile_tq, 1, PI_NET,
+	taskqueue_start_threads(&sendfile_tq, 4, PI_SOFT,
 	    "sendfile background taskq");
 
-	printf("init_bgsend mp_maxid: %d all_cpus 0x%x\n",
-	    mp_maxid, all_cpus);
-
 	mtx_init(&sendfile_bg_lock, "sendfile bg", NULL, MTX_DEF);
-	sendfile_callout = malloc(sizeof(struct callout),
+	sendfile_bg_queue = malloc(sizeof(struct srq),
 	    M_DEVBUF, M_NOWAIT);
-	srh = sendfile_bg_queue = malloc(sizeof(struct srq),
-	    M_DEVBUF, M_NOWAIT);
-	TAILQ_INIT(srh);
-
-	callout_init(sendfile_callout, TRUE);
-	callout_reset(sendfile_callout, MAX(hz/10, 1),
-		    sosendingwakeup, NULL);
-
-	printf("init_bgsend done\n");
+	TAILQ_INIT(sendfile_bg_queue);
 }
 
 SYSINIT(init_bgsend, SI_SUB_SMP, SI_ORDER_ANY, init_bgsend, NULL);

Modified: user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c	Sat Sep  5 23:23:49 2009	(r196874)
+++ user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c	Sun Sep  6 01:03:19 2009	(r196875)
@@ -1747,7 +1747,8 @@ do_sendfile(struct thread *td, struct se
 		}
 	}
 
-	error = kern_sendfile(td, uap, hdr_uio, trl_uio, compat);
+	error = kern_sendfile(td, uap, hdr_uio, trl_uio, compat,
+	    NULL, NULL, NULL);
 out:
 	if (hdr_uio)
 		free(hdr_uio, M_IOV);
@@ -1776,7 +1777,8 @@ freebsd4_sendfile(struct thread *td, str
 
 int
 kern_sendfile(struct thread *td, struct sendfile_args *uap,
-    struct uio *hdr_uio, struct uio *trl_uio, int compat)
+    struct uio *hdr_uio, struct uio *trl_uio, int compat,
+    struct file *bgfp, struct socket *bgso, struct ucred *bgcred)
 {
 	struct file *sock_fp, *fp = NULL;
 	struct vnode *vp;
@@ -1785,30 +1787,39 @@ kern_sendfile(struct thread *td, struct 
 	struct mbuf *m = NULL;
 	struct sf_buf *sf;
 	struct vm_page *pg;
+	struct ucred *cred;
 	off_t off, xfsize, fsbytes = 0, sbytes = 0, rem = 0;
 	int error, hdrlen = 0, mnw = 0;
 	int vfslocked;
 
+	if (bgcred != NULL)
+		cred = bgcred;
+	else
+		cred = td->td_ucred;
+
 	/*
 	 * The file descriptor must be a regular file and have a
 	 * backing VM object.
 	 * File offset must be positive.  If it goes beyond EOF
 	 * we send only the header/trailer and no payload data.
 	 */
-	if ((error = fget_read(td, uap->fd, &fp)) != 0)
-		goto out;
-	else {
-		if (fp->f_vnode == NULL) {
-			fdrop(fp, td);
-			error = EINVAL;
+	if  ((uap->flags & SF_TASKQ) == 0) {
+		if ((error = fget_read(td, uap->fd, &fp)) != 0)
 			goto out;
-		} else {
-			vp = fp->f_vnode;
-			vref(vp);
+		else {
+			if (fp->f_vnode == NULL) {
+				fdrop(fp, td);
+				error = EINVAL;
+				goto out;
+			} else {
+				vp = fp->f_vnode;
+				vref(vp);
+			}
 		}
+	} else {
+		vp = bgfp->f_vnode;
 	}
-	
-	
+
 	vfslocked = VFS_LOCK_GIANT(vp->v_mount);
 	vn_lock(vp, LK_SHARED | LK_RETRY, curthread);
 	if (vp->v_type == VREG) {
@@ -1841,30 +1852,35 @@ kern_sendfile(struct thread *td, struct 
 		goto out;
 	}
 
-	/*
-	 * The socket must be a stream socket and connected.
-	 * Remember if it a blocking or non-blocking socket.
-	 */
-	if ((error = getsock(td->td_proc->p_fd, uap->s, &sock_fp,
-		    NULL)) != 0)
-		goto out;
-	so = sock_fp->f_data;
-	if (so->so_type != SOCK_STREAM) {
-		error = EINVAL;
-		goto out;
-	}
-	if ((so->so_state & SS_ISCONNECTED) == 0) {
-		error = ENOTCONN;
-		goto out;
+	if  ((uap->flags & SF_TASKQ) == 0) {
+		/*
+		 * The socket must be a stream socket and connected.
+		 * Remember if it a blocking or non-blocking socket.
+		 */
+		if ((error = getsock(td->td_proc->p_fd, uap->s, &sock_fp,
+			    NULL)) != 0)
+			goto out;
+		so = sock_fp->f_data;
+		if (so->so_type != SOCK_STREAM) {
+			error = EINVAL;
+			goto out;
+		}
+		if ((so->so_state & SS_ISCONNECTED) == 0) {
+			error = ENOTCONN;
+			goto out;
+		}
+	} else {
+		so = bgso;
 	}
 
 	SOCKBUF_LOCK(&so->so_snd);
-	if (((so->so_snd.sb_flags & SB_SENDING) == 0) && fp->f_sfbytes != 0) {
+	if ((uap->flags & SF_TASKQ) == 0 &&
+	    sock_fp->f_sfbytes != 0) {
 		SOCKBUF_UNLOCK(&so->so_snd);
 		if (uap->sbytes != NULL) {
 			copyout(&sbytes, uap->sbytes, sizeof(off_t));
+			sock_fp->f_sfbytes = 0;
 		}
-		fp->f_sfbytes = 0;
 		error = 0;
 		goto out;
 	}
@@ -1880,7 +1896,7 @@ kern_sendfile(struct thread *td, struct 
 
 #ifdef MAC
 	SOCK_LOCK(so);
-	error = mac_check_socket_send(td->td_ucred, so);
+	error = mac_check_socket_send(cred, so);
 	SOCK_UNLOCK(so);
 	if (error)
 		goto out;
@@ -1971,7 +1987,8 @@ retry_space:
 		    (space <= 0 ||
 		     space < so->so_snd.sb_lowat)) {
 			if (so->so_state & SS_NBIO) {
-				soissending(so, td, uap, hdr_uio, trl_uio, compat);
+				if ((so->so_snd.sb_flags & SB_SENDING) == 0)
+					soissending(so, td, uap, hdr_uio, trl_uio, compat, sbytes);
 				SOCKBUF_UNLOCK(&so->so_snd);
 				error = EAGAIN;
 				goto done;
@@ -2090,7 +2107,7 @@ retry_space:
 				error = vn_rdwr(UIO_READ, vp, NULL, MAXBSIZE,
 				    trunc_page(off), UIO_NOCOPY, IO_NODELOCKED |
 				    IO_VMIO | ((MAXBSIZE / bsize) << IO_SEQSHIFT),
-				    td->td_ucred, NOCRED, &resid, td);
+				    cred, NOCRED, &resid, td);
 				VOP_UNLOCK(vp, 0, curthread);
 				VFS_UNLOCK_GIANT(vfslocked);
 				VM_OBJECT_LOCK(obj);
@@ -2233,15 +2250,17 @@ out:
 	}
 	if (obj != NULL)
 		vm_object_deallocate(obj);
-	if (vp != NULL) {
-		vfslocked = VFS_LOCK_GIANT(vp->v_mount);
-		vrele(vp);
-		VFS_UNLOCK_GIANT(vfslocked);
+	if ((uap->flags & SF_TASKQ) == 0) {
+		if (vp != NULL) {
+			vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+			vrele(vp);
+			VFS_UNLOCK_GIANT(vfslocked);
+		}
+		if (so)
+			fdrop(sock_fp, td);
+		if (fp)
+			fdrop(fp, td);
 	}
-	if (so)
-		fdrop(sock_fp, td);
-	if (fp)
-		fdrop(fp, td);
 	if (m)
 		m_freem(m);
 

Modified: user/kmacy/releng_7_2_fcs_1/sys/sys/sockbuf.h
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/sys/sockbuf.h	Sat Sep  5 23:23:49 2009	(r196874)
+++ user/kmacy/releng_7_2_fcs_1/sys/sys/sockbuf.h	Sun Sep  6 01:03:19 2009	(r196875)
@@ -153,9 +153,12 @@ struct mbuf *
 	sbsndptr(struct sockbuf *sb, u_int off, u_int len, u_int *moff);
 void	sbtoxsockbuf(struct sockbuf *sb, struct xsockbuf *xsb);
 int	sbwait(struct sockbuf *sb);
-int	sblock(struct sockbuf *sb, int flags);
+int	_sblock(struct sockbuf *sb, int flags, const char *file, int line);
 void	sbunlock(struct sockbuf *sb);
 
+#define sblock(sb, flags) \
+	_sblock((sb), (flags), __FILE__, __LINE__)
+
 /*
  * How much space is there in a socket buffer (so->so_snd or so->so_rcv)?
  * This is problematical if the fields are unsigned, as the space might

Modified: user/kmacy/releng_7_2_fcs_1/sys/sys/socket.h
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/sys/socket.h	Sat Sep  5 23:23:49 2009	(r196874)
+++ user/kmacy/releng_7_2_fcs_1/sys/sys/socket.h	Sun Sep  6 01:03:19 2009	(r196875)
@@ -616,6 +616,7 @@ struct sf_hdtr {
  */
 #define	SF_NODISKIO     0x00000001
 #define	SF_MNOWAIT	0x00000002
+#define	SF_TASKQ	0x00000004
 #endif
 
 #ifndef	_KERNEL

Modified: user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h	Sat Sep  5 23:23:49 2009	(r196874)
+++ user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h	Sun Sep  6 01:03:19 2009	(r196875)
@@ -80,7 +80,9 @@ void	soisdisconnected(struct socket *so)
 void	soisdisconnecting(struct socket *so);
 void	soissending(struct socket *so,
     struct thread *td, struct sendfile_args *uap,
-    struct uio *hdr_uio, struct uio *trl_uio, int compat);
+    struct uio *hdr_uio, struct uio *trl_uio,
+    int compat, int sbytes);
+void	sosendingwakeup(struct sockbuf *sb);
 void	socantrcvmore(struct socket *so);
 void	socantrcvmore_locked(struct socket *so);
 void	socantsendmore(struct socket *so);

Modified: user/kmacy/releng_7_2_fcs_1/sys/sys/syscallsubr.h
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/sys/syscallsubr.h	Sat Sep  5 23:23:49 2009	(r196874)
+++ user/kmacy/releng_7_2_fcs_1/sys/sys/syscallsubr.h	Sun Sep  6 01:03:19 2009	(r196875)
@@ -144,7 +144,8 @@ int	kern_semctl(struct thread *td, int s
 int	kern_select(struct thread *td, int nd, fd_set *fd_in, fd_set *fd_ou,
 	    fd_set *fd_ex, struct timeval *tvp);
 int	kern_sendfile(struct thread *td, struct sendfile_args *uap,
-	    struct uio *hdr_uio, struct uio *trl_uio, int compat);
+	    struct uio *hdr_uio, struct uio *trl_uio, int compat,
+    struct file *bgfp, struct socket *bgso, struct ucred *bgcred);
 int	kern_sendit(struct thread *td, int s, struct msghdr *mp, int flags,
 	    struct mbuf *control, enum uio_seg segflg);
 int	kern_setgroups(struct thread *td, u_int ngrp, gid_t *groups);

From owner-svn-src-user@FreeBSD.ORG  Sun Sep  6 18:49:45 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id E4F79106566B;
	Sun,  6 Sep 2009 18:49:45 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id D3A448FC13;
	Sun,  6 Sep 2009 18:49:45 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n86InjSb091606;
	Sun, 6 Sep 2009 18:49:45 GMT (envelope-from kmacy@svn.freebsd.org)
Received: (from kmacy@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n86InjVw091602;
	Sun, 6 Sep 2009 18:49:45 GMT (envelope-from kmacy@svn.freebsd.org)
Message-Id: <200909061849.n86InjVw091602@svn.freebsd.org>
From: Kip Macy <kmacy@FreeBSD.org>
Date: Sun, 6 Sep 2009 18:49:45 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r196899 - in user/kmacy/releng_7_2_fcs_1/sys: kern sys
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 06 Sep 2009 18:49:46 -0000

Author: kmacy
Date: Sun Sep  6 18:49:45 2009
New Revision: 196899
URL: http://svn.freebsd.org/changeset/base/196899

Log:
  clean up byte accounting

Modified:
  user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c
  user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c
  user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h

Modified: user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c	Sun Sep  6 18:48:18 2009	(r196898)
+++ user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c	Sun Sep  6 18:49:45 2009	(r196899)
@@ -3170,7 +3170,7 @@ socketref_free(struct socketref *sr)
 void
 soissending(struct socket *so, struct thread *td,
     struct sendfile_args *uap, struct uio *hdr_uio,
-    struct uio *trl_uio, int compat, int sbytes)
+    struct uio *trl_uio, int compat, off_t sbytes)
 {
 	struct socketref *ref;
 	int error;
@@ -3190,7 +3190,7 @@ soissending(struct socket *so, struct th
 	PROC_LOCK(td->td_proc);
 	td->td_proc->p_lock++;
 	PROC_UNLOCK(td->td_proc);
-   
+
 	ref->sr_proc = td->td_proc;
 
 	if ((error = getsock(td->td_proc->p_fd, uap->s, &ref->sr_sock_fp,
@@ -3222,6 +3222,7 @@ soissending(struct socket *so, struct th
 	bcopy(uap, &ref->sr_uap, sizeof(*uap));
 	ref->sr_uap.sbytes = NULL;
 	ref->sr_uap.offset += sbytes;
+	ref->sr_sock_fp->f_sfbytes = 0;
 	if (uap->nbytes)
 		ref->sr_uap.nbytes -= sbytes;
 	/*
@@ -3237,6 +3238,8 @@ soissending(struct socket *so, struct th
 	ref->sr_compat = compat;
 	ref->sr_magic = 0xCAFEBABE;
 	TASK_INIT(&ref->sr_task, 0, sendfile_task_func, ref);
+	CTR4(KTR_SPARE1, "sock %p off %ld sbytes %ld total_sbytes %ld",
+	    so, ref->sr_uap.offset, sbytes, ref->sr_fp->f_sfbytes);
 
 	CTR3(KTR_SPARE2, "enqueueing socket %p sock_fp %p s %d", so, ref->sr_sock_fp, uap->s);
 	mtx_lock(&sendfile_bg_lock);
@@ -3258,9 +3261,9 @@ sendfile_task_func(void *context, int pe
 	struct socket *so;
 	struct sockbuf *sb;
 	struct file *sock_fp, *fp;
-	int error, writeable;
+	int error = EAGAIN;
 	struct uio *hdr_uio = NULL, *trl_uio = NULL;
-	off_t sbytes;
+	off_t sbytes = 0;
 
 	sr = context;
 	CTR0(KTR_SPARE2, "task_func running");
@@ -3313,18 +3316,18 @@ sendfile_task_func(void *context, int pe
 		sr->sr_uap.offset += sbytes;
 		if (sr->sr_uap.nbytes)
 			sr->sr_uap.nbytes -= sbytes;
-		/*
-		 * XXX we have a race here 
-		 * - if sbdrop is called before a re-enqueue,
-		 *   we'll have a lost wakeup ... maybe call
-		 * sosendingwakup? Or check for sowriteable(so)	
-		 */
+
+		CTR4(KTR_SPARE1, "sock %p off %ld sbytes %ld total_sbytes %ld",
+		    so, sr->sr_uap.offset, sbytes, fp->f_sfbytes);
 		SOCKBUF_LOCK(sb);
-		if (error == EAGAIN && srsendingwakeup(sr) != ENOTCONN) {
-			SOCKBUF_UNLOCK(sb);
-			return;
-		}
-	} 
+	}
+
+	if (error == EAGAIN && srsendingwakeup(sr) != ENOTCONN) {
+		SOCKBUF_UNLOCK(sb);
+		return;
+	} else if (error != EAGAIN) 
+		CTR1(KTR_SPARE1, "error %d", error); 
+
 	sb->sb_flags &= ~SB_SENDING;
 	sowwakeup_locked(so);
 done:
@@ -3352,25 +3355,27 @@ srsendingwakeup(struct socketref *sr) 
 	fp = sr->sr_sock_fp;
 	CTR2(KTR_SPARE2, "processing s %d sock_fp %p", sr->sr_uap.s, fp);
 	if (fp->f_type != DTYPE_SOCKET) {
-		CTR1(KTR_SPARE2, "not socket - type %d", fp->f_type);
+		CTR1(KTR_SPARE1, "not socket - type %d", fp->f_type);
 		goto error;
 	}
 	so = fp->f_data;
 	if ((so->so_state & SS_ISCONNECTED) == 0) {
-		CTR0(KTR_SPARE2, "not connected %p");
+		CTR1(KTR_SPARE1, "not connected %p", so);
 		goto error;
 	}
 
 	CTR1(KTR_SPARE2, "processing socket %p", so);
 	sb = &so->so_snd;
 	SOCKBUF_LOCK_ASSERT(sb);
+	sb->sb_flags &= ~SB_SENDING;
 	if (sb->sb_state & SBS_CANTSENDMORE) {
-		;
+		CTR1(KTR_SPARE1, "SBS_CANTSENDMORE %p", so);
 	} else if (sowriteable(so)) {
 		CTR2(KTR_SPARE2, "enqueue socket to task %p sr %p", so, sr);
 		sb->sb_flags |= SB_SENDING;
 		taskqueue_enqueue(sendfile_tq, &sr->sr_task);
 	} else {
+		sb->sb_flags |= SB_SENDING;
 		mtx_lock(&sendfile_bg_lock);
 		TAILQ_INSERT_TAIL(sendfile_bg_queue, sr, entry);
 		mtx_unlock(&sendfile_bg_lock);

Modified: user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c	Sun Sep  6 18:48:18 2009	(r196898)
+++ user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c	Sun Sep  6 18:49:45 2009	(r196899)
@@ -1873,7 +1873,6 @@ kern_sendfile(struct thread *td, struct 
 		so = bgso;
 	}
 
-	SOCKBUF_LOCK(&so->so_snd);
 	if ((uap->flags & SF_TASKQ) == 0 &&
 	    sock_fp->f_sfbytes != 0) {
 		SOCKBUF_UNLOCK(&so->so_snd);
@@ -1884,7 +1883,7 @@ kern_sendfile(struct thread *td, struct 
 		error = 0;
 		goto out;
 	}
-	SOCKBUF_UNLOCK(&so->so_snd);
+
 	
 	/*
 	 * Do not wait on memory allocations but return ENOMEM for
@@ -2246,7 +2245,10 @@ out:
 		td->td_retval[0] = 0;
 	}
 	if (uap->sbytes != NULL) {
-		copyout(&sbytes, uap->sbytes, sizeof(off_t));
+		if ((uap->flags & SF_TASKQ) == 0)
+			copyout(&sbytes, uap->sbytes, sizeof(off_t));
+		else
+			*(uap->sbytes) = sbytes;
 	}
 	if (obj != NULL)
 		vm_object_deallocate(obj);

Modified: user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h	Sun Sep  6 18:48:18 2009	(r196898)
+++ user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h	Sun Sep  6 18:49:45 2009	(r196899)
@@ -81,7 +81,7 @@ void	soisdisconnecting(struct socket *so
 void	soissending(struct socket *so,
     struct thread *td, struct sendfile_args *uap,
     struct uio *hdr_uio, struct uio *trl_uio,
-    int compat, int sbytes);
+    int compat, off_t sbytes);
 void	sosendingwakeup(struct sockbuf *sb);
 void	socantrcvmore(struct socket *so);
 void	socantrcvmore_locked(struct socket *so);

From owner-svn-src-user@FreeBSD.ORG  Sun Sep  6 19:45:38 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 3CDD31065694;
	Sun,  6 Sep 2009 19:45:38 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 2C57D8FC14;
	Sun,  6 Sep 2009 19:45:38 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n86Jjce8092853;
	Sun, 6 Sep 2009 19:45:38 GMT (envelope-from kmacy@svn.freebsd.org)
Received: (from kmacy@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n86JjcP0092851;
	Sun, 6 Sep 2009 19:45:38 GMT (envelope-from kmacy@svn.freebsd.org)
Message-Id: <200909061945.n86JjcP0092851@svn.freebsd.org>
From: Kip Macy <kmacy@FreeBSD.org>
Date: Sun, 6 Sep 2009 19:45:38 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r196905 - user/kmacy/releng_7_2_fcs_1/sys/kern
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 06 Sep 2009 19:45:38 -0000

Author: kmacy
Date: Sun Sep  6 19:45:37 2009
New Revision: 196905
URL: http://svn.freebsd.org/changeset/base/196905

Log:
  make bg sendfile a toggle

Modified:
  user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c

Modified: user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c	Sun Sep  6 19:33:13 2009	(r196904)
+++ user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c	Sun Sep  6 19:45:37 2009	(r196905)
@@ -106,6 +106,10 @@ SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufsp
 SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufsused, CTLFLAG_RD, &nsfbufsused, 0,
     "Number of sendfile(2) sf_bufs in use");
 
+static int bg_sendfile_enable = 1;
+SYSCTL_INT(_kern_ipc, OID_AUTO, bg_sendfile_enable, CTLFLAG_RW,
+    &bg_sendfile_enable, 0, "Enable background sendfile");
+
 /*
  * Convert a user file descriptor to a kernel file entry.  A reference on the
  * file entry is held upon returning.  This is lighter weight than
@@ -1986,7 +1990,8 @@ retry_space:
 		    (space <= 0 ||
 		     space < so->so_snd.sb_lowat)) {
 			if (so->so_state & SS_NBIO) {
-				if ((so->so_snd.sb_flags & SB_SENDING) == 0)
+				if (bg_sendfile_enable &&
+				    (so->so_snd.sb_flags & SB_SENDING) == 0)
 					soissending(so, td, uap, hdr_uio, trl_uio, compat, sbytes);
 				SOCKBUF_UNLOCK(&so->so_snd);
 				error = EAGAIN;

From owner-svn-src-user@FreeBSD.ORG  Sun Sep  6 20:32:17 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 7E10C1065672;
	Sun,  6 Sep 2009 20:32:17 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 6DC8B8FC1A;
	Sun,  6 Sep 2009 20:32:17 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n86KWHlj093863;
	Sun, 6 Sep 2009 20:32:17 GMT (envelope-from kmacy@svn.freebsd.org)
Received: (from kmacy@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n86KWHiO093861;
	Sun, 6 Sep 2009 20:32:17 GMT (envelope-from kmacy@svn.freebsd.org)
Message-Id: <200909062032.n86KWHiO093861@svn.freebsd.org>
From: Kip Macy <kmacy@FreeBSD.org>
Date: Sun, 6 Sep 2009 20:32:17 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r196906 - user/kmacy/releng_7_2_fcs_1/sys/kern
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 06 Sep 2009 20:32:17 -0000

Author: kmacy
Date: Sun Sep  6 20:32:16 2009
New Revision: 196906
URL: http://svn.freebsd.org/changeset/base/196906

Log:
  - bump taskqueue threads to ncpus
  - try to improve KTR logging

Modified:
  user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c

Modified: user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c	Sun Sep  6 19:45:37 2009	(r196905)
+++ user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c	Sun Sep  6 20:32:16 2009	(r196906)
@@ -3321,13 +3321,20 @@ sendfile_task_func(void *context, int pe
 		    so, sr->sr_uap.offset, sbytes, fp->f_sfbytes);
 		SOCKBUF_LOCK(sb);
 	}
-
+#ifdef KTR
+	else
+		CTR2(KTR_SPARE1, "sock %p off %ld - not writeable in task_func",
+		    so, sr->sr_uap.offset);
+#endif		
 	if (error == EAGAIN && srsendingwakeup(sr) != ENOTCONN) {
 		SOCKBUF_UNLOCK(sb);
 		return;
-	} else if (error != EAGAIN) 
+	}
+#ifdef KTR
+	if (error && error != EAGAIN && error != EPIPE) 
 		CTR1(KTR_SPARE1, "error %d", error); 
-
+#endif
+	
 	sb->sb_flags &= ~SB_SENDING;
 	sowwakeup_locked(so);
 done:
@@ -3375,6 +3382,8 @@ srsendingwakeup(struct socketref *sr) 
 		sb->sb_flags |= SB_SENDING;
 		taskqueue_enqueue(sendfile_tq, &sr->sr_task);
 	} else {
+		CTR2(KTR_SPARE1, "sock %p off %ld - not writeable in srsendingwakeup",
+		    so, sr->sr_uap.offset);
 		sb->sb_flags |= SB_SENDING;
 		mtx_lock(&sendfile_bg_lock);
 		TAILQ_INSERT_TAIL(sendfile_bg_queue, sr, entry);
@@ -3420,7 +3429,7 @@ init_bgsend(void *unused __unused)
 
 	sendfile_tq = taskqueue_create("sendfile background taskq",  M_NOWAIT,
 	    taskqueue_thread_enqueue, &sendfile_tq);
-	taskqueue_start_threads(&sendfile_tq, 4, PI_SOFT,
+	taskqueue_start_threads(&sendfile_tq, mp_ncpus, PI_SOFT,
 	    "sendfile background taskq");
 
 	mtx_init(&sendfile_bg_lock, "sendfile bg", NULL, MTX_DEF);

From owner-svn-src-user@FreeBSD.ORG  Sun Sep  6 22:50:22 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id C67A11065679;
	Sun,  6 Sep 2009 22:50:22 +0000 (UTC)
	(envelope-from edwin@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 9C4258FC08;
	Sun,  6 Sep 2009 22:50:22 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n86MoMVE096484;
	Sun, 6 Sep 2009 22:50:22 GMT (envelope-from edwin@svn.freebsd.org)
Received: (from edwin@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n86MoMOW096481;
	Sun, 6 Sep 2009 22:50:22 GMT (envelope-from edwin@svn.freebsd.org)
Message-Id: <200909062250.n86MoMOW096481@svn.freebsd.org>
From: Edwin Groothuis <edwin@FreeBSD.org>
Date: Sun, 6 Sep 2009 22:50:22 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r196908 - in user/edwin/locale/share: . monetdef
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 06 Sep 2009 22:50:22 -0000

Author: edwin
Date: Sun Sep  6 22:50:22 2009
New Revision: 196908
URL: http://svn.freebsd.org/changeset/base/196908

Log:
  Manually translate the WON Currency sign and the EURO currency sign
  for certain locales.

Modified:
  user/edwin/locale/share/Makefile.def.inc
  user/edwin/locale/share/monetdef/Makefile

Modified: user/edwin/locale/share/Makefile.def.inc
==============================================================================
--- user/edwin/locale/share/Makefile.def.inc	Sun Sep  6 21:22:24 2009	(r196907)
+++ user/edwin/locale/share/Makefile.def.inc	Sun Sep  6 22:50:22 2009	(r196908)
@@ -8,8 +8,8 @@
 CMALIAS_ISCII-DEV=	macdevanaga
 
 # libiconv doesn't understand iscii-dev, bsdiconv does
-ICONV=	/home/edwin/libiconv/bin/iconv
-ICONV_hi_IN.ISCII-DEV=	/usr/bin/iconv
+ICONV=	iconv
+ICONV_hi_IN.ISCII-DEV=	bsdiconv
 
 #
 # Calculated variables
@@ -148,6 +148,13 @@ ICONV_${ccln}.${cms}=	${ICONV}
 . if !defined(CMALIAS_${cm})
 CMALIAS_${cm}=	${cm}
 . endif
+
+. if !defined(TRANSLATION_${cm})
+TRANSLATION_${cm}=
+. endif
+. for TR in ${TRANSLATION_${cm}}
+_TRANSLATION_${cm}+=	 | awk '{ gsub("${TR:C/:.*//:C/([0-9a-fA-F][0-9a-fA-F])/\\\\x\1/g}", "${TR:C/^.*://:C/([0-9a-fA-F][0-9a-fA-F])/\\\\x\1/g}"); print }'
+. endfor
 .endfor
 
 #
@@ -174,10 +181,12 @@ ${ccln}.UTF-8.out: ${ccln}.src
 .  for cms in ${CMS_${ccln}}
 
 ${ccln}.${cms}.out: ${ccln}.src
+	cat ${.ALLSRC} \
+	${_TRANSLATION_${cms}} | \
 	${ICONV_${ccln}.${cms}} \
 	    -f UTF-8 \
 	    -t ${CMALIAS_${cms}} \
-	    ${.ALLSRC} > ${.TARGET} \
+	    > ${.TARGET} \
 	|| rm ${.TARGET} && exit 0
 
 .  endfor

Modified: user/edwin/locale/share/monetdef/Makefile
==============================================================================
--- user/edwin/locale/share/monetdef/Makefile	Sun Sep  6 21:22:24 2009	(r196907)
+++ user/edwin/locale/share/monetdef/Makefile	Sun Sep  6 22:50:22 2009	(r196908)
@@ -75,6 +75,11 @@ CCLNLINK_es_ES=	eu_ES
 CCLNLINK_de_CH=	fr_CH it_CH
 CCLNLINK_no_NO=	nb_NO nn_NO
 
+# Some locales are not fully one-on-one, therefore need to be
+# translated manually.
+TRANSLATION_eucKR=	E282A9:5C
+TRANSLATION_ISO8859-1=	E282AC:455552
+
 # For these locales, create symlinks to the main locale for historical reasons.
 LEGLINK_ja_JP=		jp_JP
 LEGLINK_zh_Hans_CN=	zh_CN
@@ -91,8 +96,8 @@ LEGLINK_zh_Hans_CN.GBK2312=	zh_CN.GBK
 # Required variables
 LCTYPE=		LC_NUMERIC
 LOCALEDIR=	/usr/share/locale
-ICONV_pt_PT.ISO8859-1=	/usr/bin/iconv
-ICONV_ko_KR.eucKR=	/usr/bin/iconv
+#ICONV_pt_PT.ISO8859-1=	bsdiconv
+#ICONV_ko_KR.eucKR=	bsdiconv
 
 # For testing only
 DESTDIR=	/home/edwin/locale/new/

From owner-svn-src-user@FreeBSD.ORG  Sun Sep  6 22:56:07 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id A63081065670;
	Sun,  6 Sep 2009 22:56:07 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 95BFD8FC12;
	Sun,  6 Sep 2009 22:56:07 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n86Mu7LC096680;
	Sun, 6 Sep 2009 22:56:07 GMT (envelope-from kmacy@svn.freebsd.org)
Received: (from kmacy@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n86Mu7nj096678;
	Sun, 6 Sep 2009 22:56:07 GMT (envelope-from kmacy@svn.freebsd.org)
Message-Id: <200909062256.n86Mu7nj096678@svn.freebsd.org>
From: Kip Macy <kmacy@FreeBSD.org>
Date: Sun, 6 Sep 2009 22:56:07 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r196909 - user/kmacy/releng_7_2_fcs_1/sys/kern
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 06 Sep 2009 22:56:07 -0000

Author: kmacy
Date: Sun Sep  6 22:56:07 2009
New Revision: 196909
URL: http://svn.freebsd.org/changeset/base/196909

Log:
  simplify KTR reporting

Modified:
  user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c

Modified: user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c	Sun Sep  6 22:50:22 2009	(r196908)
+++ user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c	Sun Sep  6 22:56:07 2009	(r196909)
@@ -3221,8 +3221,10 @@ soissending(struct socket *so, struct th
 
 	bcopy(uap, &ref->sr_uap, sizeof(*uap));
 	ref->sr_uap.sbytes = NULL;
-	ref->sr_uap.offset += sbytes;
 	ref->sr_sock_fp->f_sfbytes = 0;
+	CTR4(KTR_SPARE1, "sock %p off %ld sbytes %ld total_sbytes %ld",
+	    so, ref->sr_uap.offset, sbytes, ref->sr_fp->f_sfbytes);
+	ref->sr_uap.offset += sbytes;
 	if (uap->nbytes)
 		ref->sr_uap.nbytes -= sbytes;
 	/*
@@ -3238,8 +3240,6 @@ soissending(struct socket *so, struct th
 	ref->sr_compat = compat;
 	ref->sr_magic = 0xCAFEBABE;
 	TASK_INIT(&ref->sr_task, 0, sendfile_task_func, ref);
-	CTR4(KTR_SPARE1, "sock %p off %ld sbytes %ld total_sbytes %ld",
-	    so, ref->sr_uap.offset, sbytes, ref->sr_fp->f_sfbytes);
 
 	CTR3(KTR_SPARE2, "enqueueing socket %p sock_fp %p s %d", so, ref->sr_sock_fp, uap->s);
 	mtx_lock(&sendfile_bg_lock);
@@ -3312,13 +3312,13 @@ sendfile_task_func(void *context, int pe
 		error = kern_sendfile(curthread, &sr->sr_uap,
 		    hdr_uio, trl_uio,
 		    sr->sr_compat, fp, so, sr->sr_ucred);
+		CTR4(KTR_SPARE1, "sock %p off %ld sbytes %ld total_sbytes %ld",
+		    so, sr->sr_uap.offset, sbytes, fp->f_sfbytes);
 		atomic_add_long(&fp->f_sfbytes, sbytes);
 		sr->sr_uap.offset += sbytes;
 		if (sr->sr_uap.nbytes)
 			sr->sr_uap.nbytes -= sbytes;
 
-		CTR4(KTR_SPARE1, "sock %p off %ld sbytes %ld total_sbytes %ld",
-		    so, sr->sr_uap.offset, sbytes, fp->f_sfbytes);
 		SOCKBUF_LOCK(sb);
 	}
 #ifdef KTR

From owner-svn-src-user@FreeBSD.ORG  Mon Sep  7 00:49:01 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 57489106566B;
	Mon,  7 Sep 2009 00:49:01 +0000 (UTC)
	(envelope-from kmacy@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 467C08FC15;
	Mon,  7 Sep 2009 00:49:01 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n870n0uV098837;
	Mon, 7 Sep 2009 00:49:00 GMT (envelope-from kmacy@svn.freebsd.org)
Received: (from kmacy@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n870n050098833;
	Mon, 7 Sep 2009 00:49:00 GMT (envelope-from kmacy@svn.freebsd.org)
Message-Id: <200909070049.n870n050098833@svn.freebsd.org>
From: Kip Macy <kmacy@FreeBSD.org>
Date: Mon, 7 Sep 2009 00:49:00 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r196910 - in user/kmacy/releng_7_2_fcs_1/sys: kern sys
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 07 Sep 2009 00:49:01 -0000

Author: kmacy
Date: Mon Sep  7 00:49:00 2009
New Revision: 196910
URL: http://svn.freebsd.org/changeset/base/196910

Log:
  validate against file size

Modified:
  user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c
  user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c
  user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h

Modified: user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c	Sun Sep  6 22:56:07 2009	(r196909)
+++ user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_socket.c	Mon Sep  7 00:49:00 2009	(r196910)
@@ -3118,6 +3118,7 @@ struct socketref {
 	struct uio sr_trl_uio;
 	short sr_compat;
 	int sr_magic;
+	off_t sr_vnp_size;
 	struct task sr_task;
 	TAILQ_ENTRY(socketref) entry;
 
@@ -3170,7 +3171,8 @@ socketref_free(struct socketref *sr)
 void
 soissending(struct socket *so, struct thread *td,
     struct sendfile_args *uap, struct uio *hdr_uio,
-    struct uio *trl_uio, int compat, off_t sbytes)
+    struct uio *trl_uio, int compat, off_t sbytes,
+    off_t vnp_size)
 {
 	struct socketref *ref;
 	int error;
@@ -3239,6 +3241,7 @@ soissending(struct socket *so, struct th
 		      sizeof(*trl_uio));
 	ref->sr_compat = compat;
 	ref->sr_magic = 0xCAFEBABE;
+	ref->sr_vnp_size = vnp_size;
 	TASK_INIT(&ref->sr_task, 0, sendfile_task_func, ref);
 
 	CTR3(KTR_SPARE2, "enqueueing socket %p sock_fp %p s %d", so, ref->sr_sock_fp, uap->s);
@@ -3319,6 +3322,11 @@ sendfile_task_func(void *context, int pe
 		if (sr->sr_uap.nbytes)
 			sr->sr_uap.nbytes -= sbytes;
 
+		if (error == EAGAIN &&
+		    (sr->sr_uap.offset + sbytes == sr->sr_vnp_size)) {
+			CTR0(KTR_SPARE1, "EAGAIN on full send");
+			error = 0;
+		}
 		SOCKBUF_LOCK(sb);
 	}
 #ifdef KTR

Modified: user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c	Sun Sep  6 22:56:07 2009	(r196909)
+++ user/kmacy/releng_7_2_fcs_1/sys/kern/uipc_syscalls.c	Mon Sep  7 00:49:00 2009	(r196910)
@@ -1792,7 +1792,7 @@ kern_sendfile(struct thread *td, struct 
 	struct sf_buf *sf;
 	struct vm_page *pg;
 	struct ucred *cred;
-	off_t off, xfsize, fsbytes = 0, sbytes = 0, rem = 0;
+	off_t off, xfsize, fsbytes = 0, sbytes = 0, rem = 0, vnp_size = 0;
 	int error, hdrlen = 0, mnw = 0;
 	int vfslocked;
 
@@ -1992,7 +1992,7 @@ retry_space:
 			if (so->so_state & SS_NBIO) {
 				if (bg_sendfile_enable &&
 				    (so->so_snd.sb_flags & SB_SENDING) == 0)
-					soissending(so, td, uap, hdr_uio, trl_uio, compat, sbytes);
+					soissending(so, td, uap, hdr_uio, trl_uio, compat, sbytes, vnp_size);
 				SOCKBUF_UNLOCK(&so->so_snd);
 				error = EAGAIN;
 				goto done;
@@ -2054,6 +2054,7 @@ retry_space:
 				done = 1;		/* all data sent */
 				break;
 			}
+			vnp_size = obj->un_pager.vnp.vnp_size;
 			/*
 			 * Don't overflow the send buffer.
 			 * Stop here and send out what we've

Modified: user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h	Sun Sep  6 22:56:07 2009	(r196909)
+++ user/kmacy/releng_7_2_fcs_1/sys/sys/sockstate.h	Mon Sep  7 00:49:00 2009	(r196910)
@@ -81,7 +81,7 @@ void	soisdisconnecting(struct socket *so
 void	soissending(struct socket *so,
     struct thread *td, struct sendfile_args *uap,
     struct uio *hdr_uio, struct uio *trl_uio,
-    int compat, off_t sbytes);
+    int compat, off_t sbytes, off_t vnp_size);
 void	sosendingwakeup(struct sockbuf *sb);
 void	socantrcvmore(struct socket *so);
 void	socantrcvmore_locked(struct socket *so);

From owner-svn-src-user@FreeBSD.ORG  Mon Sep  7 12:41:20 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id D956610656A5;
	Mon,  7 Sep 2009 12:41:20 +0000 (UTC)
	(envelope-from edwin@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id E45628FC15;
	Mon,  7 Sep 2009 12:41:19 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n87CfJkW014834;
	Mon, 7 Sep 2009 12:41:19 GMT (envelope-from edwin@svn.freebsd.org)
Received: (from edwin@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id n87CfJfZ014810;
	Mon, 7 Sep 2009 12:41:19 GMT (envelope-from edwin@svn.freebsd.org)
Message-Id: <200909071241.n87CfJfZ014810@svn.freebsd.org>
From: Edwin Groothuis <edwin@FreeBSD.org>
Date: Mon, 7 Sep 2009 12:41:19 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r196923 - in user/edwin/locale/share: monetdef
	numericdef timedef
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 07 Sep 2009 12:41:21 -0000

Author: edwin
Date: Mon Sep  7 12:41:19 2009
New Revision: 196923
URL: http://svn.freebsd.org/changeset/base/196923

Log:
  Now that we have a properly working conversion system, we can compare
  the current FreeBSD locale data directories and compare it to the
  output we create and fix the differences.
  
  Mostly this is upper/lowercase in the timedef format strings plus
  a bunch of incorrect spaces in the thousand seperators. At this
  moment we concentrate on the correctness of the conversion, not on
  the correctness of the data!

Modified:
  user/edwin/locale/share/monetdef/Makefile
  user/edwin/locale/share/numericdef/Makefile
  user/edwin/locale/share/numericdef/ca_ES.unicode
  user/edwin/locale/share/numericdef/de_DE.unicode
  user/edwin/locale/share/numericdef/es_ES.unicode
  user/edwin/locale/share/numericdef/fr_FR.unicode
  user/edwin/locale/share/numericdef/nl_NL.unicode
  user/edwin/locale/share/numericdef/sl_SI.unicode
  user/edwin/locale/share/timedef/Makefile
  user/edwin/locale/share/timedef/ca_ES.unicode
  user/edwin/locale/share/timedef/cs_CZ.unicode
  user/edwin/locale/share/timedef/da_DK.unicode
  user/edwin/locale/share/timedef/de_AT.unicode
  user/edwin/locale/share/timedef/fi_FI.unicode
  user/edwin/locale/share/timedef/hr_HR.unicode
  user/edwin/locale/share/timedef/is_IS.unicode
  user/edwin/locale/share/timedef/it_IT.unicode
  user/edwin/locale/share/timedef/ja_JP.unicode
  user/edwin/locale/share/timedef/mn_MN.unicode
  user/edwin/locale/share/timedef/pt_BR.unicode
  user/edwin/locale/share/timedef/ro_RO.unicode
  user/edwin/locale/share/timedef/sv_SE.unicode
  user/edwin/locale/share/timedef/tr_TR.unicode

Modified: user/edwin/locale/share/monetdef/Makefile
==============================================================================
--- user/edwin/locale/share/monetdef/Makefile	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/monetdef/Makefile	Mon Sep  7 12:41:19 2009	(r196923)
@@ -23,7 +23,7 @@ CMS_kk_KZ=	PT154
 CMS_ko_KR=	eucKR
 CMS_pl_PL=	ISO8859-2
 CMS_pt_PT=	ISO8859-1 ISO8859-15
-CMS_ru_RU=	CP1251 CP855 ISO8859-5 KOI8-R
+CMS_ru_RU=	CP1251 CP866 ISO8859-5 KOI8-R
 CMS_uk_UA=	CP1251 ISO8859-5 KOI8-U
 CMS_zh_Hans_CN=	GB18030 GB2312 eucCN
 
@@ -94,7 +94,7 @@ LEGLINK_zh_Hans_CN.GBK2312=	zh_CN.GBK
 #
 
 # Required variables
-LCTYPE=		LC_NUMERIC
+LCTYPE=		LC_MONETARY
 LOCALEDIR=	/usr/share/locale
 #ICONV_pt_PT.ISO8859-1=	bsdiconv
 #ICONV_ko_KR.eucKR=	bsdiconv

Modified: user/edwin/locale/share/numericdef/Makefile
==============================================================================
--- user/edwin/locale/share/numericdef/Makefile	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/numericdef/Makefile	Mon Sep  7 12:41:19 2009	(r196923)
@@ -61,7 +61,8 @@ CCLNLINK_de_DE=	de_AT
 CCLNLINK_en_GB.UTF-8=	en_IE.UTF-8
 CCLNLINK_en_US=	en_AU en_CA en_GB en_NZ
 CCLNLINK_en_US.UTF-8=	he_IL.UTF-8
-CCLNLINK_fr_FR=	fr_CA fr_CH nl_BE
+CCLNLINK_fr_BE=	nl_BE
+CCLNLINK_fr_FR=	fr_CA fr_CH
 CCLNLINK_it_IT=	it_CH
 CCLNLINK_no_NO=	nb_NO nn_NO
 CCLNLINK_zh_HK.UTF-8=	zh_Hant_HK.Big5HKSCS zh_Hant_HK.UTF-8 zh_Hant_TW.Big5 zh_Hant_TW.UTF-8

Modified: user/edwin/locale/share/numericdef/ca_ES.unicode
==============================================================================
--- user/edwin/locale/share/numericdef/ca_ES.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/numericdef/ca_ES.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -6,7 +6,7 @@
 # decimal_point
 <COMMA>
 # thousands_sep
-<SPACE>
+
 # grouping, separated by ;
 -1
 # EOF

Modified: user/edwin/locale/share/numericdef/de_DE.unicode
==============================================================================
--- user/edwin/locale/share/numericdef/de_DE.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/numericdef/de_DE.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -6,7 +6,7 @@
 # decimal_point
 <COMMA>
 # thousands_sep
-<SPACE>
+
 # grouping, separated by ;
 -1
 # EOF

Modified: user/edwin/locale/share/numericdef/es_ES.unicode
==============================================================================
--- user/edwin/locale/share/numericdef/es_ES.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/numericdef/es_ES.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -6,7 +6,7 @@
 # decimal_point
 <COMMA>
 # thousands_sep
-<SPACE>
+
 # grouping, separated by ;
 -1
 # EOF

Modified: user/edwin/locale/share/numericdef/fr_FR.unicode
==============================================================================
--- user/edwin/locale/share/numericdef/fr_FR.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/numericdef/fr_FR.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -6,7 +6,7 @@
 # decimal_point
 <COMMA>
 # thousands_sep
-<SPACE>
+
 # grouping, separated by ;
 -1
 # EOF

Modified: user/edwin/locale/share/numericdef/nl_NL.unicode
==============================================================================
--- user/edwin/locale/share/numericdef/nl_NL.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/numericdef/nl_NL.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -6,7 +6,7 @@
 # decimal_point
 <COMMA>
 # thousands_sep
-<FULL STOP>
+
 # grouping, separated by ;
 -1
 # EOF

Modified: user/edwin/locale/share/numericdef/sl_SI.unicode
==============================================================================
--- user/edwin/locale/share/numericdef/sl_SI.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/numericdef/sl_SI.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -6,7 +6,7 @@
 # decimal_point
 <COMMA>
 # thousands_sep
-<SPACE>
+<SPACE><SPACE>
 # grouping, separated by ;
 0;0
 # EOF

Modified: user/edwin/locale/share/timedef/Makefile
==============================================================================
--- user/edwin/locale/share/timedef/Makefile	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/Makefile	Mon Sep  7 12:41:19 2009	(r196923)
@@ -80,7 +80,7 @@ CMSLINK_sv_SE.ISO8859-1=	sv_SE.ISO8859-1
 CMSLINK_zh_Hans_CN.GB2312=	zh_Hans_CN.GBK
 
 # For these locales, also create symlinks to the main locale.
-CCLNLINK_en_US.UTF-8=		af_ZA.UTF-8
+CCLNLINK_en_US.UTF-8=	af_ZA.UTF-8
 CCLNLINK_ca_ES=	ca_AD ca_IT ca_IT
 CCLNLINK_de_DE=	de_CH
 CCLNLINK_en_GB=	en_AU en_CA en_NZ

Modified: user/edwin/locale/share/timedef/ca_ES.unicode
==============================================================================
--- user/edwin/locale/share/timedef/ca_ES.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/ca_ES.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -63,7 +63,7 @@
 #
 # c_fmt
 #
-%a<SPACE>%e<SPACE>%b>%X<SPACE>%Y
+%a<SPACE>%e<SPACE>%b<SPACE>%X<SPACE>%Y
 #
 # am
 #

Modified: user/edwin/locale/share/timedef/cs_CZ.unicode
==============================================================================
--- user/edwin/locale/share/timedef/cs_CZ.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/cs_CZ.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -62,7 +62,7 @@
 #
 # x_fmt
 #
-%Y<SOLIDUS>%M<SOLIDUS>%D
+%Y<SOLIDUS>%m<SOLIDUS>%d
 #
 # c_fmt
 #
@@ -78,7 +78,7 @@
 #
 # date_fmt
 #
-%a><SPACE>%e<FULL STOP><SPACE>%B<SPACE>%Y<SPACE>%X<SPACE>%Z
+%a<SPACE>%e<FULL STOP><SPACE>%B<SPACE>%Y<SPACE>%X<SPACE>%Z
 #
 # Long month names (without case ending)
 #
@@ -101,5 +101,5 @@ dm
 #
 # ampm_fmt
 #
-%I<COLON>%M<COLON>%S<SPACE>%P
+%I<COLON>%M<COLON>%S<SPACE>%p
 # EOF

Modified: user/edwin/locale/share/timedef/da_DK.unicode
==============================================================================
--- user/edwin/locale/share/timedef/da_DK.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/da_DK.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -98,5 +98,5 @@ dm
 #
 # ampm_fmt
 #
-%I<COLON>%M<COLON>%S<SPACE>%P
+%I<COLON>%M<COLON>%S<SPACE>%p
 # EOF

Modified: user/edwin/locale/share/timedef/de_AT.unicode
==============================================================================
--- user/edwin/locale/share/timedef/de_AT.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/de_AT.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -59,7 +59,7 @@
 #
 # x_fmt
 #
-%D<FULL STOP>%m<FULL STOP>%Y
+%d<FULL STOP>%m<FULL STOP>%Y
 #
 # c_fmt
 #

Modified: user/edwin/locale/share/timedef/fi_FI.unicode
==============================================================================
--- user/edwin/locale/share/timedef/fi_FI.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/fi_FI.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -74,7 +74,7 @@
 #
 # date_fmt
 #
-%a<SPACE>%e<SPACE>%b<SPACE>%Y><SPACE>%X<SPACE>%Z
+%a<SPACE>%e<SPACE>%b<SPACE>%Y<SPACE>%X<SPACE>%Z
 #
 # Long month names (without case ending)
 #

Modified: user/edwin/locale/share/timedef/hr_HR.unicode
==============================================================================
--- user/edwin/locale/share/timedef/hr_HR.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/hr_HR.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -63,7 +63,7 @@
 #
 # c_fmt
 #
-%A<SPACE>%e<SPACE>%b<SPACE>%X<SPACE>%Y
+%a<SPACE>%e<SPACE>%b<SPACE>%X<SPACE>%Y
 #
 # am
 #

Modified: user/edwin/locale/share/timedef/is_IS.unicode
==============================================================================
--- user/edwin/locale/share/timedef/is_IS.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/is_IS.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -59,7 +59,7 @@
 #
 # x_fmt
 #
-%d<FULL STOP>%M<FULL STOP>%Y
+%d<FULL STOP>%m<FULL STOP>%Y
 #
 # c_fmt
 #
@@ -75,7 +75,7 @@
 #
 # date_fmt
 #
-%a<SPACE>%e<SPACE>%b><SPACE>%Y<SPACE>%X<SPACE>%Z
+%a<SPACE>%e<SPACE>%b<SPACE>%Y<SPACE>%X<SPACE>%Z
 #
 # Long month names (without case ending)
 #

Modified: user/edwin/locale/share/timedef/it_IT.unicode
==============================================================================
--- user/edwin/locale/share/timedef/it_IT.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/it_IT.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -94,7 +94,7 @@
 #
 # md_order
 #
-md
+dm
 #
 # ampm_fmt
 #

Modified: user/edwin/locale/share/timedef/ja_JP.unicode
==============================================================================
--- user/edwin/locale/share/timedef/ja_JP.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/ja_JP.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -64,17 +64,17 @@
 #
 # just following tradition...
 # %a %b %e %H:%M:%S %Y
-%a<SPACE>%b<SOLIDUS>%E<SPACE>%T<SPACE>%Y
+%a<SPACE>%b<SOLIDUS>%e<SPACE>%T<SPACE>%Y
 #
 # am
 #
 #午前
-<LATIN CAPITAL LETTER A><LATIN CAPITAL LETTER M>
+<CJK UNIFIED IDEOGRAPH-5348><CJK UNIFIED IDEOGRAPH-524D>
 #
 # pm
 #
 #午後
-<LATIN CAPITAL LETTER P><LATIN CAPITAL LETTER M>
+<CJK UNIFIED IDEOGRAPH-5348><CJK UNIFIED IDEOGRAPH-524C>
 #
 # date_fmt
 #

Modified: user/edwin/locale/share/timedef/mn_MN.unicode
==============================================================================
--- user/edwin/locale/share/timedef/mn_MN.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/mn_MN.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -59,7 +59,7 @@
 #
 # x_fmt
 #
-%Y<FULL STOP>%M<FULL STOP>%D
+%Y<FULL STOP>%m<FULL STOP>%d
 #
 # c_fmt
 #

Modified: user/edwin/locale/share/timedef/pt_BR.unicode
==============================================================================
--- user/edwin/locale/share/timedef/pt_BR.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/pt_BR.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -60,7 +60,7 @@
 #
 # x_fmt
 #
-%d<SOLIDUS>%M<SOLIDUS>%Y
+%d<SOLIDUS>%m<SOLIDUS>%Y
 #
 # c_fmt
 #

Modified: user/edwin/locale/share/timedef/ro_RO.unicode
==============================================================================
--- user/edwin/locale/share/timedef/ro_RO.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/ro_RO.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -63,7 +63,7 @@
 #
 # c_fmt
 #
-%a<SPACE>%e<SPACE>%b<SPACE>%Y><SPACE>%X
+%a<SPACE>%e<SPACE>%b<SPACE>%Y<SPACE>%X
 #
 # am
 #

Modified: user/edwin/locale/share/timedef/sv_SE.unicode
==============================================================================
--- user/edwin/locale/share/timedef/sv_SE.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/sv_SE.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -62,7 +62,7 @@
 #
 # c_fmt
 #
-%a<SPACE>%e<SPACE>%b><SPACE>%X<SPACE>%Y
+%a<SPACE>%e<SPACE>%b<SPACE>%X<SPACE>%Y
 #
 # am
 #

Modified: user/edwin/locale/share/timedef/tr_TR.unicode
==============================================================================
--- user/edwin/locale/share/timedef/tr_TR.unicode	Mon Sep  7 12:39:54 2009	(r196922)
+++ user/edwin/locale/share/timedef/tr_TR.unicode	Mon Sep  7 12:41:19 2009	(r196923)
@@ -77,7 +77,7 @@
 #
 # date_fmt
 #
-%e<SPACE>%b<SPACE>%Y<SPACE>%A<SPACE>%Z<SPACE>%X
+%e<SPACE>%b<SPACE>%Y<SPACE>%a<SPACE>%Z<SPACE>%X
 #
 # Long month names (without case ending)
 #