Received: by 10.223.164.202 with SMTP id h10csp1253628wrb; Sun, 26 Nov 2017 23:23:16 -0800 (PST) X-Google-Smtp-Source: AGs4zMaXwfpusa09UMhKLZQ4v1AfDuUEqvu8SlXaqPGA3TDr31oQhR2bhZp3UQVJJJR0OzoxV2B5 X-Received: by 10.99.117.12 with SMTP id q12mr36437424pgc.412.1511767396348; Sun, 26 Nov 2017 23:23:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511767396; cv=none; d=google.com; s=arc-20160816; b=RO/3zhlizy3kkv0R6gO6X4kP+qTDR6OG5lZh5J15tAobB6pVmobcdlx9R6kroFD26Z CvPOH+pSzAyqeuoPhczRZnx/ruYbqfxDFK5KZGF5RiWhCw5NoWj9fORdZxDJsUeOzZ2D CgW7tPOksjlirTOVOCGi9fdUOQNWcyXgkhnF9MPsNgtW2GxWOGBwd35QsErVtLzLqnMB CWQUgO4nlF4ZADZRXeg21lF0xxPVDPTEEzmG3u0vD4WUuLrZr3RjcuFIMQbDWnvYizX9 qCEILq34QDtp02DnK2I5AT1qHnZtfolMuMMy09sedvf9jMCYfDvPFij+M0l557EIE0Fe D65A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:references:in-reply-to:date :subject:cc:to:from:arc-authentication-results; bh=BkM7JTBaRPrUwyri6Dz/hmz/ylpulB4TaOYi5YMMaew=; b=J1Pmu89kDx/ctBOAvOgp6g/ZrQA7gFRHRdNFMdXaCFne6CDcEHe/UZohekZSqc+uGv 6tkpNT+2omC7jsSSCA2dA+sC7Hq5vXFNe5WjUyvt91GC2VqeTQOjP4P4ZjbSLrO17vMs jpaGM5nzG5K1gSsWwFqQYR6MS904kau4XX0q7Z7Wev0sqLXjzDfJd+iGPb3s+zgc1VIW Hhkctz4H5QV1pPVAxp94MfkvPQhb0+bXH7bxpbkL5YYVUb/VwoP2I9nuIBLf8CmwXSe6 PT3OG6KDqbmmI0yYHONmkb70vliyvK691/eKCD+FQgEwPfqr+RYCihVl5iHoVWn8QeeB tIvg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o66si946657pga.19.2017.11.26.23.23.04; Sun, 26 Nov 2017 23:23:16 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751874AbdK0HVG (ORCPT + 78 others); Mon, 27 Nov 2017 02:21:06 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:33502 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751834AbdK0HVD (ORCPT ); Mon, 27 Nov 2017 02:21:03 -0500 Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id vAR7J4OQ018458 for ; Mon, 27 Nov 2017 02:21:02 -0500 Received: from e06smtp12.uk.ibm.com (e06smtp12.uk.ibm.com [195.75.94.108]) by mx0b-001b2d01.pphosted.com with ESMTP id 2egccam90n-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 27 Nov 2017 02:21:01 -0500 Received: from localhost by e06smtp12.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 27 Nov 2017 07:20:59 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp12.uk.ibm.com (192.168.101.142) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 27 Nov 2017 07:20:54 -0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id vAR7KrNf28311626; Mon, 27 Nov 2017 07:20:53 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 655FDA4057; Mon, 27 Nov 2017 07:15:28 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4E5A9A4051; Mon, 27 Nov 2017 07:15:26 +0000 (GMT) Received: from rapoport-lnx (unknown [9.148.8.170]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Mon, 27 Nov 2017 07:15:26 +0000 (GMT) Received: by rapoport-lnx (sSMTP sendmail emulation); Mon, 27 Nov 2017 09:20:51 +0200 From: Mike Rapoport To: Michael Kerrisk Cc: Andrew Morton , Alexander Viro , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-api@vger.kernel.org, criu@openvz.org, Arnd Bergmann , Pavel Emelyanov , Thomas Gleixner , Josh Triplett , Jann Horn , Greg KH , Andrei Vagin , Mike Rapoport Subject: [PATCH] process_vmsplice.2: New page describing process_vmsplice(2) system call. Date: Mon, 27 Nov 2017 09:20:50 +0200 X-Mailer: git-send-email 2.7.4 In-Reply-To: <1511767181-22793-1-git-send-email-rppt@linux.vnet.ibm.com> References: <1511767181-22793-1-git-send-email-rppt@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17112707-0008-0000-0000-000004AFDBBD X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17112707-0009-0000-0000-00001E42B238 Message-Id: <1511767250-23064-1-git-send-email-rppt@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-27_04:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1711270102 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Mike Rapoport --- man2/process_vmsplice.2 | 188 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 man2/process_vmsplice.2 diff --git a/man2/process_vmsplice.2 b/man2/process_vmsplice.2 new file mode 100644 index 0000000..b99c06b --- /dev/null +++ b/man2/process_vmsplice.2 @@ -0,0 +1,188 @@ +.\" Copyright (c) 2017, IBM Corporation. +.\" Written by Mike Rapoport +.\" Based on vmsplice(2) by Jens Axboe and +.\" process_vm_read(2) by Christopher Yeoh, Mike Frysinger and Michael Kerrisk +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.TH PROCESS_VMSPLICE 2 2017-11-23 "Linux" "Linux Programmer's Manual" +.SH NAME +process_vmsplice \- splice user pages from a specific process +address space into a pipe +.SH SYNOPSIS +.nf +.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */" +.B #include +.B #include +.PP +.BI "ssize_t process_vmsplice(pid_t " pid ", int " fd , +.BI " const struct iovec *" iov , +.BI " unsigned long " nr_segs , +.BI " unsigned int " flags ); +.fi +.PP +.IR Note : +There is no glibc wrapper for this system call; see NOTES. +.SH DESCRIPTION +The +.BR process_vmsplice () +system call maps +.I nr_segs +ranges of user memory described by +.I iov +from address space of the process identified by +.I pid +into a pipe. +The file descriptor +.I fd +must refer to a pipe. +.PP +The pointer +.I iov +points to an array of +.I iovec +structures as defined in +.IR : +.PP +.in +4n +.EX +struct iovec { + void *iov_base; /* Starting address */ + size_t iov_len; /* Number of bytes */ +}; +.EE +.in +.PP +The +.I flags +argument is a bit mask that is composed by ORing together +zero or more of the following values: +.RS +.TP 1.9i +.B SPLICE_F_MOVE +Unused for +.BR process_vmsplice (); +see +.BR splice (2). +.TP +.B SPLICE_F_NONBLOCK +Do not block on I/O; see +.BR splice (2) +for further details. +.TP +.B SPLICE_F_MORE +Currently has no effect for +.BR process_vmsplice () +.TP +.B SPLICE_F_GIFT +The user pages are a gift to the kernel. +see +.BR vmsplice (2) +for further details. +.RE +.PP +Buffers pointed by the +.I iov +parameter are processed in array order. +This means that +.BR process_vmsplice () +completely fills +.I iov[0] +before proceeding to +.IR iov[1] , +and so on. +.PP +The +.BR process_vmsplice () +does not check the memory regions in the process +until just before remapping those regions into the pipe. +Consequently, a partial read may result if one of the +.I iov +elements points to an invalid memory region in the process. +No further reads will be attempted beyond that point. +.PP +Permission to read from or write to another process +is governed by a ptrace access mode +.B PTRACE_MODE_ATTACH_REALCREDS +check; see +.BR ptrace (2). +.SH RETURN VALUE +Upon successful completion, +.BR process_vmsplice () +returns the number of bytes transferred to the pipe. +On error, +.BR process_vmsplice () +returns \-1 and +.I errno +is set to indicate the error. +.SH ERRORS +.TP +.B EAGAIN +.B SPLICE_F_NONBLOCK +was specified in +.IR flags , +and the operation would block. +.TP +.B EBADF +.I fd +either not valid, or doesn't refer to a pipe. +.TP +.B EINVAL +.I nr_segs +is greater than +.BR IOV_MAX ; +or memory not aligned if +.B SPLICE_F_GIFT +set. +.TP +.B ENOMEM +Out of memory. +.TP +.B ESRCH +No process with ID +.I pid +exists. +.SH VERSIONS +The +.BR process_vmsplice () +system call first appeared in Linux 4.15. +.SH CONFORMING TO +This system call is Linux-specific. +.SH NOTES +Glibc does not provide a wrapper for this system call; call it using +.BR syscall (2). +.BR process_vmsplice () +follows the other vectorized read/write type functions when it comes to +limitations on the number of segments being passed in. +This limit is +.B IOV_MAX +as defined in +.IR . +Currently, +.\" UIO_MAXIOV in kernel source +this limit is 1024. +.SH SEE ALSO +.BR process_vm_read (2) +.BR ptrace (2), +.BR splice (2), +.BR pipe (7) -- 2.7.4 From 1585197470969170248@xxx Mon Nov 27 05:55:14 +0000 2017 X-GM-THRID: 1583517611141261654 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread