From owner-svn-src-head@freebsd.org Thu Sep 14 07:32:01 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CE888E05501 for ; Thu, 14 Sep 2017 07:32:01 +0000 (UTC) (envelope-from steven.hartland@multiplay.co.uk) Received: from mail-wm0-x22a.google.com (mail-wm0-x22a.google.com [IPv6:2a00:1450:400c:c09::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5DFDD686BB for ; Thu, 14 Sep 2017 07:32:01 +0000 (UTC) (envelope-from steven.hartland@multiplay.co.uk) Received: by mail-wm0-x22a.google.com with SMTP id a137so3682072wma.0 for ; Thu, 14 Sep 2017 00:32:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=multiplay-co-uk.20150623.gappssmtp.com; s=20150623; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language; bh=lqL0jDHkT7Aa0ibCjgLsmAyLGzBbXwILQfvqJ+k7XPw=; b=a23va4EJbdk2ozo5JGjK1K3BoD6vpx3vl3LT85VfjsHPTks6dbhkOfYdPp0jdkUjZV G2FKVgZ3Q/amf7NyJIEK2JxS13mkmvMfDwhG4L7zDZugeD8dlVsDcrhWFT/i9GFi0gmg SJ6yTnRxUUIkEDvYZLmvjQloSPXeSpZMTdQQA0BCu9QUcHwGArgSVv5jKSJfWQNz4rXf ixoDqy/osy2Jm5A+En+Os4iUzMMbYczkd1g0Z0FRN8P80EYF1iolryrh40SXVWZYWudo YJ9QLaNcCdJMmxnN+LJQQpYWGD1WfoL+znxS0NZe8cQ8BZVctXVkbjsSlaCIbhcVSN4+ w6qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=lqL0jDHkT7Aa0ibCjgLsmAyLGzBbXwILQfvqJ+k7XPw=; b=nujyBkxEbDCRu66w2xoNty1KTMM9iXjuPVO3dm+/emUNRrbVeABySUmr1QDtuO4Bum itVwJbMVBra2Bmof0/L0T14zL9ooQJKbrYF+TulL6yZ32DQ+OMm38P4bEtqUQGG++ncb VaEDCegvM2RdxvfcmnEvmUizTq3oajd02hdHInY82vvUNvDHsVHbsj/GMpWl4HAPF8ZG ruARTkLjdlRmTG8V4G/mAbBN1D9gFhY9bFcEEqiwZrrX05DrG8yXDk69FI74vqGCT5jx vqMIRRYUh72VwjYJGvIBSOq+PLmwZWvLiPfyIQ1KDmXM2vlRwYCjAhvpfdygKn46305T kc2Q== X-Gm-Message-State: AHPjjUipUozg5BoRbIHN1ttOtxiWpEq8mWddDtn4RS3EoHz0L3a09q8n +iHdUOwqZHl7ThFKHEN0hQ== X-Google-Smtp-Source: AOwi7QBuAH3ostErlok7x/nes+qan34fkyudobrA0CaxTk9VbW0g7npm84YxXUh8KQAeNzcxlcQOqw== X-Received: by 10.28.212.65 with SMTP id l62mr966550wmg.77.1505374319157; Thu, 14 Sep 2017 00:31:59 -0700 (PDT) Received: from [10.10.1.111] ([185.97.61.1]) by smtp.gmail.com with ESMTPSA id g37sm19563379wra.6.2017.09.14.00.31.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Sep 2017 00:31:57 -0700 (PDT) Subject: Re: svn commit: r323566 - head/sys/kern To: Gleb Smirnoff , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <201709132211.v8DMB6Pp048326@repo.freebsd.org> From: Steven Hartland Message-ID: <4ae03e74-4fc3-d23b-4f14-3329b20b8df0@multiplay.co.uk> Date: Thu, 14 Sep 2017 08:31:57 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <201709132211.v8DMB6Pp048326@repo.freebsd.org> Content-Language: en-US Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Sep 2017 07:32:01 -0000 Is this something that will be MFC'ed to 11 or is this 12 / CURRENT only? On 13/09/2017 23:11, Gleb Smirnoff wrote: > Author: glebius > Date: Wed Sep 13 22:11:05 2017 > New Revision: 323566 > URL: https://svnweb.freebsd.org/changeset/base/323566 > > Log: > Use soref() in sendfile(2) instead fhold() to reference a socket. > > The problem is that fdrop() requires syscall context, as it may > enter sleep in some cases. The reason to use it in the original > non-blocking sendfile implementation, was to avoid use of global > ACCEPT_LOCK() on every I/O completion. Now in head sorele() no > longer requires this lock. > > Modified: > head/sys/kern/kern_sendfile.c > > Modified: head/sys/kern/kern_sendfile.c > ============================================================================== > --- head/sys/kern/kern_sendfile.c Wed Sep 13 21:56:49 2017 (r323565) > +++ head/sys/kern/kern_sendfile.c Wed Sep 13 22:11:05 2017 (r323566) > @@ -80,7 +80,7 @@ struct sf_io { > volatile u_int nios; > u_int error; > int npages; > - struct file *sock_fp; > + struct socket *so; > struct mbuf *m; > vm_page_t pa[]; > }; > @@ -255,7 +255,7 @@ static void > sendfile_iodone(void *arg, vm_page_t *pg, int count, int error) > { > struct sf_io *sfio = arg; > - struct socket *so; > + struct socket *so = sfio->so; > > for (int i = 0; i < count; i++) > if (pg[i] != bogus_page) > @@ -267,8 +267,6 @@ sendfile_iodone(void *arg, vm_page_t *pg, int count, i > if (!refcount_release(&sfio->nios)) > return; > > - so = sfio->sock_fp->f_data; > - > if (sfio->error) { > struct mbuf *m; > > @@ -296,8 +294,8 @@ sendfile_iodone(void *arg, vm_page_t *pg, int count, i > CURVNET_RESTORE(); > } > > - /* XXXGL: curthread */ > - fdrop(sfio->sock_fp, curthread); > + SOCK_LOCK(so); > + sorele(so); > free(sfio, M_TEMP); > } > > @@ -724,6 +722,7 @@ retry_space: > sfio = malloc(sizeof(struct sf_io) + > npages * sizeof(vm_page_t), M_TEMP, M_WAITOK); > refcount_init(&sfio->nios, 1); > + sfio->so = so; > sfio->error = 0; > > nios = sendfile_swapin(obj, sfio, off, space, npages, rhpages, > @@ -858,9 +857,8 @@ prepend_header: > error = (*so->so_proto->pr_usrreqs->pru_send) > (so, 0, m, NULL, NULL, td); > } else { > - sfio->sock_fp = sock_fp; > sfio->npages = npages; > - fhold(sock_fp); > + soref(so); > error = (*so->so_proto->pr_usrreqs->pru_send) > (so, PRUS_NOTREADY, m, NULL, NULL, td); > sendfile_iodone(sfio, NULL, 0, 0); >