From nobody Fri Sep 12 00:15:36 2025 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 1B2C6C636CC for ; Wed, 15 Feb 2023 13:39:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231359AbjBONjj (ORCPT ); Wed, 15 Feb 2023 08:39:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57056 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230422AbjBONjg (ORCPT ); Wed, 15 Feb 2023 08:39:36 -0500 Received: from relayaws-01.paragon-software.com (relayaws-01.paragon-software.com [35.157.23.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E0F2B17176; Wed, 15 Feb 2023 05:39:31 -0800 (PST) Received: from relayfre-01.paragon-software.com (unknown [172.30.72.12]) by relayaws-01.paragon-software.com (Postfix) with ESMTPS id 7BA172147; Wed, 15 Feb 2023 13:35:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1676468119; bh=9wqkiqZrKzwvHdcnP28A5rK4lq/9iHl1Vg0imvVpMVU=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=Ia28Fr2nrEgu9o91Mm/j9Nk0suXbvwp5Ungw2+T/I62WuyZZxsRQYsnbeJiKDIZkW s4cSvy0NEpsRforX3ljS87lVdtjOtEH+KjpMTa7ooJPW4ynlFlPGtyalELiiKnyHXk r87EWCdPsPnKLCvtgLVFqJFdD1lD6AQeBn7g/MKQ= 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 C6A9D1E70; Wed, 15 Feb 2023 13:39:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=paragon-software.com; s=mail; t=1676468369; bh=9wqkiqZrKzwvHdcnP28A5rK4lq/9iHl1Vg0imvVpMVU=; h=Date:Subject:From:To:CC:References:In-Reply-To; b=qbEqalBfsq1XbhHoWk3MYbtRL3DCq2NLl4F+AkuHeQuHIQwYHaCas/wWEdDf0HIix 5SKMBWL2yHYWeH2Nq2328+9MD13m3JR7mmtLIy/QCwvRJTCgKxKXxO4vPsxFlb325y qFSbRK3JZpOHCfeEJFOHqoEBerOYdXP8LEW6YsE8= Received: from [192.168.211.36] (192.168.211.36) 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; Wed, 15 Feb 2023 16:39:29 +0300 Message-ID: <83fcdf79-dbb0-e693-cc66-877f3bb22eac@paragon-software.com> Date: Wed, 15 Feb 2023 17:39:28 +0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Subject: [PATCH 09/11] fs/ntfs3: Code formatting and refactoring Content-Language: en-US From: Konstantin Komarov To: CC: Linux Kernel Mailing List , References: In-Reply-To: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [192.168.211.36] X-ClientProxiedBy: vdlg-exch-02.paragon-software.com (172.30.1.105) To vdlg-exch-02.paragon-software.com (172.30.1.105) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Added minor refactoring. Added and fixed some comments. In some places, the code has been reformatted to fit into 80 columns. clang-format-12 was used to format code according kernel's .clang-format. Signed-off-by: Konstantin Komarov --- =C2=A0fs/ntfs3/attrib.c=C2=A0 | 17 +++++----- =C2=A0fs/ntfs3/bitmap.c=C2=A0 | 22 ++++++------- =C2=A0fs/ntfs3/file.c=C2=A0=C2=A0=C2=A0 | 25 ++++++++------- =C2=A0fs/ntfs3/frecord.c | 37 ++++++++++------------ =C2=A0fs/ntfs3/fslog.c=C2=A0=C2=A0 | 77 +++++++++++++++++++++++-----------= ------------ =C2=A0fs/ntfs3/fsntfs.c=C2=A0 | 13 ++++---- =C2=A0fs/ntfs3/index.c=C2=A0=C2=A0 | 28 +++++++++-------- =C2=A0fs/ntfs3/inode.c=C2=A0=C2=A0 | 33 ++++++++++---------- =C2=A0fs/ntfs3/lznt.c=C2=A0=C2=A0=C2=A0 | 10 +++--- =C2=A0fs/ntfs3/namei.c=C2=A0=C2=A0 |=C2=A0 4 +-- =C2=A0fs/ntfs3/ntfs_fs.h |=C2=A0 9 +++--- =C2=A0fs/ntfs3/record.c=C2=A0 |=C2=A0 9 +++--- =C2=A0fs/ntfs3/run.c=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 6 ++-- =C2=A0fs/ntfs3/super.c=C2=A0=C2=A0 | 70 ++++++++++++++++++++++------------= ------- =C2=A0fs/ntfs3/xattr.c=C2=A0=C2=A0 |=C2=A0 4 +-- =C2=A015 files changed, 186 insertions(+), 178 deletions(-) diff --git a/fs/ntfs3/attrib.c b/fs/ntfs3/attrib.c index 5e6bafb10f42..0b8bc66377db 100644 --- a/fs/ntfs3/attrib.c +++ b/fs/ntfs3/attrib.c @@ -405,8 +405,8 @@ int attr_set_size(struct ntfs_inode *ni, enum=20 ATTR_TYPE type, =C2=A0=C2=A0=C2=A0 =C2=A0int err =3D 0; =C2=A0=C2=A0=C2=A0 =C2=A0struct ntfs_sb_info *sbi =3D ni->mi.sbi; =C2=A0=C2=A0=C2=A0 =C2=A0u8 cluster_bits =3D sbi->cluster_bits; -=C2=A0=C2=A0 =C2=A0bool is_mft =3D -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni->mi.rno =3D=3D MFT_REC_MFT && typ= e =3D=3D ATTR_DATA && !name_len; +=C2=A0=C2=A0 =C2=A0bool is_mft =3D ni->mi.rno =3D=3D MFT_REC_MFT && type = =3D=3D ATTR_DATA && +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 !name= _len; =C2=A0=C2=A0=C2=A0 =C2=A0u64 old_valid, old_size, old_alloc, new_alloc, ne= w_alloc_tmp; =C2=A0=C2=A0=C2=A0 =C2=A0struct ATTRIB *attr =3D NULL, *attr_b; =C2=A0=C2=A0=C2=A0 =C2=A0struct ATTR_LIST_ENTRY *le, *le_b; @@ -531,11 +531,10 @@ int attr_set_size(struct ntfs_inode *ni, enum=20 ATTR_TYPE type, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0pre_alloc = =3D 0; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (type = =3D=3D ATTR_DATA && !name_len && =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0=C2=A0 sbi->options->prealloc) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0pre_alloc =3D -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0bytes_to_cluster( -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0sbi, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0get_pre_allocated(new_size)) - -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0new_alen; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0pre_alloc =3D bytes_to_cluster( +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 sbi, get_pre_al= located( +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 = =C2=A0 new_size)) - +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 new_alen; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* Get the = last LCN to allocate from. */ @@ -573,8 +572,8 @@ int attr_set_size(struct ntfs_inode *ni, enum=20 ATTR_TYPE type, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D att= r_allocate_clusters( =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0sbi, run, vcn, lcn, to_allocate, &pre_alloc, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0is_mft ? ALLOCATE_MFT : ALLOCATE_DEF, &alen, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0is_mft ? 0 -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 : (sbi->record_size - +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0is_mft ? 0 : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (sbi->record_siz= e - =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 le32_to_cpu(rec->used) + 8) / =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 3 + =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 1, diff --git a/fs/ntfs3/bitmap.c b/fs/ntfs3/bitmap.c index 393c726ef17a..9a6c6a09d70c 100644 --- a/fs/ntfs3/bitmap.c +++ b/fs/ntfs3/bitmap.c @@ -40,9 +40,9 @@ static struct kmem_cache *ntfs_enode_cachep; =C2=A0int __init ntfs3_init_bitmap(void) =C2=A0{ -=C2=A0=C2=A0 =C2=A0ntfs_enode_cachep =3D -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0kmem_cache_create("ntfs3_enode_cache= ", sizeof(struct e_node), 0, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0 SLAB_RECLAIM_ACCOUNT, NULL); +=C2=A0=C2=A0 =C2=A0ntfs_enode_cachep =3D kmem_cache_create("ntfs3_enode_ca= che", +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof(struct e_node),= 0, +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SLAB_RECLAIM_ACCOUNT, = NULL); =C2=A0=C2=A0=C2=A0 =C2=A0return ntfs_enode_cachep ? 0 : -ENOMEM; =C2=A0} @@ -286,9 +286,9 @@ static void wnd_add_free_ext(struct wnd_bitmap *wnd,=20 size_t bit, size_t len, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (wnd->uptodated !=3D 1) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* Check bi= ts before 'bit'. */ =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ib =3D wnd-= >zone_bit =3D=3D wnd->zone_end || -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bit < wnd->zone_end -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ? 0 -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 : wnd->zone_end; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bit < wnd->zone_end ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 0 : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 wnd->zone_end; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0while (bit = > ib && wnd_is_free_hlp(wnd, bit - 1, 1)) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0bit -=3D 1; @@ -297,9 +297,9 @@ static void wnd_add_free_ext(struct wnd_bitmap *wnd,=20 size_t bit, size_t len, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* Check bi= ts after 'end_in'. */ =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ib =3D wnd-= >zone_bit =3D=3D wnd->zone_end || -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 end_in > wnd->zone_bit -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ? wnd->nbits -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 : wnd->zone_bit; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 end_in > wnd->zone_bit ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 wnd->nbits : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 wnd->zone_bit; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0while (end_= in < ib && wnd_is_free_hlp(wnd, end_in, 1)) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0end_in +=3D 1; @@ -417,8 +417,8 @@ static void wnd_remove_free_ext(struct wnd_bitmap=20 *wnd, size_t bit, size_t len) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0n3 =3D rb_first(&wnd->count_tr= ee); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0wnd->extent_max =3D -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0n3 ? rb_entry(n3,= struct e_node, count.node)->count.key -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 : 0; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0n3 ? rb_entry(n3,= struct e_node, count.node)->count.key : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 0; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return; =C2=A0=C2=A0=C2=A0 =C2=A0} diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c index 09b7931e6be3..a10a905ec7ce 100644 --- a/fs/ntfs3/file.c +++ b/fs/ntfs3/file.c @@ -22,20 +22,21 @@ static int ntfs_ioctl_fitrim(struct ntfs_sb_info=20 *sbi, unsigned long arg) =C2=A0{ =C2=A0=C2=A0=C2=A0 =C2=A0struct fstrim_range __user *user_range; =C2=A0=C2=A0=C2=A0 =C2=A0struct fstrim_range range; +=C2=A0=C2=A0 =C2=A0struct block_device *dev; =C2=A0=C2=A0=C2=A0 =C2=A0int err; =C2=A0=C2=A0=C2=A0 =C2=A0if (!capable(CAP_SYS_ADMIN)) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -EPERM; -=C2=A0=C2=A0 =C2=A0if (!bdev_max_discard_sectors(sbi->sb->s_bdev)) +=C2=A0=C2=A0 =C2=A0dev =3D sbi->sb->s_bdev; +=C2=A0=C2=A0 =C2=A0if (!bdev_max_discard_sectors(dev)) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -EOPNOTSUPP; =C2=A0=C2=A0=C2=A0 =C2=A0user_range =3D (struct fstrim_range __user *)arg; =C2=A0=C2=A0=C2=A0 =C2=A0if (copy_from_user(&range, user_range, sizeof(ran= ge))) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -EFAULT; -=C2=A0=C2=A0 =C2=A0range.minlen =3D max_t(u32, range.minlen, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 bdev_discard_granularity(sbi->sb->s_bdev)); +=C2=A0=C2=A0 =C2=A0range.minlen =3D max_t(u32, range.minlen, bdev_discard_= granularity(dev)); =C2=A0=C2=A0=C2=A0 =C2=A0err =3D ntfs_trim_fs(sbi, &range); =C2=A0=C2=A0=C2=A0 =C2=A0if (err < 0) @@ -190,8 +191,8 @@ static int ntfs_zero_range(struct inode *inode, u64=20 vbo, u64 vbo_to) =C2=A0=C2=A0=C2=A0 =C2=A0for (; idx < idx_end; idx +=3D 1, from =3D 0) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0page_off =3D (loff_t)idx << PA= GE_SHIFT; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0to =3D (page_off + PAGE_SIZE) > vbo_= to ? (vbo_to - page_off) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 : PAGE_SI= ZE; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0to =3D (page_off + PAGE_SIZE) > vbo_= to ? (vbo_to - page_off) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 PAGE_SIZE; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0iblock =3D page_off >> inode->= i_blkbits; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0page =3D find_or_create_page(m= apping, idx, @@ -564,13 +565,14 @@ static long ntfs_fallocate(struct file *file, int=20 mode, loff_t vbo, loff_t len) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni_unlock(ni); =C2=A0=C2=A0=C2=A0 =C2=A0} else { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* Check new size. */ +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0u8 cluster_bits =3D sbi->cluster_bit= s; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* generic/213: expected -ENOS= PC instead of -EFBIG. */ =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (!is_supported_holes) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0loff_t to_a= lloc =3D new_size - inode_get_bytes(inode); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (to_allo= c > 0 && -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 (to_alloc >> sbi->cluster_bits) > +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 (to_alloc >> cluster_bits) > =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0=C2=A0 wnd_zeroes(&sbi->used.bitmap)) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0err =3D -ENOSPC; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0goto out; @@ -591,7 +593,7 @@ static long ntfs_fallocate(struct file *file, int=20 mode, loff_t vbo, loff_t len) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (is_supported_holes) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0CLST vcn =3D vbo = >> sbi->cluster_bits; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0CLST vcn =3D vbo = >> cluster_bits; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0CLST cend = =3D bytes_to_cluster(sbi, end); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0CLST cend_v= =3D bytes_to_cluster(sbi, ni->i_valid); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0CLST lcn, c= len; @@ -1049,8 +1051,8 @@ static ssize_t ntfs_file_write_iter(struct kiocb=20 *iocb, struct iov_iter *from) =C2=A0=C2=A0=C2=A0 =C2=A0if (ret) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; -=C2=A0=C2=A0 =C2=A0ret =3D is_compressed(ni) ? ntfs_compress_write(iocb, f= rom) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0: __generic_file_write_iter(iocb, from); +=C2=A0=C2=A0 =C2=A0ret =3D is_compressed(ni) ? ntfs_compress_write(iocb, f= rom) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0__generic_file_write_iter(iocb, from); =C2=A0out: =C2=A0=C2=A0=C2=A0 =C2=A0inode_unlock(inode); @@ -1102,8 +1104,9 @@ static int ntfs_file_release(struct inode *inode,=20 struct file *file) =C2=A0=C2=A0=C2=A0 =C2=A0int err =3D 0; =C2=A0=C2=A0=C2=A0 =C2=A0/* If we are last writer on the inode, drop the b= lock reservation. */ -=C2=A0=C2=A0 =C2=A0if (sbi->options->prealloc && ((file->f_mode & FMODE_WR= ITE) && -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 atomic_read(&inode->i_writecount) =3D=3D = 1)) { +=C2=A0=C2=A0 =C2=A0if (sbi->options->prealloc && +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 ((file->f_mode & FMODE_WRITE) && +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 atomic_read(&inode->i_writecou= nt) =3D=3D 1)) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni_lock(ni); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0down_write(&ni->file.run_lock); diff --git a/fs/ntfs3/frecord.c b/fs/ntfs3/frecord.c index 9e7dfee303e8..481219f2a7cf 100644 --- a/fs/ntfs3/frecord.c +++ b/fs/ntfs3/frecord.c @@ -76,8 +76,8 @@ struct ATTR_STD_INFO *ni_std(struct ntfs_inode *ni) =C2=A0=C2=A0=C2=A0 =C2=A0const struct ATTRIB *attr; =C2=A0=C2=A0=C2=A0 =C2=A0attr =3D mi_find_attr(&ni->mi, NULL, ATTR_STD, NU= LL, 0, NULL); -=C2=A0=C2=A0 =C2=A0return attr ? resident_data_ex(attr, sizeof(struct ATTR= _STD_INFO)) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 : NULL; +=C2=A0=C2=A0 =C2=A0return attr ? resident_data_ex(attr, sizeof(struct ATTR= _STD_INFO)) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 NULL; =C2=A0} =C2=A0/* @@ -91,8 +91,8 @@ struct ATTR_STD_INFO5 *ni_std5(struct ntfs_inode *ni) =C2=A0=C2=A0=C2=A0 =C2=A0attr =3D mi_find_attr(&ni->mi, NULL, ATTR_STD, NU= LL, 0, NULL); -=C2=A0=C2=A0 =C2=A0return attr ? resident_data_ex(attr, sizeof(struct ATTR= _STD_INFO5)) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 : NULL; +=C2=A0=C2=A0 =C2=A0return attr ? resident_data_ex(attr, sizeof(struct ATTR= _STD_INFO5)) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 NULL; =C2=A0} =C2=A0/* @@ -1439,8 +1439,8 @@ int ni_insert_nonresident(struct ntfs_inode *ni,=20 enum ATTR_TYPE type, =C2=A0=C2=A0=C2=A0 =C2=A0int err; =C2=A0=C2=A0=C2=A0 =C2=A0CLST plen; =C2=A0=C2=A0=C2=A0 =C2=A0struct ATTRIB *attr; -=C2=A0=C2=A0 =C2=A0bool is_ext =3D -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0(flags & (ATTR_FLAG_SPARSED | ATTR_F= LAG_COMPRESSED)) && !svcn; +=C2=A0=C2=A0 =C2=A0bool is_ext =3D (flags & (ATTR_FLAG_SPARSED | ATTR_FLAG= _COMPRESSED)) && +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 !svcn; =C2=A0=C2=A0=C2=A0 =C2=A0u32 name_size =3D ALIGN(name_len * sizeof(short),= 8); =C2=A0=C2=A0=C2=A0 =C2=A0u32 name_off =3D is_ext ? SIZEOF_NONRESIDENT_EX := SIZEOF_NONRESIDENT; =C2=A0=C2=A0=C2=A0 =C2=A0u32 run_off =3D name_off + name_size; @@ -1756,9 +1756,9 @@ int ni_new_attr_flags(struct ntfs_inode *ni, enum=20 FILE_ATTRIBUTE new_fa) =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0/* Resize nonresident empty attribute in-place on= ly. */ -=C2=A0=C2=A0 =C2=A0new_asize =3D (new_aflags & (ATTR_FLAG_COMPRESSED | ATT= R_FLAG_SPARSED)) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 ? (SIZEOF_NONRESIDENT_EX + 8) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 : (SIZEOF_NONRESIDENT + 8); +=C2=A0=C2=A0 =C2=A0new_asize =3D (new_aflags & (ATTR_FLAG_COMPRESSED | ATT= R_FLAG_SPARSED)) ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0 (SIZEOF_NONRESIDENT_EX + 8) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0 (SIZEOF_NONRESIDENT + 8); =C2=A0=C2=A0=C2=A0 =C2=A0if (!mi_resize_attr(mi, attr, new_asize - le32_to= _cpu(attr->size))) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -EOPNOTSUPP; @@ -2965,14 +2965,14 @@ bool ni_remove_name_undo(struct ntfs_inode=20 *dir_ni, struct ntfs_inode *ni, =C2=A0{ =C2=A0=C2=A0=C2=A0 =C2=A0struct ntfs_sb_info *sbi =3D ni->mi.sbi; =C2=A0=C2=A0=C2=A0 =C2=A0struct ATTRIB *attr; -=C2=A0=C2=A0 =C2=A0u16 de_key_size =3D de2 ? le16_to_cpu(de2->key_size) : = 0; +=C2=A0=C2=A0 =C2=A0u16 de_key_size; =C2=A0=C2=A0=C2=A0 =C2=A0switch (undo_step) { =C2=A0=C2=A0=C2=A0 =C2=A0case 4: +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0de_key_size =3D le16_to_cpu(de2->key= _size); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (ni_insert_resident(ni, de_= key_size, ATTR_NAME, NULL, 0, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &attr, NULL, NULL)) { +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &attr, NULL, NULL)) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return fals= e; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0memcpy(Add2Ptr(attr, SIZEOF_RE= SIDENT), de2 + 1, de_key_size); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0mi_get_ref(&ni->mi, &de2->ref); @@ -2981,19 +2981,16 @@ bool ni_remove_name_undo(struct ntfs_inode=20 *dir_ni, struct ntfs_inode *ni, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0de2->flags =3D 0; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0de2->res =3D 0; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (indx_insert_entry(&dir_ni->dir, = dir_ni, de2, sbi, NULL, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1)) { +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (indx_insert_entry(&dir_ni->dir, = dir_ni, de2, sbi, NULL, 1)) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return fals= e; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0fallthrough; =C2=A0=C2=A0=C2=A0 =C2=A0case 2: =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0de_key_size =3D le16_to_cpu(de= ->key_size); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (ni_insert_resident(ni, de_= key_size, ATTR_NAME, NULL, 0, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &attr, NULL, NULL)) { +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &attr, NULL, NULL)) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return fals= e; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0memcpy(Add2Ptr(attr, SIZEOF_RE= SIDENT), de + 1, de_key_size); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0mi_get_ref(&ni->mi, &de->ref); @@ -3162,9 +3159,9 @@ static bool ni_update_parent(struct ntfs_inode=20 *ni, struct NTFS_DUP_INFO *dup, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0u64 data_si= ze =3D le64_to_cpu(attr->nres.data_size); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0__le64 vali= d_le; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0dup->alloc_size = =3D is_attr_ext(attr) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 ? attr->nres.total_size -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 : attr->nres.alloc_size; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0dup->alloc_size = =3D is_attr_ext(attr) ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0attr->nres.tota= l_size : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0attr->nres.allo= c_size; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0dup->data_s= ize =3D attr->nres.data_size; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (new_val= id > data_size) diff --git a/fs/ntfs3/fslog.c b/fs/ntfs3/fslog.c index bf7396447284..57762c5fe68b 100644 --- a/fs/ntfs3/fslog.c +++ b/fs/ntfs3/fslog.c @@ -827,10 +827,10 @@ static inline struct RESTART_TABLE=20 *extend_rsttbl(struct RESTART_TABLE *tbl, =C2=A0=C2=A0=C2=A0 =C2=A0memcpy(rt + 1, tbl + 1, esize * used); -=C2=A0=C2=A0 =C2=A0rt->free_goal =3D free_goal =3D=3D ~0u -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0? cpu_to_le32(~0u) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0: cpu_to_le32(sizeof(struct RESTART_TABLE) + -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 free_goal * esize); +=C2=A0=C2=A0 =C2=A0rt->free_goal =3D free_goal =3D=3D ~0u ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 cpu_to_le32(~0u) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 cpu_to_le32(sizeof(struct RESTART_TABLE) + +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 free_goal * esize); =C2=A0=C2=A0=C2=A0 =C2=A0if (tbl->first_free) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0rt->first_free =3D tbl->first_= free; @@ -1089,9 +1089,9 @@ static inline u64 base_lsn(struct ntfs_log *log, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 (lsn < (lsn= _to_vbo(log, h_lsn) & ~log->page_mask) ? 1 : 0)) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 << log->file_data= _bits) + =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 ((((is_log_record_end(h= dr) && -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 h_lsn= <=3D le64_to_cpu(hdr->record_hdr.last_end_lsn)) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 ? le16_to_cpu(hdr->record_hdr.next_record_off) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 : log->page_size) + +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 h_lsn= <=3D le64_to_cpu(hdr->record_hdr.last_end_lsn)) ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 le16_to_cpu(hdr->record_hdr.next_record_off) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 log->page_size) + =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 lsn) >> =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 3); @@ -1298,9 +1298,9 @@ static void log_init_pg_hdr(struct ntfs_log *log,=20 u32 sys_page_size, =C2=A0=C2=A0=C2=A0 =C2=A0if (!log->clst_per_page) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0log->clst_per_page =3D 1; -=C2=A0=C2=A0 =C2=A0log->first_page =3D major_ver >=3D 2 -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0 ? 0x22 * page_size -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0 : ((sys_page_size << 1) + (page_size << 1)); +=C2=A0=C2=A0 =C2=A0log->first_page =3D major_ver >=3D 2 ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A00x22 * page_size : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0((sys_page_size << 1) + (page_size << 1)); =C2=A0=C2=A0=C2=A0 =C2=A0log->major_ver =3D major_ver; =C2=A0=C2=A0=C2=A0 =C2=A0log->minor_ver =3D minor_ver; =C2=A0} @@ -1512,20 +1512,19 @@ static u32 current_log_avail(struct ntfs_log *log) =C2=A0=C2=A0=C2=A0 =C2=A0 * have to compute the free range. =C2=A0=C2=A0=C2=A0 =C2=A0 * If there is no oldest lsn then start at the fi= rst page of the file. =C2=A0=C2=A0=C2=A0 =C2=A0 */ -=C2=A0=C2=A0 =C2=A0oldest_off =3D (log->l_flags & NTFSLOG_NO_OLDEST_LSN) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 ? log->first_page -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 : (log->oldest_lsn_off & ~log->sys_page_mask); +=C2=A0=C2=A0 =C2=A0oldest_off =3D (log->l_flags & NTFSLOG_NO_OLDEST_LSN) ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 log->first_page : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 (log->oldest_lsn_off & ~log->sys_page_mask); =C2=A0=C2=A0=C2=A0 =C2=A0/* =C2=A0=C2=A0=C2=A0 =C2=A0 * We will use the next log page offset to comput= e the next free page. =C2=A0=C2=A0=C2=A0 =C2=A0 * If we are going to reuse this page go to the n= ext page. =C2=A0=C2=A0=C2=A0 =C2=A0 * If we are at the first page then use the end o= f the file. =C2=A0=C2=A0=C2=A0 =C2=A0 */ -=C2=A0=C2=A0 =C2=A0next_free_off =3D (log->l_flags & NTFSLOG_REUSE_TAIL) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0? log->next_page + log->page_size -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0: log->next_page =3D=3D log->first_page -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0 ? log->l_size -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0 : log->next_page; +=C2=A0=C2=A0 =C2=A0next_free_off =3D (log->l_flags & NTFSLOG_REUSE_TAIL) ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 log->next_page + log->page_size : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0log->next_page = =3D=3D log->first_page ? log->l_size : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 = =C2=A0=C2=A0 log->next_page; =C2=A0=C2=A0=C2=A0 =C2=A0/* If the two offsets are the same then there is = no available=20 space. */ =C2=A0=C2=A0=C2=A0 =C2=A0if (oldest_off =3D=3D next_free_off) @@ -1535,9 +1534,9 @@ static u32 current_log_avail(struct ntfs_log *log) =C2=A0=C2=A0=C2=A0 =C2=A0 * this range from the total available pages. =C2=A0=C2=A0=C2=A0 =C2=A0 */ =C2=A0=C2=A0=C2=A0 =C2=A0free_bytes =3D -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0oldest_off < next_free_off -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0? log->total_avai= l_pages - (next_free_off - oldest_off) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0: oldest_off - ne= xt_free_off; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0oldest_off < next_free_off ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 log->total_avail_pages - (next_free_off - oldest_off) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 oldest_off - next_free_off; =C2=A0=C2=A0=C2=A0 =C2=A0free_bytes >>=3D log->page_bits; =C2=A0=C2=A0=C2=A0 =C2=A0return free_bytes * log->reserved; @@ -1671,8 +1670,8 @@ static int last_log_lsn(struct ntfs_log *log) =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0best_lsn1 =3D first_tail ? base_lsn(log, first_ta= il, first_file_off)=20 : 0; -=C2=A0=C2=A0 =C2=A0best_lsn2 =3D -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0second_tail ? base_lsn(log, second_t= ail, second_file_off) : 0; +=C2=A0=C2=A0 =C2=A0best_lsn2 =3D second_tail ? base_lsn(log, second_tail, = second_file_off) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A00; =C2=A0=C2=A0=C2=A0 =C2=A0if (first_tail && second_tail) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (best_lsn1 > best_lsn2) { @@ -1767,8 +1766,8 @@ static int last_log_lsn(struct ntfs_log *log) =C2=A0=C2=A0=C2=A0 =C2=A0page_cnt =3D page_pos =3D 1; -=C2=A0=C2=A0 =C2=A0curpage_off =3D seq_base =3D=3D log->seq_num ? min(log-= >next_page, page_off) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 : log->next_page; +=C2=A0=C2=A0 =C2=A0curpage_off =3D seq_base =3D=3D log->seq_num ? min(log-= >next_page,=20 page_off) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 log->next_page; =C2=A0=C2=A0=C2=A0 =C2=A0wrapped_file =3D =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0curpage_off =3D=3D log->first_= page && @@ -1826,9 +1825,9 @@ static int last_log_lsn(struct ntfs_log *log) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0=C2=A0 le64_to_cpu(cur_page->record_hdr.last_end_lsn) && =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 ((lsn_cur >= > log->file_data_bits) + =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ((cur= page_off < -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= (lsn_to_vbo(log, lsn_cur) & ~log->page_mask)) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 ? 1 -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 : 0)) !=3D expected_seq) { +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= (lsn_to_vbo(log, lsn_cur) & ~log->page_mask)) ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0 1 : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0 0)) !=3D expected_seq) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto check_= tail; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} @@ -2642,9 +2641,10 @@ static inline bool check_index_root(const struct=20 ATTRIB *attr, =C2=A0{ =C2=A0=C2=A0=C2=A0 =C2=A0bool ret; =C2=A0=C2=A0=C2=A0 =C2=A0const struct INDEX_ROOT *root =3D resident_data(a= ttr); -=C2=A0=C2=A0 =C2=A0u8 index_bits =3D le32_to_cpu(root->index_block_size) >= =3D=20 sbi->cluster_size -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0? sbi->cluster_bits -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0: SECTOR_SHIFT; +=C2=A0=C2=A0 =C2=A0u8 index_bits =3D le32_to_cpu(root->index_block_size) >= =3D +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0sbi->cluster_size ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 sbi->cluster_bits : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SECTOR_SHIFT; =C2=A0=C2=A0=C2=A0 =C2=A0u8 block_clst =3D root->index_block_clst; =C2=A0=C2=A0=C2=A0 =C2=A0if (le32_to_cpu(attr->res.data_size) < sizeof(str= uct INDEX_ROOT) || @@ -3683,7 +3683,8 @@ static int do_action(struct ntfs_log *log, struct=20 OPEN_ATTR_ENRTY *oe, =C2=A0=C2=A0=C2=A0 =C2=A0if (a_dirty) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0attr =3D oa->attr; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D ntfs_sb_write_run(sbi, oa->r= un1, vbo, buffer_le, bytes, 0); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D ntfs_sb_write_run(sbi, oa->r= un1, vbo, buffer_le, bytes, +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A00); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (err) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0} @@ -3768,11 +3769,10 @@ int log_replay(struct ntfs_inode *ni, bool=20 *initialized) =C2=A0=C2=A0=C2=A0 =C2=A0if (!log) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -ENOMEM; -=C2=A0=C2=A0 =C2=A0memset(&rst_info, 0, sizeof(struct restart_info)); - =C2=A0=C2=A0=C2=A0 =C2=A0log->ni =3D ni; =C2=A0=C2=A0=C2=A0 =C2=A0log->l_size =3D l_size; =C2=A0=C2=A0=C2=A0 =C2=A0log->one_page_buf =3D kmalloc(page_size, GFP_NOFS= ); + =C2=A0=C2=A0=C2=A0 =C2=A0if (!log->one_page_buf) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D -ENOMEM; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; @@ -3783,6 +3783,7 @@ int log_replay(struct ntfs_inode *ni, bool=20 *initialized) =C2=A0=C2=A0=C2=A0 =C2=A0log->page_bits =3D blksize_bits(page_size); =C2=A0=C2=A0=C2=A0 =C2=A0/* Look for a restart area on the disk. */ +=C2=A0=C2=A0 =C2=A0memset(&rst_info, 0, sizeof(struct restart_info)); =C2=A0=C2=A0=C2=A0 =C2=A0err =3D log_read_rst(log, l_size, true, &rst_info= ); =C2=A0=C2=A0=C2=A0 =C2=A0if (err) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; @@ -3859,10 +3860,10 @@ int log_replay(struct ntfs_inode *ni, bool=20 *initialized) =C2=A0=C2=A0=C2=A0 =C2=A0log->init_ra =3D !!rst_info.vbo; =C2=A0=C2=A0=C2=A0 =C2=A0/* If we have a valid page then grab a pointer to= the restart area. */ -=C2=A0=C2=A0 =C2=A0ra2 =3D rst_info.valid_page -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ? Add= 2Ptr(rst_info.r_page, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0le16_to_cpu(rst_info.r_page->ra_off)) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 : NUL= L; +=C2=A0=C2=A0 =C2=A0ra2 =3D rst_info.valid_page ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 Add2Ptr(rst_info.r_page, +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 le16_to_cpu(rst_info.r_page->ra_off)) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 NULL; =C2=A0=C2=A0=C2=A0 =C2=A0if (rst_info.chkdsk_was_run || =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 (ra2 && ra2->client_idx[1] =3D= =3D LFS_NO_CLIENT_LE)) { diff --git a/fs/ntfs3/fsntfs.c b/fs/ntfs3/fsntfs.c index 9ed9dd0d8edf..0a82b1bf3ec2 100644 --- a/fs/ntfs3/fsntfs.c +++ b/fs/ntfs3/fsntfs.c @@ -172,8 +172,8 @@ int ntfs_fix_post_read(struct NTFS_RECORD_HEADER=20 *rhdr, size_t bytes, =C2=A0=C2=A0=C2=A0 =C2=A0u16 sample, fo, fn; =C2=A0=C2=A0=C2=A0 =C2=A0fo =3D le16_to_cpu(rhdr->fix_off); -=C2=A0=C2=A0 =C2=A0fn =3D simple ? ((bytes >> SECTOR_SHIFT) + 1) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 : le16_to_cpu(rhd= r->fix_num); +=C2=A0=C2=A0 =C2=A0fn =3D simple ? ((bytes >> SECTOR_SHIFT) + 1) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 le16_to_cpu(rhdr->fix_num); =C2=A0=C2=A0=C2=A0 =C2=A0/* Check errors. */ =C2=A0=C2=A0=C2=A0 =C2=A0if ((fo & 1) || fo + fn * sizeof(short) > SECTOR_= SIZE || !fn-- || @@ -849,14 +849,13 @@ void ntfs_update_mftmirr(struct ntfs_sb_info *sbi,=20 int wait) =C2=A0=C2=A0=C2=A0 =C2=A0u32 blocksize, bytes; =C2=A0=C2=A0=C2=A0 =C2=A0sector_t block1, block2; -=C2=A0=C2=A0 =C2=A0if (!sb) +=C2=A0=C2=A0 =C2=A0/* +=C2=A0=C2=A0 =C2=A0 * sb can be NULL here. In this case sbi->flags should = be 0 too. +=C2=A0=C2=A0 =C2=A0 */ +=C2=A0=C2=A0 =C2=A0if (!sb || !(sbi->flags & NTFS_FLAGS_MFTMIRR)) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return; =C2=A0=C2=A0=C2=A0 =C2=A0blocksize =3D sb->s_blocksize; - -=C2=A0=C2=A0 =C2=A0if (!(sbi->flags & NTFS_FLAGS_MFTMIRR)) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return; - =C2=A0=C2=A0=C2=A0 =C2=A0bytes =3D sbi->mft.recs_mirr << sbi->record_bits; =C2=A0=C2=A0=C2=A0 =C2=A0block1 =3D sbi->mft.lbo >> sb->s_blocksize_bits; =C2=A0=C2=A0=C2=A0 =C2=A0block2 =3D sbi->mft.lbo2 >> sb->s_blocksize_bits; diff --git a/fs/ntfs3/index.c b/fs/ntfs3/index.c index 5d1ec0124137..0a48d2d67219 100644 --- a/fs/ntfs3/index.c +++ b/fs/ntfs3/index.c @@ -431,8 +431,9 @@ static int scan_nres_bitmap(struct ntfs_inode *ni,=20 struct ATTRIB *bitmap, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (vbo + blocksize > data_siz= e) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0nbits =3D 8= * (data_size - vbo); -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ok =3D nbits > from ? (*fn)((ulong *= )bh->b_data, from, nbits, ret) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0 : false; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ok =3D nbits > from ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 (*fn)((ulong *)bh->b_data, from, nbits, ret) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 false; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0put_bh(bh); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (ok) { @@ -764,8 +765,7 @@ static struct NTFS_DE *hdr_find_e(const struct=20 ntfs_index *indx, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0return NULL; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0max_idx =3D= 0; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0table_size =3D mi= n(table_size * 2, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0 (int)ARRAY_SIZE(offs)); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0table_size =3D mi= n(table_size * 2, (int)ARRAY_SIZE(offs)); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto fill_t= able; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0} else if (diff2 < 0) { @@ -1170,8 +1170,10 @@ int indx_find(struct ntfs_index *indx, struct=20 ntfs_inode *ni, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* Read next level. */ =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D indx_read(indx, ni, de= _get_vbn(e), &node); -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (err) +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (err) { +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* io error? */ =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return err; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* Lookup entry that is <=3D t= o the search value. */ =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0e =3D hdr_find_e(indx, &node->= index->ihdr, key, key_len, ctx, @@ -1673,9 +1675,9 @@ static int indx_insert_into_root(struct ntfs_index=20 *indx, struct ntfs_inode *ni, =C2=A0=C2=A0=C2=A0 =C2=A0mi->dirty =3D true; =C2=A0=C2=A0=C2=A0 =C2=A0/* Create alloc and bitmap attributes (if not). */ -=C2=A0=C2=A0 =C2=A0err =3D run_is_empty(&indx->alloc_run) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ? ind= x_create_allocate(indx, ni, &new_vbn) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 : ind= x_add_allocate(indx, ni, &new_vbn); +=C2=A0=C2=A0 =C2=A0err =3D run_is_empty(&indx->alloc_run) ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 indx_create_allocate(indx, ni, &new_vbn) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 indx_add_allocate(indx, ni, &new_vbn); =C2=A0=C2=A0=C2=A0 =C2=A0/* Layout of record may be changed, so rescan roo= t. */ =C2=A0=C2=A0=C2=A0 =C2=A0root =3D indx_get_root(indx, ni, &attr, &mi); @@ -1865,9 +1867,9 @@ indx_insert_into_buffer(struct ntfs_index *indx,=20 struct ntfs_inode *ni, =C2=A0=C2=A0=C2=A0 =C2=A0hdr_insert_de(indx, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= (*indx->cmp)(new_de + 1, le16_to_cpu(new_de->key_size), =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0 up_e + 1, le16_to_cpu(up_e->key_size), -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 ctx) < 0 -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 ? hdr2 -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 : hdr1, +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 ctx) < 0 ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0 hdr2 : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0 hdr1, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= new_de, NULL, ctx); =C2=A0=C2=A0=C2=A0 =C2=A0indx_mark_used(indx, ni, new_vbn >> indx->idx2vbn= _bits); @@ -2337,8 +2339,8 @@ int indx_delete_entry(struct ntfs_index *indx,=20 struct ntfs_inode *ni, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D lev= el ? indx_insert_into_buffer(indx, ni, root, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 re, ctx, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 fnd->level - 1, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 fnd) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0 : indx_insert_into_root(indx, ni, re, e, +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 fnd) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 indx_insert_into_root(indx, ni, re= , e, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0= =C2=A0=C2=A0 ctx, fnd, 0); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0kfree(re); diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index 752ad17685c0..f64b1e001501 100644 --- a/fs/ntfs3/inode.c +++ b/fs/ntfs3/inode.c @@ -262,8 +262,8 @@ static struct inode *ntfs_read_mft(struct inode *inode, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (!attr->nres.alloc_size) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto next_a= ttr; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0run =3D ino =3D=3D MFT_REC_BITMAP ? = &sbi->used.bitmap.run -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 : &ni->file.run; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0run =3D ino =3D=3D MFT_REC_BITMAP ? = &sbi->used.bitmap.run : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 &ni->file.run; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0break; =C2=A0=C2=A0=C2=A0 =C2=A0case ATTR_ROOT: @@ -290,9 +290,9 @@ static struct inode *ntfs_read_mft(struct inode *inode, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (err) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0mode =3D sb->s_root -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 ? (S_IFDIR | (0777 & sbi->options->fs_dmask_inv)) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 : (S_IFDIR | 0777); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0mode =3D sb->s_root ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 (S_IFDIR | (0777 & sbi->options->fs_dmask_inv))= : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 (S_IFDIR | 0777); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto next_attr; =C2=A0=C2=A0=C2=A0 =C2=A0case ATTR_ALLOC: @@ -449,8 +449,8 @@ static struct inode *ntfs_read_mft(struct inode *inode, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ni->std_fa &=3D ~FILE_ATTRIBUT= E_DIRECTORY; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_op =3D &ntfs_file_ino= de_operations; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_fop =3D &ntfs_file_op= erations; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_mapping->a_ops =3D -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0is_compressed(ni)= ? &ntfs_aops_cmpr : &ntfs_aops; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_mapping->a_ops =3D is_compr= essed(ni) ? &ntfs_aops_cmpr : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 = =C2=A0=C2=A0=C2=A0=C2=A0 &ntfs_aops; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (ino !=3D MFT_REC_MFT) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0init_rwsem(= &ni->file.run_lock); =C2=A0=C2=A0=C2=A0 =C2=A0} else if (S_ISCHR(mode) || S_ISBLK(mode) || S_IS= FIFO(mode) || @@ -786,8 +786,8 @@ static ssize_t ntfs_direct_IO(struct kiocb *iocb,=20 struct iov_iter *iter) =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0ret =3D blockdev_direct_IO(iocb, inode, iter, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0 wr ? ntfs_get_block_direct_IO_W -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0 : ntfs_get_block_direct_IO_R); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0 wr ? ntfs_get_block_direct_IO_W : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 ntfs_get_block_direct_IO_R); =C2=A0=C2=A0=C2=A0 =C2=A0if (ret > 0) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0end =3D vbo + ret; @@ -846,7 +846,7 @@ int ntfs_set_size(struct inode *inode, u64 new_size) =C2=A0} =C2=A0static int ntfs_resident_writepage(struct page *page, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0struct writeback_control *wbc, void = *data) +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 struct writeback_control *wbc, void *data) =C2=A0{ =C2=A0=C2=A0=C2=A0 =C2=A0struct address_space *mapping =3D data; =C2=A0=C2=A0=C2=A0 =C2=A0struct ntfs_inode *ni =3D ntfs_i(mapping->host); @@ -887,8 +887,8 @@ int ntfs_write_begin(struct file *file, struct=20 address_space *mapping, =C2=A0=C2=A0=C2=A0 =C2=A0*pagep =3D NULL; =C2=A0=C2=A0=C2=A0 =C2=A0if (is_resident(ni)) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0struct page *page =3D grab_cache_pag= e_write_begin( -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0mapping, pos >> P= AGE_SHIFT); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0struct page *page =3D +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0grab_cache_page_w= rite_begin(mapping, pos >> PAGE_SHIFT); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (!page) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0err =3D -EN= OMEM; @@ -920,9 +920,8 @@ int ntfs_write_begin(struct file *file, struct=20 address_space *mapping, =C2=A0/* =C2=A0 * ntfs_write_end - Address_space_operations::write_end. =C2=A0 */ -int ntfs_write_end(struct file *file, struct address_space *mapping, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 loff_t pos, u32 len, u3= 2 copied, struct page *page, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 void *fsdata) +int ntfs_write_end(struct file *file, struct address_space *mapping,=20 loff_t pos, +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 u32 len, u32 copied, st= ruct page *page, void *fsdata) =C2=A0{ =C2=A0=C2=A0=C2=A0 =C2=A0struct inode *inode =3D mapping->host; =C2=A0=C2=A0=C2=A0 =C2=A0struct ntfs_inode *ni =3D ntfs_i(inode); @@ -1605,8 +1604,8 @@ struct inode *ntfs_create_inode(struct=20 user_namespace *mnt_userns, =C2=A0=C2=A0=C2=A0 =C2=A0} else if (S_ISREG(mode)) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_op =3D &ntfs_file_ino= de_operations; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_fop =3D &ntfs_file_op= erations; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_mapping->a_ops =3D -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0is_compressed(ni)= ? &ntfs_aops_cmpr : &ntfs_aops; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_mapping->a_ops =3D is_compr= essed(ni) ? &ntfs_aops_cmpr : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 = =C2=A0=C2=A0=C2=A0=C2=A0 &ntfs_aops; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0init_rwsem(&ni->file.run_lock); =C2=A0=C2=A0=C2=A0 =C2=A0} else { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0inode->i_op =3D &ntfs_special_= inode_operations; diff --git a/fs/ntfs3/lznt.c b/fs/ntfs3/lznt.c index 28f654561f27..61e161c7c567 100644 --- a/fs/ntfs3/lznt.c +++ b/fs/ntfs3/lznt.c @@ -296,8 +296,8 @@ static inline ssize_t decompress_chunk(u8 *unc, u8=20 *unc_end, const u8 *cmpr, =C2=A0 */ =C2=A0struct lznt *get_lznt_ctx(int level) =C2=A0{ -=C2=A0=C2=A0 =C2=A0struct lznt *r =3D kzalloc(level ? offsetof(struct lznt= , hash) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 : sizeof(struct lznt), +=C2=A0=C2=A0 =C2=A0struct lznt *r =3D kzalloc(level ? offsetof(struct lznt= , hash) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 sizeof(struct lz= nt), =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0 GFP_NOFS); =C2=A0=C2=A0=C2=A0 =C2=A0if (r) @@ -392,9 +392,9 @@ ssize_t decompress_lznt(const void *cmpr, size_t=20 cmpr_size, void *unc, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0unc_use =3D= err; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} else { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* This chu= nk does not contain compressed data. */ -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0unc_use =3D unc_c= hunk + LZNT_CHUNK_SIZE > unc_end -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0 ? unc_end - unc_chunk -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0 : LZNT_CHUNK_SIZE; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0unc_use =3D unc_c= hunk + LZNT_CHUNK_SIZE > unc_end ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0unc_end - unc_chunk : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0LZNT_CHUNK_SIZE; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (cmpr_ch= unk + sizeof(chunk_hdr) + unc_use > =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0=C2=A0 cmpr_end) { diff --git a/fs/ntfs3/namei.c b/fs/ntfs3/namei.c index 8b68ead5cc1f..5d5a251334a1 100644 --- a/fs/ntfs3/namei.c +++ b/fs/ntfs3/namei.c @@ -433,8 +433,8 @@ static int ntfs_atomic_open(struct inode *dir,=20 struct dentry *dentry, =C2=A0=C2=A0=C2=A0 =C2=A0inode =3D ntfs_create_inode(&init_user_ns, dir, d= entry, uni, mode, 0, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0 NULL, 0, fnd); -=C2=A0=C2=A0 =C2=A0err =3D IS_ERR(inode) ? PTR_ERR(inode) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0 : finish_open(file, dentry, ntfs_file_open); +=C2=A0=C2=A0 =C2=A0err =3D IS_ERR(inode) ? PTR_ERR(inode) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0=C2=A0 finish_open(file, dentry, ntfs_file_open); =C2=A0=C2=A0=C2=A0 =C2=A0dput(d); =C2=A0out2: diff --git a/fs/ntfs3/ntfs_fs.h b/fs/ntfs3/ntfs_fs.h index b7782107ce8a..9a2d965f183e 100644 --- a/fs/ntfs3/ntfs_fs.h +++ b/fs/ntfs3/ntfs_fs.h @@ -338,7 +338,7 @@ enum ntfs_inode_mutex_lock_class { =C2=A0}; =C2=A0/* - * sturct ntfs_inode + * struct ntfs_inode =C2=A0 * =C2=A0 * Ntfs inode - extends linux inode. consists of one or more MFT ino= des. =C2=A0 */ @@ -697,9 +697,8 @@ int ntfs_get_block(struct inode *inode, sector_t vbn, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 struct buffer_hea= d *bh_result, int create); =C2=A0int ntfs_write_begin(struct file *file, struct address_space *mappin= g, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 loff_= t pos, u32 len, struct page **pagep, void **fsdata); -int ntfs_write_end(struct file *file, struct address_space *mapping, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 loff_t pos, u32 len, u3= 2 copied, struct page *page, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 void *fsdata); +int ntfs_write_end(struct file *file, struct address_space *mapping,=20 loff_t pos, +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 u32 len, u32 copied, st= ruct page *page, void *fsdata); =C2=A0int ntfs3_write_inode(struct inode *inode, struct writeback_control = *wbc); =C2=A0int ntfs_sync_inode(struct inode *inode); =C2=A0int ntfs_flush_inodes(struct super_block *sb, struct inode *i1, @@ -856,7 +855,7 @@ unsigned long ntfs_names_hash(const u16 *name,=20 size_t len, const u16 *upcase, =C2=A0/* globals from xattr.c */ =C2=A0#ifdef CONFIG_NTFS3_FS_POSIX_ACL =C2=A0struct posix_acl *ntfs_get_acl(struct user_namespace *mnt_userns, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 struct dentry *dentry, int type); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 struct dentry *dentry, int type); =C2=A0int ntfs_set_acl(struct user_namespace *mnt_userns, struct dentry *d= entry, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 struct posix_acl *acl, int ty= pe); =C2=A0int ntfs_init_acl(struct user_namespace *mnt_userns, struct inode *i= node, diff --git a/fs/ntfs3/record.c b/fs/ntfs3/record.c index 0603169ee8a0..2a281cead2bc 100644 --- a/fs/ntfs3/record.c +++ b/fs/ntfs3/record.c @@ -419,10 +419,9 @@ struct ATTRIB *mi_insert_attr(struct mft_inode *mi,=20 enum ATTR_TYPE type, =C2=A0=C2=A0=C2=A0 =C2=A0struct ntfs_sb_info *sbi =3D mi->sbi; =C2=A0=C2=A0=C2=A0 =C2=A0u32 used =3D le32_to_cpu(rec->used); =C2=A0=C2=A0=C2=A0 =C2=A0const u16 *upcase =3D sbi->upcase; -=C2=A0=C2=A0 =C2=A0int diff; =C2=A0=C2=A0=C2=A0 =C2=A0/* Can we insert mi attribute? */ -=C2=A0=C2=A0 =C2=A0if (used + asize > mi->sbi->record_size) +=C2=A0=C2=A0 =C2=A0if (used + asize > sbi->record_size) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return NULL; =C2=A0=C2=A0=C2=A0 =C2=A0/* @@ -431,7 +430,7 @@ struct ATTRIB *mi_insert_attr(struct mft_inode *mi,=20 enum ATTR_TYPE type, =C2=A0=C2=A0=C2=A0 =C2=A0 */ =C2=A0=C2=A0=C2=A0 =C2=A0attr =3D NULL; =C2=A0=C2=A0=C2=A0 =C2=A0while ((attr =3D mi_enum_attr(mi, attr))) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0diff =3D compare_attr(attr, type, na= me, name_len, upcase); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0int diff =3D compare_attr(attr, type= , name, name_len, upcase); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (diff < 0) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0continue; @@ -442,9 +441,11 @@ struct ATTRIB *mi_insert_attr(struct mft_inode *mi,=20 enum ATTR_TYPE type, =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0if (!attr) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0tail =3D 8; /* Not used, just to sup= press warning. */ +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* Append. */ +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0tail =3D 8; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0attr =3D Add2Ptr(rec, used - 8= ); =C2=A0=C2=A0=C2=A0 =C2=A0} else { +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* Insert before 'attr'. */ =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0tail =3D used - PtrOffset(rec,= attr); =C2=A0=C2=A0=C2=A0 =C2=A0} diff --git a/fs/ntfs3/run.c b/fs/ntfs3/run.c index a5af71cd8d14..47612d16c027 100644 --- a/fs/ntfs3/run.c +++ b/fs/ntfs3/run.c @@ -433,9 +433,9 @@ bool run_add_entry(struct runs_tree *run, CLST vcn,=20 CLST lcn, CLST len, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0should_add_= tail =3D Tovcn < r->len; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0if (should_= add_tail) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0tail_lcn =3D r->lcn =3D=3D SPARSE_LCN -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 ? SPARSE_LCN -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 : (r->lcn + Tovcn); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0tail_lcn =3D r->lcn =3D=3D SPARSE_LCN ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 SPARSE_LCN : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 (r->lcn + Tovc= n); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0tail_vcn =3D r->vcn + Tovcn; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0tail_len =3D r->len - Tovcn; =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0} diff --git a/fs/ntfs3/super.c b/fs/ntfs3/super.c index d7bec9b28a42..6a412826b43d 100644 --- a/fs/ntfs3/super.c +++ b/fs/ntfs3/super.c @@ -39,10 +39,10 @@ =C2=A0 * To mount large volumes as ntfs one should use large cluster size=20 (up to 2M) =C2=A0 * The maximum volume size in this case is 2^32 * 2^21 =3D 2^53 =3D = 8P =C2=A0 * - *=C2=A0=C2=A0=C2=A0=C2=A0 ntfs limits, cluster size is 2M (2^31) + *=C2=A0=C2=A0=C2=A0=C2=A0 ntfs limits, cluster size is 2M (2^21) =C2=A0 *=20 ---------------------------------------------------------------------------= -- - * | < 8P, 2^54=C2=A0=C2=A0=C2=A0 |=C2=A0 < 2^32=C2=A0 |=C2=A0 yes=C2=A0= =C2=A0=C2=A0=C2=A0 |=C2=A0 yes=C2=A0=C2=A0 |=C2=A0=C2=A0 yes |=C2=A0 yes=C2= =A0=C2=A0 |=C2=A0=20 yes=C2=A0=C2=A0 | - * | > 8P, 2^54=C2=A0=C2=A0=C2=A0 |=C2=A0 > 2^32=C2=A0 |=C2=A0 no=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 |=C2=A0 no=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 yes |=C2= =A0 yes=C2=A0=C2=A0 |=C2=A0=20 yes=C2=A0=C2=A0 | + * | < 8P, 2^53=C2=A0=C2=A0=C2=A0 |=C2=A0 < 2^32=C2=A0 |=C2=A0 yes=C2=A0= =C2=A0=C2=A0=C2=A0 |=C2=A0 yes=C2=A0=C2=A0 |=C2=A0=C2=A0 yes |=C2=A0 yes=C2= =A0=C2=A0 |=C2=A0=20 yes=C2=A0=C2=A0 | + * | > 8P, 2^53=C2=A0=C2=A0=C2=A0 |=C2=A0 > 2^32=C2=A0 |=C2=A0 no=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 |=C2=A0 no=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 yes |=C2= =A0 yes=C2=A0=C2=A0 |=C2=A0=20 yes=C2=A0=C2=A0 | =C2=A0 *=20 ----------------------------------------------------------|----------------= -- =C2=A0 * =C2=A0 */ @@ -115,9 +115,9 @@ void ntfs_inode_printk(struct inode *inode, const=20 char *fmt, ...) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return; =C2=A0=C2=A0=C2=A0 =C2=A0/* Use static allocated buffer, if possible. */ -=C2=A0=C2=A0 =C2=A0name =3D atomic_dec_and_test(&s_name_buf_cnt) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= ? s_name_buf -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= : kmalloc(sizeof(s_name_buf), GFP_NOFS); +=C2=A0=C2=A0 =C2=A0name =3D atomic_dec_and_test(&s_name_buf_cnt) ? +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 s_name_buf : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 kmalloc(sizeof(s_name_buf), GFP_NOFS); =C2=A0=C2=A0=C2=A0 =C2=A0if (name) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0struct dentry *de =3D d_find_a= lias(inode); @@ -369,7 +369,8 @@ static int ntfs_fs_parse_param(struct fs_context *fc, =C2=A0#ifdef CONFIG_NTFS3_FS_POSIX_ACL =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0fc->sb_flag= s |=3D SB_POSIXACL; =C2=A0#else -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return invalf(fc,= "ntfs3: Support for ACL not compiled in!"); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return invalf( +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0fc, "ntfs3: Support for ACL not compiled in!"); =C2=A0#endif =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0else =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0fc->sb_flag= s &=3D ~SB_POSIXACL; @@ -404,24 +405,29 @@ static int ntfs_fs_reconfigure(struct fs_context *fc) =C2=A0=C2=A0=C2=A0 =C2=A0ro_rw =3D sb_rdonly(sb) && !(fc->sb_flags & SB_RD= ONLY); =C2=A0=C2=A0=C2=A0 =C2=A0if (ro_rw && (sbi->flags & NTFS_FLAGS_NEED_REPLAY= )) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0errorf(fc, "ntfs3: Couldn't remount = rw because journal is not=20 replayed. Please umount/remount instead\n"); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0errorf(fc, +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= "ntfs3: Couldn't remount rw because journal is not=20 replayed. Please umount/remount instead\n"); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -EINVAL; =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0new_opts->nls =3D ntfs_load_nls(new_opts->nls_nam= e); =C2=A0=C2=A0=C2=A0 =C2=A0if (IS_ERR(new_opts->nls)) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0new_opts->nls =3D NULL; -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0errorf(fc, "ntfs3: Cannot load iocha= rset %s", new_opts->nls_name); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0errorf(fc, "ntfs3: Cannot load iocha= rset %s", +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= new_opts->nls_name); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -EINVAL; =C2=A0=C2=A0=C2=A0 =C2=A0} =C2=A0=C2=A0=C2=A0 =C2=A0if (new_opts->nls !=3D sbi->options->nls) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return invalf(fc, "ntfs3: Cannot use= different iocharset when=20 remounting!"); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return invalf( +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0fc, +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0"ntfs3: Cannot us= e different iocharset when remounting!"); =C2=A0=C2=A0=C2=A0 =C2=A0sync_filesystem(sb); =C2=A0=C2=A0=C2=A0 =C2=A0if (ro_rw && (sbi->volume.flags & VOLUME_FLAG_DIR= TY) && =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 !new_opts->force) { -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0errorf(fc, "ntfs3: Volume is dirty a= nd \"force\" flag is not=20 set!"); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0errorf(fc, +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= "ntfs3: Volume is dirty and \"force\" flag is not set!"); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return -EINVAL; =C2=A0=C2=A0=C2=A0 =C2=A0} @@ -539,10 +545,8 @@ static int ntfs_show_options(struct seq_file *m,=20 struct dentry *root) =C2=A0=C2=A0=C2=A0 =C2=A0struct ntfs_mount_options *opts =3D sbi->options; =C2=A0=C2=A0=C2=A0 =C2=A0struct user_namespace *user_ns =3D seq_user_ns(m); -=C2=A0=C2=A0 =C2=A0seq_printf(m, ",uid=3D%u", -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 from_kuid_munged(user_ns, opt= s->fs_uid)); -=C2=A0=C2=A0 =C2=A0seq_printf(m, ",gid=3D%u", -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0 from_kgid_munged(user_ns, opt= s->fs_gid)); +=C2=A0=C2=A0 =C2=A0seq_printf(m, ",uid=3D%u", from_kuid_munged(user_ns, op= ts->fs_uid)); +=C2=A0=C2=A0 =C2=A0seq_printf(m, ",gid=3D%u", from_kgid_munged(user_ns, op= ts->fs_gid)); =C2=A0=C2=A0=C2=A0 =C2=A0if (opts->fmask) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0seq_printf(m, ",fmask=3D%04o",= opts->fs_fmask_inv ^ 0xffff); =C2=A0=C2=A0=C2=A0 =C2=A0if (opts->dmask) @@ -699,7 +703,7 @@ static u32 true_sectors_per_clst(const struct=20 NTFS_BOOT *boot) =C2=A0=C2=A0=C2=A0 =C2=A0if (boot->sectors_per_clusters <=3D 0x80) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return boot->sectors_per_clust= ers; =C2=A0=C2=A0=C2=A0 =C2=A0if (boot->sectors_per_clusters >=3D 0xf4) /* limi= t shift to 2MB max */ -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return 1U << -(s8)boot->sectors_per_= clusters; +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0return 1U << (-(s8)boot->sectors_per= _clusters); =C2=A0=C2=A0=C2=A0 =C2=A0return -EINVAL; =C2=A0} @@ -717,6 +721,7 @@ static int ntfs_init_from_boot(struct super_block=20 *sb, u32 sector_size, =C2=A0=C2=A0=C2=A0 =C2=A0struct buffer_head *bh; =C2=A0=C2=A0=C2=A0 =C2=A0struct MFT_REC *rec; =C2=A0=C2=A0=C2=A0 =C2=A0u16 fn, ao; +=C2=A0=C2=A0 =C2=A0u8 cluster_bits; =C2=A0=C2=A0=C2=A0 =C2=A0sbi->volume.blocks =3D dev_size >> PAGE_SHIFT; @@ -784,7 +789,7 @@ static int ntfs_init_from_boot(struct super_block=20 *sb, u32 sector_size, =C2=A0=C2=A0=C2=A0 =C2=A0if (boot_sector_size !=3D sector_size) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ntfs_warn( =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0sb, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0"Different NTFS s= ector size (%u) and media sector size (%u)", +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0"Different NTFS s= ector size (%u) and media sector size (%u).", =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0boot_sector= _size, sector_size); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0dev_size +=3D sector_size - 1; =C2=A0=C2=A0=C2=A0 =C2=A0} @@ -792,8 +797,8 @@ static int ntfs_init_from_boot(struct super_block=20 *sb, u32 sector_size, =C2=A0=C2=A0=C2=A0 =C2=A0sbi->cluster_size =3D boot_sector_size * sct_per_= clst; =C2=A0=C2=A0=C2=A0 =C2=A0sbi->cluster_bits =3D blksize_bits(sbi->cluster_s= ize); -=C2=A0=C2=A0 =C2=A0sbi->mft.lbo =3D mlcn << sbi->cluster_bits; -=C2=A0=C2=A0 =C2=A0sbi->mft.lbo2 =3D mlcn2 << sbi->cluster_bits; +=C2=A0=C2=A0 =C2=A0sbi->mft.lbo =3D mlcn << cluster_bits; +=C2=A0=C2=A0 =C2=A0sbi->mft.lbo2 =3D mlcn2 << cluster_bits; =C2=A0=C2=A0=C2=A0 =C2=A0/* Compare boot's cluster and sector. */ =C2=A0=C2=A0=C2=A0 =C2=A0if (sbi->cluster_size < boot_sector_size) @@ -804,7 +809,7 @@ static int ntfs_init_from_boot(struct super_block=20 *sb, u32 sector_size, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0/* No way to use ntfs_get_bloc= k in this case. */ =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ntfs_err( =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0sb, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0"Failed to mount = 'cause NTFS's cluster size (%u) is less=20 than media sector size (%u)", +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0"Failed to mount = 'cause NTFS's cluster size (%u) is less=20 than media sector size (%u).", =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0sbi->cluste= r_size, sector_size); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0} @@ -840,18 +845,18 @@ static int ntfs_init_from_boot(struct super_block=20 *sb, u32 sector_size, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0gb0 =3D format_size_gb(dev_siz= e, &mb0); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ntfs_warn( =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0sb, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0"RAW NTFS volume:= Filesystem size %u.%02u Gb > volume size=20 %u.%02u Gb. Mount in read-only", +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0"RAW NTFS volume:= Filesystem size %u.%02u Gb > volume size=20 %u.%02u Gb. Mount in read-only.", =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0gb, mb, gb0= , mb0); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0sb->s_flags |=3D SB_RDONLY; =C2=A0=C2=A0=C2=A0 =C2=A0} -=C2=A0=C2=A0 =C2=A0clusters =3D sbi->volume.size >> sbi->cluster_bits; +=C2=A0=C2=A0 =C2=A0clusters =3D sbi->volume.size >> cluster_bits; =C2=A0#ifndef CONFIG_NTFS3_64BIT_CLUSTER =C2=A0=C2=A0=C2=A0 =C2=A0/* 32 bits per cluster. */ =C2=A0=C2=A0=C2=A0 =C2=A0if (clusters >> 32) { =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0ntfs_notice( =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0sb, -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0"NTFS %u.%02u Gb = is too big to use 32 bits per cluster", +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0"NTFS %u.%02u Gb = is too big to use 32 bits per cluster.", =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0gb, mb); =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0goto out; =C2=A0=C2=A0=C2=A0 =C2=A0} @@ -885,17 +890,17 @@ static int ntfs_init_from_boot(struct super_block=20 *sb, u32 sector_size, =C2=A0=C2=A0=C2=A0 =C2=A0sbi->volume.blocks =3D sbi->volume.size >> sb->s_= blocksize_bits; =C2=A0=C2=A0=C2=A0 =C2=A0/* Maximum size for normal files. */ -=C2=A0=C2=A0 =C2=A0sbi->maxbytes =3D (clusters << sbi->cluster_bits) - 1; +=C2=A0=C2=A0 =C2=A0sbi->maxbytes =3D (clusters << cluster_bits) - 1; =C2=A0#ifdef CONFIG_NTFS3_64BIT_CLUSTER -=C2=A0=C2=A0 =C2=A0if (clusters >=3D (1ull << (64 - sbi->cluster_bits))) +=C2=A0=C2=A0 =C2=A0if (clusters >=3D (1ull << (64 - cluster_bits))) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0sbi->maxbytes =3D -1; =C2=A0=C2=A0=C2=A0 =C2=A0sbi->maxbytes_sparse =3D -1; =C2=A0=C2=A0=C2=A0 =C2=A0sb->s_maxbytes =3D MAX_LFS_FILESIZE; =C2=A0#else =C2=A0=C2=A0=C2=A0 =C2=A0/* Maximum size for sparse file. */ -=C2=A0=C2=A0 =C2=A0sbi->maxbytes_sparse =3D (1ull << (sbi->cluster_bits + = 32)) - 1; -=C2=A0=C2=A0 =C2=A0sb->s_maxbytes =3D 0xFFFFFFFFull << sbi->cluster_bits; +=C2=A0=C2=A0 =C2=A0sbi->maxbytes_sparse =3D (1ull << (cluster_bits + 32)) = - 1; +=C2=A0=C2=A0 =C2=A0sb->s_maxbytes =3D 0xFFFFFFFFull << cluster_bits; =C2=A0#endif =C2=A0=C2=A0=C2=A0 =C2=A0/* @@ -903,7 +908,7 @@ static int ntfs_init_from_boot(struct super_block=20 *sb, u32 sector_size, =C2=A0=C2=A0=C2=A0 =C2=A0 * It would be nice if we are able to allocate 1/= 8 of =C2=A0=C2=A0=C2=A0 =C2=A0 * total clusters for MFT but not more then 512 M= B. =C2=A0=C2=A0=C2=A0 =C2=A0 */ -=C2=A0=C2=A0 =C2=A0sbi->zone_max =3D min_t(CLST, 0x20000000 >> sbi->cluste= r_bits,=20 clusters >> 3); +=C2=A0=C2=A0 =C2=A0sbi->zone_max =3D min_t(CLST, 0x20000000 >> cluster_bit= s, clusters >> 3); =C2=A0=C2=A0=C2=A0 =C2=A0err =3D 0; @@ -1433,7 +1438,7 @@ static const struct fs_context_operations=20 ntfs_context_ops =3D { =C2=A0}; =C2=A0/* - * ntfs_init_fs_context - Initialize spi and opts + * ntfs_init_fs_context - Initialize sbi and opts =C2=A0 * =C2=A0 * This will called when mount/remount. We will first initialize =C2=A0 * options so that if remount we can use just that. @@ -1506,7 +1511,8 @@ static int __init init_ntfs_fs(void) =C2=A0=C2=A0=C2=A0 =C2=A0if (IS_ENABLED(CONFIG_NTFS3_FS_POSIX_ACL)) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0pr_info("ntfs3: Enabled Linux = POSIX ACLs support\n"); =C2=A0=C2=A0=C2=A0 =C2=A0if (IS_ENABLED(CONFIG_NTFS3_64BIT_CLUSTER)) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0pr_notice("ntfs3: Warning: Activated= 64 bits per cluster.=20 Windows does not support this\n"); +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0pr_notice( +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0"ntfs3: Warning: = Activated 64 bits per cluster. Windows=20 does not support this\n"); =C2=A0=C2=A0=C2=A0 =C2=A0if (IS_ENABLED(CONFIG_NTFS3_LZX_XPRESS)) =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0pr_info("ntfs3: Read-only LZX/= Xpress compression included\n"); @@ -1549,7 +1555,9 @@ MODULE_DESCRIPTION("ntfs3 read/write filesystem"); =C2=A0MODULE_INFO(behaviour, "Enabled Linux POSIX ACLs support"); =C2=A0#endif =C2=A0#ifdef CONFIG_NTFS3_64BIT_CLUSTER -MODULE_INFO(cluster, "Warning: Activated 64 bits per cluster. Windows=20 does not support this"); +MODULE_INFO( +=C2=A0=C2=A0 =C2=A0cluster, +=C2=A0=C2=A0 =C2=A0"Warning: Activated 64 bits per cluster. Windows does n= ot support=20 this"); =C2=A0#endif =C2=A0#ifdef CONFIG_NTFS3_LZX_XPRESS =C2=A0MODULE_INFO(compression, "Read-only lzx/xpress compression included"= ); diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c index 95c479d7ebba..0a6d2ec8c340 100644 --- a/fs/ntfs3/xattr.c +++ b/fs/ntfs3/xattr.c @@ -23,8 +23,8 @@ =C2=A0static inline size_t unpacked_ea_size(const struct EA_FULL *ea) =C2=A0{ -=C2=A0=C2=A0 =C2=A0return ea->size ? le32_to_cpu(ea->size) -=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0: ALIGN(struct_si= ze(ea, name, +=C2=A0=C2=A0 =C2=A0return ea->size ? le32_to_cpu(ea->size) : +=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2= =A0ALIGN(struct_size(ea, name, =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 1 + ea->name_len + =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 le16_to_= cpu(ea->elength)), =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A04); --=20 2.34.1