Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4651881pxj; Tue, 22 Jun 2021 05:13:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxIhWf1Rq9DMXr0cVg4i/d5WD4e5FlN1wiJR2CyYuiX+UIv4sDc7ZySru9rzmZz2XjOAtJ7 X-Received: by 2002:a50:fe8d:: with SMTP id d13mr4511780edt.14.1624363993567; Tue, 22 Jun 2021 05:13:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624363993; cv=none; d=google.com; s=arc-20160816; b=dcNMEEpm6g/Ujzc+OMpUm85dFLbDOuY1wiU/0X1K1WPbdNXNjkS+eoRPw00VYiriik KAwJe73KWBGqPUvpEZ4UXb34E+HUauSRWLvLXkbGmLARfLTnfnWOiNPgFs20okdMeN6y 0qXNL5SJ6IK5gtqp6oQYK65ODgyVHmN+OXrnlpKt+ktrlV9J4lDOz7mw/2qWS+dLBhna ML2n09sR67HIdg0S7YRRu4y4rd/8RK0tp9Gnk0If8LHqLq6d6LASsbbbvcN7N0XO3V/N 3eQO7u9yj2o0iCp9uzCYl3XkeAUfUhgNO8WDNEFE0dUuntH66MR45UBfszzaagfWa9wi up9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from; bh=3HY3HPaRcNFSsw3qlu4vw3m0/gvVB9mFXlprzOAYLvw=; b=jRPLrOFLuHYzt8xxRgdbffKaBshw2Se2jSqwGsgLb1m7vUtpKYz3PJjJo3e8AqybxM bm5hNZIvhNBv0DRsUO5+hWpJL4WmcojbcAu+xxXugwxRid1HDnVt5wBKgqvkz0M1Q6b2 lllmcVbRf/V/PT8nIc3G31kYtK+ViZqBv+xmCY4TM7KFhhSIKJlZASGFrKDZxWOLpSfp j4NGlnbywTfkVMpscd7W7IU3OrK+ohtrbhTql8R0c/wIV0bbhWBX+j4hn6hAEoAapsTJ UAMzqTl3lp4YIiOpNJeTuTtyg2e9AxUyjCkUcBJffhJRtsCyrEIpKAltpFcENR5PK6RV ADtw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g20si12994228ejz.520.2021.06.22.05.12.50; Tue, 22 Jun 2021 05:13:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231375AbhFVMOD (ORCPT + 99 others); Tue, 22 Jun 2021 08:14:03 -0400 Received: from mout.kundenserver.de ([217.72.192.74]:54659 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231204AbhFVMOB (ORCPT ); Tue, 22 Jun 2021 08:14:01 -0400 Received: from orion.localdomain ([95.117.21.172]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MEF87-1m5KHq1khB-00AJEx; Tue, 22 Jun 2021 14:11:43 +0200 From: "Enrico Weigelt, metux IT consult" To: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk Subject: [RFC PATCH 2/6] fs: ext4: move fstrim to file_operation Date: Tue, 22 Jun 2021 14:11:32 +0200 Message-Id: <20210622121136.4394-3-info@metux.net> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210622121136.4394-1-info@metux.net> References: <20210622121136.4394-1-info@metux.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K1:SEAYXtm7GbVRHzQweFmUed37iHQEuQsNHzL6JPFjCdIFUsZ8DpE rNLUkzG5KwoOTSZVn0a/RVqtklPMLEzq7kGBneS4k2VwL6tuAHe0SEIpgnZRWd8qPm/SbLE 2hzj53B1leIY98qMip64KB9xofwe0kFCHi/z9qLxEVPB5SSVl0GQeE1cwrJb41sHPzjW16L DikV2XD8AqzDX2ATXXiMA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:xkiEMdkzDJ4=:Jj1tfXek19BWroOSl2xRNe SZ7Wc3Rd1StVPROiNKuJRpyqLWB4PRDHrkUUT3zZCOyuVA9KQDt4SLaDdeY9tuaWIcNNLko4B GY0thnYypJJnKuimn5Gv/5AHpHdQ5L5+b72KhJb2X4/g/qpxjiCeyVeYHCwd3ZlIqmD46Pt6f Z9kQ04y2CKyiZPqgKmNGx/UTZIqHLXvP66RdrEutDfMWxkpzpKRwIlCMLJ1dS+87klN0fMPZb kQM5vtuSExf2i5iSg+Y7+DOiWGG6v4MiyiTGzncg3ofnIC0edbYRPZH/XBtzRmq850HWGuM6d UcGmwHce7Y7cMug9m5s/xHMM2lRW5F2eg91PmsTfSsuDtsSftQX8wWpJFbBnzuix2DfKref+D ilyIhgeqXQiUfAz68u0JzY54R3jioUix6F7pR3WpJWwQ9u6NHzqWw9qH3TXO37vLgsEQD3KtE aT25px0yUd+OHZLhO873Yvo76b5LcBvrSad8EzNUojhANtbGBCrxMeW7P0C2yIS5oA/gH5HB6 FgcDvqMjBEnt+9S5ZPJMEg= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --- fs/ext4/ext4.h | 1 + fs/ext4/file.c | 1 + fs/ext4/ioctl.c | 60 ++++++++++++++++++++----------------------------- 3 files changed, 26 insertions(+), 36 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 37002663d521..2770f8f5da95 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -1272,6 +1272,7 @@ struct ext4_inode_info { #define ext4_find_next_bit find_next_bit_le extern void ext4_set_bits(void *bm, int cur, int len); +extern long ext4_fitrim(struct file *filp, struct fstrim_range *range); /* * Maximal mount counts between two filesystem checks diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 816dedcbd541..07bf5a0d10f2 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -927,6 +927,7 @@ const struct file_operations ext4_file_operations = { .splice_read = generic_file_splice_read, .splice_write = iter_file_splice_write, .fallocate = ext4_fallocate, + .fitrim = ext4_fitrim, }; const struct inode_operations ext4_file_inode_operations = { diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index 31627f7dc5cd..138e6128cb0c 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -800,6 +800,30 @@ static int ext4_ioctl_get_es_cache(struct file *filp, unsigned long arg) return error; } +long ext4_fitrim(struct file *filp, struct fstrim_range *range) +{ + struct request_queue *q = bdev_get_queue(sb->s_bdev); + int ret = 0; + + if (!blk_queue_discard(q)) + return -EOPNOTSUPP; + + /* + * We haven't replayed the journal, so we cannot use our + * block-bitmap-guided storage zapping commands. + */ + if (test_opt(sb, NOLOAD) && ext4_has_feature_journal(sb)) + return -EROFS; + + range->minlen = max((unsigned int)range->minlen, + q->limits.discard_granularity); + ret = ext4_trim_fs(sb, range); + if (ret < 0) + return ret; + + return 0; +} + static long __ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct inode *inode = file_inode(filp); @@ -1044,41 +1068,6 @@ static long __ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) return err; } - case FITRIM: - { - struct request_queue *q = bdev_get_queue(sb->s_bdev); - struct fstrim_range range; - int ret = 0; - - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - if (!blk_queue_discard(q)) - return -EOPNOTSUPP; - - /* - * We haven't replayed the journal, so we cannot use our - * block-bitmap-guided storage zapping commands. - */ - if (test_opt(sb, NOLOAD) && ext4_has_feature_journal(sb)) - return -EROFS; - - if (copy_from_user(&range, (struct fstrim_range __user *)arg, - sizeof(range))) - return -EFAULT; - - range.minlen = max((unsigned int)range.minlen, - q->limits.discard_granularity); - ret = ext4_trim_fs(sb, &range); - if (ret < 0) - return ret; - - if (copy_to_user((struct fstrim_range __user *)arg, &range, - sizeof(range))) - return -EFAULT; - - return 0; - } case EXT4_IOC_PRECACHE_EXTENTS: return ext4_ext_precache(inode); @@ -1272,7 +1261,6 @@ long ext4_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) } case EXT4_IOC_MOVE_EXT: case EXT4_IOC_RESIZE_FS: - case FITRIM: case EXT4_IOC_PRECACHE_EXTENTS: case FS_IOC_SET_ENCRYPTION_POLICY: case FS_IOC_GET_ENCRYPTION_PWSALT: -- 2.20.1