From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 776E9C3DA7F for ; Thu, 15 Aug 2024 14:43:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 12C116B0115; Thu, 15 Aug 2024 10:43:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0B4E86B0116; Thu, 15 Aug 2024 10:43:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E97806B0117; Thu, 15 Aug 2024 10:43:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id C9DEE6B0115 for ; Thu, 15 Aug 2024 10:43:01 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 1EA15A0ECF for ; Thu, 15 Aug 2024 14:43:01 +0000 (UTC) X-FDA: 82454746962.23.8FE4C54 Received: from mail-il1-f171.google.com (mail-il1-f171.google.com [209.85.166.171]) by imf14.hostedemail.com (Postfix) with ESMTP id 13111100029 for ; Thu, 15 Aug 2024 14:42:58 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=kernel-dk.20230601.gappssmtp.com header.s=20230601 header.b=Ci+cHywP; spf=pass (imf14.hostedemail.com: domain of axboe@kernel.dk designates 209.85.166.171 as permitted sender) smtp.mailfrom=axboe@kernel.dk; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1723732943; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=kLQVxjToRHTTsTWidnkDOxtormh+P4ETVsPs0u31nWw=; b=ZEyp25jRbOfK4uVlERa6d+Mwue89WJANelYm6bl6Uy8t2vaTCz4SRKYOWJUX5nWapAm3f1 LFjCv+9rxbEEHUyKrWzLHEM7i/bIGUHZGEuZnLCkPg313PsSb0RwDp0te9dF7hLWFqvoC5 GcR8ulwCH19LR20tdeweA0M81zWdNTU= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=kernel-dk.20230601.gappssmtp.com header.s=20230601 header.b=Ci+cHywP; spf=pass (imf14.hostedemail.com: domain of axboe@kernel.dk designates 209.85.166.171 as permitted sender) smtp.mailfrom=axboe@kernel.dk; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1723732943; a=rsa-sha256; cv=none; b=6e1rezzPfS00d0DQoN1ENo+9LLHHukgUGpM03VLt1mBnf/+UTbgoUjg+SU7kTK+hTAeY/Z m57+kyTDw5CGhYMfwDTf7WJM1RwPuTAed2AymAR9tEUfBrXY1L39U9aS7kO7Apw7IdXGwv u9oZwrMihlaEydx2NkN5Y18+PTz7q7A= Received: by mail-il1-f171.google.com with SMTP id e9e14a558f8ab-39d19d0c6c6so609175ab.2 for ; Thu, 15 Aug 2024 07:42:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel-dk.20230601.gappssmtp.com; s=20230601; t=1723732978; x=1724337778; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=kLQVxjToRHTTsTWidnkDOxtormh+P4ETVsPs0u31nWw=; b=Ci+cHywPMe7ftk7ZWzkhafZr4gcScusLz5iUZmkkaAJdMoTMFCb98CrBWbttyVdWOY +kQLxVvajSEWr+h2Y/vzZy+qsXrl2C2eAhnTufJzEfJAS/NX0UaRDuS/ye1ukI8Vxhfe 037dtWweiyd22k2ZDyim3bdXpSmDVEbbztW40rydezXQwVASsUx5F6rIXAN470IQC9Po TIOKGipQ9ubhnVj2ywwSrmrd50jopSCKI9Uw6xz3ga34CZTeU/nTXOe8pzEMgqcVrBEd 0MSEZLCxeIPFIfVowImyNKc5CEl/nF6/tUohZWy+kcoc0z3XHUxi+GVsutEaQyq7l7Wd dpmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723732978; x=1724337778; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kLQVxjToRHTTsTWidnkDOxtormh+P4ETVsPs0u31nWw=; b=QiF/Dd7Vlvp0Gvap8Ra1dUndnpUqMKIXE93+m0prQqdTdTeBGWrwrqx34nEuLAkcU1 Ptv6vQ1apWCYThzADZbgQoCSa0ICN2lq7MhMfVlaSWwwJ0J9XqmR7QwmxBkIk96W8K74 MgRA+8lE+LCpadNuPXIDxCKy1o6IN/Myg8/FhDPI5OC3jiQpq9yVKURjBaRlAa8gs9ia 1IimgbBe9ATk6XXex5tJmmOML7IDp4uAgQKQi0afxz1v8iQ1j5Ng8hRj6yfchyhS/NAW U6/Q5SCOXF2g/Fgs98Zmh1Yo2iZ3yWOhAucoOsBI3WluMV0HyyWjzQrIEa3JVZngbjYN bNyA== X-Forwarded-Encrypted: i=1; AJvYcCUMGjNXFGeOLe6Btu2B0HefFetlxU5Sg4g5ar0zYFITL6eCFxv1jq+ItrBwfQg0x3+GYzkiFAXQ9w==@kvack.org X-Gm-Message-State: AOJu0YyJB3ZRbeEaxgMoBHLVK7bLi6dH/+jYLZcv5UGRT6Vcw1lB+L7v SUKTgCelOoS9r9nJN8+CoXSg3ScFfblQm+B27tpt5FFL9euYBvSjGBFUwW6kCcM= X-Google-Smtp-Source: AGHT+IFzaXrg2hNk3mBUNAtA5z5C3113LDJGI8/gSRITKFMwrG8Z4L861A6eJ+m0YKVu9a5r7Zss9g== X-Received: by 2002:a05:6602:314f:b0:81f:8295:fec5 with SMTP id ca18e2360f4ac-824f261391dmr1020039f.1.1723732977636; Thu, 15 Aug 2024 07:42:57 -0700 (PDT) Received: from [192.168.1.116] ([96.43.243.2]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-824e990d5b4sm53016239f.14.2024.08.15.07.42.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 15 Aug 2024 07:42:56 -0700 (PDT) Message-ID: <57951efc-2f43-4cd1-a053-f4a8f323118f@kernel.dk> Date: Thu, 15 Aug 2024 08:42:56 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC 5/5] block: implement io_uring discard cmd To: Pavel Begunkov , io-uring@vger.kernel.org Cc: Conrad Meyer , linux-block@vger.kernel.org, linux-mm@kvack.org References: <6ecd7ab3386f63f1656dc766c1b5b038ff5353c2.1723601134.git.asml.silence@gmail.com> Content-Language: en-US From: Jens Axboe In-Reply-To: <6ecd7ab3386f63f1656dc766c1b5b038ff5353c2.1723601134.git.asml.silence@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: 13111100029 X-Stat-Signature: nm84ye97311npzfhc7uf1yerd9cbwtxb X-HE-Tag: 1723732978-597783 X-HE-Meta: U2FsdGVkX1/tsr7BvjOCJ6U1TxE/DwkcDn+WyEjn8/tzwv1gMqJikioauRWlPSshRZ2Y7IQMeLAuYtdhjPreM81LMbt0ISD8OJdcAdGSapIoItD5pwtGLbwTSMRun2zSCHxFoSjvvWOXQt4i+6PkSi5vX9VRM7spSfCIWMrXfO0tyaPLJwn8NyFTKncB/AFq88WcnvM/dJFi8BX60pk05N28Ywcutr10VvO0FgzHjuoNkOKn2QwAhcoAYIKBUHGpQg/wOubbLOWR5Sme4tVd+6aCvb6D5Jjy964VeAoh2I5N/BTtEpnSCFkj6sp/Hi1W8f4RGy9a5vCIbDXW4rbNaBA+9VHAhjQBkISEO4MVV8xEc5w7kMO0uji4YN3hVInvGljc2KSXgXJeGhBnGHmV2jV5eVyxEK4X/9sKRiEf1xQfVT1t8jq/fT+rW/MCHs1iOlz5zg9PWhMbYdrKaMNe2etLrAItyi9XmAvZ8ffoaKwAk0tXKbFLCOZGfKIfVEQuK8HLfQhlkmTfPtJIaV5yr/exHgS2vTlzK9fikrUBfITU8vLyEB+H+/+k5rpvwa46jKyhO0IDrOtjnFWITwEqtVtt516M33QGU4ylXsNYOCTOJPChOlpDzkBD40tP321G2i19naN9Ra5Tbl/o+u0/ipjvUmYpeII4xnXJDKyuez3m01cCyuwgJgnYU5THUnHrrO0Flwp9B5g5+NGFjG7rxbaxexRPtq4/q8vEMowrLiAu8hCQPzBiF6Cnf6jMws/TAUqGVvP1sHsNggiIRRclg6NPVUC2K51rG9dN6kxTJ2BY0VDQED+EKoDTm/6q5imZFqlQ/m8dgr0vkCYx7JYvmaAa59atcxw5R7mqmnZpz+CFjbE0IhF6jGr5IbJx23prk5sN6IrpOkCn9EIHochszKo7QZRtyDU8VxFdumLSBCcfzw4xyNDStSPi2aBkAJGKYHhhTrkHL8SF1on6LM9 E/sT48j9 TS3kF557wOHKHiJUXrup/gMKacfLmvmUka9L0+VfuT0DwBaJbZPLr44TPD6y5VF1B/h7i6bUrjr/fhWgOFzsrLgOpXRCNBy2a1hwVhTwqMbskBTMWZM5FUklxMbiaiQ1mysL6iM0QgUFdiOLpZn9JHCX2XYX9g+oHs+KWTSUlXFMGW0lKZJTOtBQbrc33h5Y0qd7qK8krOd8imNDKfDkbaribCCRGQHxMLegHyky+ymaRE2NmwFf8gYpJKuWS9aunbrDSU2IdFPyLh36qqeofHInmKNFvDy/C8qyYelkfbGbWe3AZExh9IgvXJPKJAnS45Zq9GBflnGLnoK4ximUbJOGVMQf7GfB+dLUSHtAlE4zkZKOvs/0fkGjqs+c5PIkWb/1A6slcZQFkCSFRG2xSNQX0PfNBpbn689zs4mWQWIwy35k6zMj1xWn4H/VC8aXaW05z X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 8/14/24 4:45 AM, Pavel Begunkov wrote: > diff --git a/block/ioctl.c b/block/ioctl.c > index c7a3e6c6f5fa..f7f9c4c6d6b5 100644 > --- a/block/ioctl.c > +++ b/block/ioctl.c > @@ -11,6 +11,8 @@ > #include > #include > #include > +#include > +#include > #include "blk.h" > > static int blkpg_do_ioctl(struct block_device *bdev, > @@ -744,4 +746,96 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg) > > return ret; > } > + > +struct blk_cmd { > + blk_status_t status; > + bool nowait; > +}; > + > +static void blk_cmd_complete(struct io_uring_cmd *cmd, unsigned int issue_flags) > +{ > + struct blk_cmd *bc = io_uring_cmd_to_pdu(cmd, struct blk_cmd); > + int res = blk_status_to_errno(bc->status); > + > + if (res == -EAGAIN && bc->nowait) > + io_uring_cmd_issue_blocking(cmd); > + else > + io_uring_cmd_done(cmd, res, 0, issue_flags); > +} > + > +static void bio_cmd_end(struct bio *bio) > +{ > + struct io_uring_cmd *cmd = bio->bi_private; > + struct blk_cmd *bc = io_uring_cmd_to_pdu(cmd, struct blk_cmd); > + > + if (unlikely(bio->bi_status) && !bc->status) > + bc->status = bio->bi_status; > + > + io_uring_cmd_do_in_task_lazy(cmd, blk_cmd_complete); > + bio_put(bio); > +} > + > +static int blkdev_cmd_discard(struct io_uring_cmd *cmd, > + struct block_device *bdev, > + uint64_t start, uint64_t len, bool nowait) > +{ > + sector_t sector = start >> SECTOR_SHIFT; > + sector_t nr_sects = len >> SECTOR_SHIFT; > + struct bio *prev = NULL, *bio; > + int err; > + > + err = blk_validate_discard(bdev, file_to_blk_mode(cmd->file), > + start, len); > + if (err) > + return err; > + err = filemap_invalidate_pages(bdev->bd_mapping, start, > + start + len - 1, nowait); > + if (err) > + return err; > + > + while ((bio = blk_alloc_discard_bio(bdev, §or, &nr_sects, > + GFP_KERNEL))) { > + if (nowait) { > + if (unlikely(nr_sects)) { > + bio_put(bio); > + return -EAGAIN; > + } > + bio->bi_opf |= REQ_NOWAIT; > + } > + prev = bio_chain_and_submit(prev, bio); > + } > + if (!prev) > + return -EFAULT; > + > + prev->bi_private = cmd; > + prev->bi_end_io = bio_cmd_end; > + submit_bio(prev); > + return -EIOCBQUEUED; > +} > + > +int blkdev_uring_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags) > +{ > + struct block_device *bdev = I_BDEV(cmd->file->f_mapping->host); > + struct blk_cmd *bc = io_uring_cmd_to_pdu(cmd, struct blk_cmd); > + const struct io_uring_sqe *sqe = cmd->sqe; > + u32 cmd_op = cmd->cmd_op; > + uint64_t start, len; > + > + if (unlikely(sqe->ioprio || sqe->__pad1 || sqe->len || > + sqe->rw_flags || sqe->file_index)) > + return -EINVAL; > + > + bc->status = BLK_STS_OK; > + bc->nowait = issue_flags & IO_URING_F_NONBLOCK; > + > + start = READ_ONCE(sqe->addr); > + len = READ_ONCE(sqe->addr3); > + > + switch (cmd_op) { > + case BLOCK_URING_CMD_DISCARD: > + return blkdev_cmd_discard(cmd, bdev, start, len, bc->nowait); > + } > + return -EINVAL; > +} This is inside the CONFIG_COMPAT section, which doesn't seem right. -- Jens Axboe