From nobody Sun Apr 19 12:12:56 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4F029C433EF for ; Fri, 1 Jul 2022 13:09:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236183AbiGANJy (ORCPT ); Fri, 1 Jul 2022 09:09:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38260 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230291AbiGANJv (ORCPT ); Fri, 1 Jul 2022 09:09:51 -0400 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6A81B62FD; Fri, 1 Jul 2022 06:09:48 -0700 (PDT) Received: from dlg2.mail.paragon-software.com (vdlg-exch-02.paragon-software.com [172.30.1.105]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id E095621B4; Fri, 1 Jul 2022 13:08:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1656680929; bh=wiDeM+XRrwA5/U5QVEV7KWqJSki1m26BRivbZ581EWI=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=eNqXwrX0yHLY8RBBgMwYVrJn4CpNuXmoNwqaL8/eopdArXljmFl/U35NnjZfmkUHB zEw74duTwrOrHgsVGTSJYKVsLNU5Mkpdy3F7Vaga6/mC8j8BNtGnMVsJyq22z7E1dl XTZpegwWd4h1nNz1H0mABfS/Iy+QPzipeyzCQNM0= Received: from [172.30.8.65] (172.30.8.65) by vdlg-exch-02.paragon-software.com (172.30.1.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Fri, 1 Jul 2022 16:09:45 +0300 Message-ID: <011fda2c-3717-b429-dc87-0f1471a735d5@paragon-software.com> Date: Fri, 1 Jul 2022 16:09:45 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: [PATCH 1/5] fs/ntfs3: Fix very fragmented case in attr_punch_hole Content-Language: en-US From: Konstantin Komarov To: CC: , References: <34e58f6e-e508-4ad8-6941-37281ea7d3ef@paragon-software.com> In-Reply-To: <34e58f6e-e508-4ad8-6941-37281ea7d3ef@paragon-software.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [172.30.8.65] X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8"; format="flowed" In some cases we need to ni_find_attr attr_b Signed-off-by: Konstantin Komarov --- fs/ntfs3/attrib.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/fs/ntfs3/attrib.c b/fs/ntfs3/attrib.c index 59d8f482ef0a..43b9482f9830 100644 --- a/fs/ntfs3/attrib.c +++ b/fs/ntfs3/attrib.c @@ -2054,6 +2054,7 @@ int attr_punch_hole(struct ntfs_inode *ni, u64 vbo, u= 64 bytes, u32 *frame_size) if (err) goto out; /* Layout of records maybe changed. */ + attr_b =3D NULL; } } /* Free all allocated memory. */ @@ -2073,6 +2074,14 @@ int attr_punch_hole(struct ntfs_inode *ni, u64 vbo, = u64 bytes, u32 *frame_size) } =20 total_size -=3D (u64)dealloc << sbi->cluster_bits; + if (!attr_b) { + attr_b =3D ni_find_attr(ni, NULL, NULL, ATTR_DATA, NULL, 0, NULL, + &mi_b); + if (!attr_b) { + err =3D -EINVAL; + goto out; + } + } attr_b->nres.total_size =3D cpu_to_le64(total_size); mi_b->dirty =3D true; =20 @@ -2083,8 +2092,10 @@ int attr_punch_hole(struct ntfs_inode *ni, u64 vbo, = u64 bytes, u32 *frame_size) =20 out: up_write(&ni->file.run_lock); - if (err) + if (err) { + ntfs_set_state(sbi, NTFS_DIRTY_ERROR); make_bad_inode(&ni->vfs_inode); + } =20 return err; } --=20 2.37.0 From nobody Sun Apr 19 12:12:56 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3602DC433EF for ; Fri, 1 Jul 2022 13:10:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236240AbiGANKq (ORCPT ); Fri, 1 Jul 2022 09:10:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39086 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236285AbiGANKh (ORCPT ); Fri, 1 Jul 2022 09:10:37 -0400 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0C5BF4D15E; Fri, 1 Jul 2022 06:10:22 -0700 (PDT) Received: from relayfre-01.paragon-software.com (unknown [172.30.72.12]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id A853121B4; Fri, 1 Jul 2022 13:09:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1656680963; bh=QymskdUxmtYvCWPe6xq2ac+1PvUu1V55rQESiccO/D8=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=ZqFjY48F0MKslwfHNRSope6R4mH8AQ9wXw1K3hddiBLEvDTcsLC0RF2Guktvv6w6j oN02yrHz4BXUjS0N4eli1PPYjfpJIZel/lJ7vFJ8rs7gfMgXFHNUpaHp7/7C6M0aTj bAPWblzAehTkCBadJ3a0dPTUmtjuHS70QVieUSbY= Received: from dlg2.mail.paragon-software.com (vdlg-exch-02.paragon-software.com [172.30.1.105]) by relayfre-01.paragon-software.com (Postfix) with ESMTPS id 019CD21B8; Fri, 1 Jul 2022 13:10:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1656681021; bh=QymskdUxmtYvCWPe6xq2ac+1PvUu1V55rQESiccO/D8=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=VO/A+6+0knqMEHIFux3x00SfQeDIfyS8CVbh5RfEV4JESkarCxqILEuZa8bQ80qj0 Knq5WtI4rVEfsuqAvTrYXaO2Lml4FBG/87sm8YMRo+0focoXjW7Gy48urxLC2Q2K0n rx4HGGbM0Ok84fMhQG28ezq4d+3/HJXgZvZapAW0= Received: from [172.30.8.65] (172.30.8.65) by vdlg-exch-02.paragon-software.com (172.30.1.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Fri, 1 Jul 2022 16:10:20 +0300 Message-ID: Date: Fri, 1 Jul 2022 16:10:20 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: [PATCH 2/5] fs/ntfs3: Remove unused mi_mark_free Content-Language: en-US From: Konstantin Komarov To: CC: , References: <34e58f6e-e508-4ad8-6941-37281ea7d3ef@paragon-software.com> In-Reply-To: <34e58f6e-e508-4ad8-6941-37281ea7d3ef@paragon-software.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [172.30.8.65] X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8"; format="flowed" Cleaning up dead code Fix wrong comments Signed-off-by: Konstantin Komarov --- fs/ntfs3/namei.c | 2 +- fs/ntfs3/ntfs_fs.h | 1 - fs/ntfs3/record.c | 22 ---------------------- fs/ntfs3/super.c | 2 +- 4 files changed, 2 insertions(+), 25 deletions(-) diff --git a/fs/ntfs3/namei.c b/fs/ntfs3/namei.c index bc741213ad84..1cc700760c7e 100644 --- a/fs/ntfs3/namei.c +++ b/fs/ntfs3/namei.c @@ -208,7 +208,7 @@ static int ntfs_mkdir(struct user_namespace *mnt_userns= , struct inode *dir, } =20 /* - * ntfs_rmdir - inode_operations::rm_dir + * ntfs_rmdir - inode_operations::rmdir */ static int ntfs_rmdir(struct inode *dir, struct dentry *dentry) { diff --git a/fs/ntfs3/ntfs_fs.h b/fs/ntfs3/ntfs_fs.h index 2bc6563601d7..ebe4a8ecc20d 100644 --- a/fs/ntfs3/ntfs_fs.h +++ b/fs/ntfs3/ntfs_fs.h @@ -734,7 +734,6 @@ static inline struct ATTRIB *rec_find_attr_le(struct mf= t_inode *rec, int mi_write(struct mft_inode *mi, int wait); int mi_format_new(struct mft_inode *mi, struct ntfs_sb_info *sbi, CLST rn= o, __le16 flags, bool is_mft); -void mi_mark_free(struct mft_inode *mi); struct ATTRIB *mi_insert_attr(struct mft_inode *mi, enum ATTR_TYPE type, const __le16 *name, u8 name_len, u32 asize, u16 name_off); diff --git a/fs/ntfs3/record.c b/fs/ntfs3/record.c index 8fe0a876400a..7d2fac5ee215 100644 --- a/fs/ntfs3/record.c +++ b/fs/ntfs3/record.c @@ -394,28 +394,6 @@ int mi_format_new(struct mft_inode *mi, struct ntfs_sb= _info *sbi, CLST rno, return err; } =20 -/* - * mi_mark_free - Mark record as unused and marks it as free in bitmap. - */ -void mi_mark_free(struct mft_inode *mi) -{ - CLST rno =3D mi->rno; - struct ntfs_sb_info *sbi =3D mi->sbi; - - if (rno >=3D MFT_REC_RESERVED && rno < MFT_REC_FREE) { - ntfs_clear_mft_tail(sbi, rno, rno + 1); - mi->dirty =3D false; - return; - } - - if (mi->mrec) { - clear_rec_inuse(mi->mrec); - mi->dirty =3D true; - mi_write(mi, 0); - } - ntfs_mark_rec_free(sbi, rno); -} - /* * mi_insert_attr - Reserve space for new attribute. * diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c index 4b0dad2ac598..eacea72ff92f 100644 --- a/fs/ntfs3/super.c +++ b/fs/ntfs3/super.c @@ -1377,7 +1377,7 @@ static const struct fs_context_operations ntfs_contex= t_ops =3D { /* * ntfs_init_fs_context - Initialize spi and opts * - * This will called when mount/remount. We will first initiliaze + * This will called when mount/remount. We will first initialize * options so that if remount we can use just that. */ static int ntfs_init_fs_context(struct fs_context *fc) --=20 2.37.0 From nobody Sun Apr 19 12:12:56 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91F8BC433EF for ; Fri, 1 Jul 2022 13:11:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236338AbiGANLd (ORCPT ); Fri, 1 Jul 2022 09:11:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236227AbiGANL2 (ORCPT ); Fri, 1 Jul 2022 09:11:28 -0400 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DEAA564F4; Fri, 1 Jul 2022 06:11:12 -0700 (PDT) Received: from dlg2.mail.paragon-software.com (vdlg-exch-02.paragon-software.com [172.30.1.105]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id 213BD21B4; Fri, 1 Jul 2022 13:09:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1656680993; bh=EjlWxm79lVaiCmeyrgDYpsSvzCOyXg3FUYILHL91If0=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=Mf0etTJWXkZEsLpA50TR3ZaEOPTOXYLSdR+opcdH/02tvEa7CtfOnRmb/wmVB/zTr f3UwElSgjMFwecLnPk1AjXV5cr6sw3ivv1wLqUIBkvB20mIuNeH5zMiHTiOzl2Hk8a YLuSAIanH9qEB9nWkLBiNaCbupoVr5Tk+6LACdYk= Received: from [172.30.8.65] (172.30.8.65) by vdlg-exch-02.paragon-software.com (172.30.1.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Fri, 1 Jul 2022 16:10:50 +0300 Message-ID: <653b1628-074c-82a6-9926-d793bbcb031b@paragon-software.com> Date: Fri, 1 Jul 2022 16:10:49 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: [PATCH 3/5] fs/ntfs3: Add new argument is_mft to ntfs_mark_rec_free Content-Language: en-US From: Konstantin Komarov To: CC: , References: <34e58f6e-e508-4ad8-6941-37281ea7d3ef@paragon-software.com> In-Reply-To: <34e58f6e-e508-4ad8-6941-37281ea7d3ef@paragon-software.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [172.30.8.65] X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8"; format="flowed" This argument helps in avoiding double locking Signed-off-by: Konstantin Komarov --- fs/ntfs3/frecord.c | 12 ++++++------ fs/ntfs3/fsntfs.c | 9 ++++++--- fs/ntfs3/inode.c | 2 +- fs/ntfs3/ntfs_fs.h | 2 +- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c index 64041152fd98..756d9a18fa00 100644 --- a/fs/ntfs3/frecord.c +++ b/fs/ntfs3/frecord.c @@ -1048,7 +1048,7 @@ static int ni_ins_attr_ext(struct ntfs_inode *ni, str= uct ATTR_LIST_ENTRY *le, err =3D -EINVAL; =20 out1: - ntfs_mark_rec_free(sbi, rno); + ntfs_mark_rec_free(sbi, rno, is_mft); =20 out: return err; @@ -1243,7 +1243,7 @@ static int ni_expand_mft_list(struct ntfs_inode *ni) mft_min =3D mft_new; mi_min =3D mi_new; } else { - ntfs_mark_rec_free(sbi, mft_new); + ntfs_mark_rec_free(sbi, mft_new, true); mft_new =3D 0; ni_remove_mi(ni, mi_new); } @@ -1326,7 +1326,7 @@ static int ni_expand_mft_list(struct ntfs_inode *ni) =20 out: if (mft_new) { - ntfs_mark_rec_free(sbi, mft_new); + ntfs_mark_rec_free(sbi, mft_new, true); ni_remove_mi(ni, mi_new); } =20 @@ -1585,7 +1585,7 @@ int ni_delete_all(struct ntfs_inode *ni) mi->dirty =3D true; mi_write(mi, 0); =20 - ntfs_mark_rec_free(sbi, mi->rno); + ntfs_mark_rec_free(sbi, mi->rno, false); ni_remove_mi(ni, mi); mi_put(mi); node =3D next; @@ -1596,7 +1596,7 @@ int ni_delete_all(struct ntfs_inode *ni) ni->mi.dirty =3D true; err =3D mi_write(&ni->mi, 0); =20 - ntfs_mark_rec_free(sbi, ni->mi.rno); + ntfs_mark_rec_free(sbi, ni->mi.rno, false); =20 return err; } @@ -3286,7 +3286,7 @@ int ni_write_inode(struct inode *inode, int sync, con= st char *hint) err =3D err2; =20 if (is_empty) { - ntfs_mark_rec_free(sbi, mi->rno); + ntfs_mark_rec_free(sbi, mi->rno, false); rb_erase(node, &ni->mi_tree); mi_put(mi); } diff --git a/fs/ntfs3/fsntfs.c b/fs/ntfs3/fsntfs.c index 3de5700a9b83..c53dd4c9e47b 100644 --- a/fs/ntfs3/fsntfs.c +++ b/fs/ntfs3/fsntfs.c @@ -703,12 +703,14 @@ int ntfs_look_free_mft(struct ntfs_sb_info *sbi, CLST= *rno, bool mft, =20 /* * ntfs_mark_rec_free - Mark record as free. + * is_mft - true if we are changing MFT */ -void ntfs_mark_rec_free(struct ntfs_sb_info *sbi, CLST rno) +void ntfs_mark_rec_free(struct ntfs_sb_info *sbi, CLST rno, bool is_mft) { struct wnd_bitmap *wnd =3D &sbi->mft.bitmap; =20 - down_write_nested(&wnd->rw_lock, BITMAP_MUTEX_MFT); + if (!is_mft) + down_write_nested(&wnd->rw_lock, BITMAP_MUTEX_MFT); if (rno >=3D wnd->nbits) goto out; =20 @@ -727,7 +729,8 @@ void ntfs_mark_rec_free(struct ntfs_sb_info *sbi, CLST = rno) sbi->mft.next_free =3D rno; =20 out: - up_write(&wnd->rw_lock); + if (!is_mft) + up_write(&wnd->rw_lock); } =20 /* diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index 6c78930be035..a49da4ec6dc3 100644 --- a/fs/ntfs3/inode.c +++ b/fs/ntfs3/inode.c @@ -1636,7 +1636,7 @@ struct inode *ntfs_create_inode(struct user_namespace= *mnt_userns, ni->mi.dirty =3D false; discard_new_inode(inode); out3: - ntfs_mark_rec_free(sbi, ino); + ntfs_mark_rec_free(sbi, ino, false); =20 out2: __putname(new_de); diff --git a/fs/ntfs3/ntfs_fs.h b/fs/ntfs3/ntfs_fs.h index ebe4a8ecc20d..5472cde2aa5f 100644 --- a/fs/ntfs3/ntfs_fs.h +++ b/fs/ntfs3/ntfs_fs.h @@ -590,7 +590,7 @@ int ntfs_look_for_free_space(struct ntfs_sb_info *sbi, = CLST lcn, CLST len, enum ALLOCATE_OPT opt); int ntfs_look_free_mft(struct ntfs_sb_info *sbi, CLST *rno, bool mft, struct ntfs_inode *ni, struct mft_inode **mi); -void ntfs_mark_rec_free(struct ntfs_sb_info *sbi, CLST rno); +void ntfs_mark_rec_free(struct ntfs_sb_info *sbi, CLST rno, bool is_mft); int ntfs_clear_mft_tail(struct ntfs_sb_info *sbi, size_t from, size_t to); int ntfs_refresh_zone(struct ntfs_sb_info *sbi); int ntfs_update_mftmirr(struct ntfs_sb_info *sbi, int wait); --=20 2.37.0 From nobody Sun Apr 19 12:12:56 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5F5A6CCA479 for ; Fri, 1 Jul 2022 13:11:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236519AbiGANLt (ORCPT ); Fri, 1 Jul 2022 09:11:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236477AbiGANLl (ORCPT ); Fri, 1 Jul 2022 09:11:41 -0400 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9C79D5925C; Fri, 1 Jul 2022 06:11:26 -0700 (PDT) Received: from relayfre-01.paragon-software.com (unknown [172.30.72.12]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id 7254221B5; Fri, 1 Jul 2022 13:10:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1656681016; bh=02KihnYdaZm2ncpfXa/zdWa/4dUMAjXhtcspmqZ/iQc=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=mP4lTzPxF70rg8R7AaoBiR2jL2xAFAY+/6mtWP6oh7IKcqR5wLOJ1idZf5Zjh8i7L OfBAp92Ofh+91lXT/L+ZGvnA37YVn15fwKKQtETHQylGpHDbegufSUGpnQi94rQqQO jLkzOUXZNqufZbc7pstGHzmk0s+QpPwIQHpIFB+8= Received: from dlg2.mail.paragon-software.com (vdlg-exch-02.paragon-software.com [172.30.1.105]) by relayfre-01.paragon-software.com (Postfix) with ESMTPS id B8B4B21B8; Fri, 1 Jul 2022 13:11:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1656681073; bh=02KihnYdaZm2ncpfXa/zdWa/4dUMAjXhtcspmqZ/iQc=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=KvvpoADQyImOQM7pjCEgEWkZjUezYYwliAyAPGCu8BtmjposgJNA2ewq3EaCC1hoT 3FdOOzUXW1bxub9Da494xDQIpwT9QprpJReI3d5nZmt5+39xQcH9qTwVzPntRj8JrD xi89KWLZyPirofVKtghKw0441ycBJA7XABOgKoeE= Received: from [172.30.8.65] (172.30.8.65) by vdlg-exch-02.paragon-software.com (172.30.1.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Fri, 1 Jul 2022 16:11:13 +0300 Message-ID: <5ddc83fd-5e98-d66a-91c2-afb8a037ebb6@paragon-software.com> Date: Fri, 1 Jul 2022 16:11:12 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: [PATCH 4/5] fs/ntfs3: Make static function attr_load_runs Content-Language: en-US From: Konstantin Komarov To: CC: , References: <34e58f6e-e508-4ad8-6941-37281ea7d3ef@paragon-software.com> In-Reply-To: <34e58f6e-e508-4ad8-6941-37281ea7d3ef@paragon-software.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [172.30.8.65] X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8"; format="flowed" attr_load_runs is an internal function Signed-off-by: Konstantin Komarov --- fs/ntfs3/attrib.c | 4 ++-- fs/ntfs3/ntfs_fs.h | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/fs/ntfs3/attrib.c b/fs/ntfs3/attrib.c index 43b9482f9830..68a210bb54fe 100644 --- a/fs/ntfs3/attrib.c +++ b/fs/ntfs3/attrib.c @@ -84,8 +84,8 @@ static inline bool attr_must_be_resident(struct ntfs_sb_i= nfo *sbi, /* * attr_load_runs - Load all runs stored in @attr. */ -int attr_load_runs(struct ATTRIB *attr, struct ntfs_inode *ni, - struct runs_tree *run, const CLST *vcn) +static int attr_load_runs(struct ATTRIB *attr, struct ntfs_inode *ni, + struct runs_tree *run, const CLST *vcn) { int err; CLST svcn =3D le64_to_cpu(attr->nres.svcn); diff --git a/fs/ntfs3/ntfs_fs.h b/fs/ntfs3/ntfs_fs.h index 5472cde2aa5f..b88721e48458 100644 --- a/fs/ntfs3/ntfs_fs.h +++ b/fs/ntfs3/ntfs_fs.h @@ -408,8 +408,6 @@ enum REPARSE_SIGN { }; =20 /* Functions from attrib.c */ -int attr_load_runs(struct ATTRIB *attr, struct ntfs_inode *ni, - struct runs_tree *run, const CLST *vcn); int attr_allocate_clusters(struct ntfs_sb_info *sbi, struct runs_tree *ru= n, CLST vcn, CLST lcn, CLST len, CLST *pre_alloc, enum ALLOCATE_OPT opt, CLST *alen, const size_t fr, --=20 2.37.0 From nobody Sun Apr 19 12:12:56 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41D9CC433EF for ; Fri, 1 Jul 2022 13:12:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236540AbiGANMA (ORCPT ); Fri, 1 Jul 2022 09:12:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236628AbiGANLo (ORCPT ); Fri, 1 Jul 2022 09:11:44 -0400 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1AAC753EFE; Fri, 1 Jul 2022 06:11:38 -0700 (PDT) Received: from dlg2.mail.paragon-software.com (vdlg-exch-02.paragon-software.com [172.30.1.105]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id 36DD021B5; Fri, 1 Jul 2022 13:10:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1656681039; bh=MdqLvxK34KSjRpWbcAm/crlXqAnDbqvWCj9YKSA+ccI=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=kEdPregi4Z795XuRO3VVB3tCcSIpidTXAFuD8eJjs3945Lhbu+IGBDPj1lKiOUD7K bcsBEjY3E0POIKUbt0KwA7MMijL9ZGtRPxR0CwGfmQOcp308qE0cm5IoVhFdhl2cmm 2iewuqxKubcvUsg6+d/wpaGKB7tj57pPvmkEJgJI= Received: from [172.30.8.65] (172.30.8.65) by vdlg-exch-02.paragon-software.com (172.30.1.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Fri, 1 Jul 2022 16:11:36 +0300 Message-ID: <02302c1c-d188-c326-7bad-1b2a2e7f9a15@paragon-software.com> Date: Fri, 1 Jul 2022 16:11:35 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: [PATCH 5/5] fs/ntfs3: Fill duplicate info in ni_add_name Content-Language: en-US From: Konstantin Komarov To: CC: , References: <34e58f6e-e508-4ad8-6941-37281ea7d3ef@paragon-software.com> In-Reply-To: <34e58f6e-e508-4ad8-6941-37281ea7d3ef@paragon-software.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [172.30.8.65] X-ClientProxiedBy: vobn-exch-01.paragon-software.com (172.30.72.13) To vdlg-exch-02.paragon-software.com (172.30.1.105) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8"; format="flowed" Work with names must be completed in ni_add_name Signed-off-by: Konstantin Komarov --- fs/ntfs3/frecord.c | 20 ++++++++++++++------ fs/ntfs3/inode.c | 10 ---------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c index 756d9a18fa00..acd9f444bd64 100644 --- a/fs/ntfs3/frecord.c +++ b/fs/ntfs3/frecord.c @@ -1614,7 +1614,8 @@ struct ATTR_FILE_NAME *ni_fname_name(struct ntfs_inod= e *ni, struct ATTRIB *attr =3D NULL; struct ATTR_FILE_NAME *fname; =20 - *le =3D NULL; + if (le) + *le =3D NULL; =20 /* Enumerate all names. */ next: @@ -1630,7 +1631,7 @@ struct ATTR_FILE_NAME *ni_fname_name(struct ntfs_inod= e *ni, goto next; =20 if (!uni) - goto next; + return fname; =20 if (uni->len !=3D fname->name_len) goto next; @@ -2969,7 +2970,7 @@ bool ni_remove_name_undo(struct ntfs_inode *dir_ni, s= truct ntfs_inode *ni, } =20 /* - * ni_add_name - Add new name in MFT and in directory. + * ni_add_name - Add new name into MFT and into directory. */ int ni_add_name(struct ntfs_inode *dir_ni, struct ntfs_inode *ni, struct NTFS_DE *de) @@ -2978,13 +2979,20 @@ int ni_add_name(struct ntfs_inode *dir_ni, struct n= tfs_inode *ni, struct ATTRIB *attr; struct ATTR_LIST_ENTRY *le; struct mft_inode *mi; + struct ATTR_FILE_NAME *fname; struct ATTR_FILE_NAME *de_name =3D (struct ATTR_FILE_NAME *)(de + 1); u16 de_key_size =3D le16_to_cpu(de->key_size); =20 mi_get_ref(&ni->mi, &de->ref); mi_get_ref(&dir_ni->mi, &de_name->home); =20 - /* Insert new name in MFT. */ + /* Fill duplicate from any ATTR_NAME. */ + fname =3D ni_fname_name(ni, NULL, NULL, NULL, NULL); + if (fname) + memcpy(&de_name->dup, &fname->dup, sizeof(fname->dup)); + de_name->dup.fa =3D ni->std_fa; + + /* Insert new name into MFT. */ err =3D ni_insert_resident(ni, de_key_size, ATTR_NAME, NULL, 0, &attr, &mi, &le); if (err) @@ -2992,7 +3000,7 @@ int ni_add_name(struct ntfs_inode *dir_ni, struct ntf= s_inode *ni, =20 memcpy(Add2Ptr(attr, SIZEOF_RESIDENT), de_name, de_key_size); =20 - /* Insert new name in directory. */ + /* Insert new name into directory. */ err =3D indx_insert_entry(&dir_ni->dir, dir_ni, de, ni->mi.sbi, NULL, 0); if (err) ni_remove_attr_le(ni, attr, mi, le); @@ -3016,7 +3024,7 @@ int ni_rename(struct ntfs_inode *dir_ni, struct ntfs_= inode *new_dir_ni, * 1) Add new name and remove old name. * 2) Remove old name and add new name. * - * In most cases (not all!) adding new name in MFT and in directory can + * In most cases (not all!) adding new name into MFT and into directory c= an * allocate additional cluster(s). * Second way may result to bad inode if we can't add new name * and then can't restore (add) old name. diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index a49da4ec6dc3..3ed319663747 100644 --- a/fs/ntfs3/inode.c +++ b/fs/ntfs3/inode.c @@ -1659,7 +1659,6 @@ int ntfs_link_inode(struct inode *inode, struct dentr= y *dentry) struct ntfs_inode *ni =3D ntfs_i(inode); struct ntfs_sb_info *sbi =3D inode->i_sb->s_fs_info; struct NTFS_DE *de; - struct ATTR_FILE_NAME *de_name; =20 /* Allocate PATH_MAX bytes. */ de =3D __getname(); @@ -1674,15 +1673,6 @@ int ntfs_link_inode(struct inode *inode, struct dent= ry *dentry) if (err) goto out; =20 - de_name =3D (struct ATTR_FILE_NAME *)(de + 1); - /* Fill duplicate info. */ - de_name->dup.cr_time =3D de_name->dup.m_time =3D de_name->dup.c_time =3D - de_name->dup.a_time =3D kernel2nt(&inode->i_ctime); - de_name->dup.alloc_size =3D de_name->dup.data_size =3D - cpu_to_le64(inode->i_size); - de_name->dup.fa =3D ni->std_fa; - de_name->dup.ea_size =3D de_name->dup.reparse =3D 0; - err =3D ni_add_name(ntfs_i(d_inode(dentry->d_parent)), ni, de); out: __putname(de); --=20 2.37.0