From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 83014C54E49 for ; Thu, 7 Mar 2024 11:31:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E96766B0164; Thu, 7 Mar 2024 06:31:04 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E45DF6B0165; Thu, 7 Mar 2024 06:31:04 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CE7876B0166; Thu, 7 Mar 2024 06:31:04 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id BBEF16B0164 for ; Thu, 7 Mar 2024 06:31:04 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 689A11C0224 for ; Thu, 7 Mar 2024 11:31:04 +0000 (UTC) X-FDA: 81870026448.22.893CBCE Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) by imf16.hostedemail.com (Postfix) with ESMTP id 1369F180025 for ; Thu, 7 Mar 2024 11:30:59 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=dfEDF1uP; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf16.hostedemail.com: domain of lkp@intel.com designates 192.198.163.18 as permitted sender) smtp.mailfrom=lkp@intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709811060; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=DSKRJJDKV4aHm7NIFHK5cM0MFDUetlDx1fzPtNkJeWY=; b=ktbQ6szZ8oBLJMyAJR4OwDDj2vVBnqYWbHZDFXUb2hoS00udkWRQM35WHwxTmQsZEgubrF 8ePaRoYovAu6goksih9w65tBuOa2skvJm5GajzKbH60uB5POTdKhEdThF2xQi5c6Vxiz/n JtVx6DnOibxFz58tEbsnwBWhMw213lc= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=dfEDF1uP; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf16.hostedemail.com: domain of lkp@intel.com designates 192.198.163.18 as permitted sender) smtp.mailfrom=lkp@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709811060; a=rsa-sha256; cv=none; b=8hEGUtum/RUgs1Avp+/ICjkILt+AYd4cmq+PouR9RtBONuexuXZET1sPRTjjX5R43JVj3+ F+MnUdn1pYOifErAvXPocmqsmrhiii1jDqkk8uv9arNW2j+iTIho2TXxp3aqdaFi90BFww 6nGbVtJrW2aUAm+cJRAO7jc7pw15OxQ= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1709811060; x=1741347060; h=date:from:to:cc:subject:message-id:mime-version; bh=HRkNkU9Ia5XFyjG2XEH3c/ueOLKfzwp4TDjYOAOBVfk=; b=dfEDF1uP6zlIDpcut5H+Jcy34w40q+WodF/piCU7tIuxKDHTcNYWqR/c XvEVlVF5o3usxcMV5LIv4zCQumfwsMN5g7NcuZZHMkCNE0mLWOyB7CLlq +K/8+lDYNVRVOFUZBpVvnAZDI9Sb1fyCOTRo1r/DKj5bk7pygINMFJw7Y TNEUtfQI9scrMc2XH6UT9xRQ10WhcZ9uJS8Nkxdl3/z6L4Is7JDo9Wmvn z9xz8fTLIbfoHrR7UfV+SwcLvuemnOmPQWFtSj+3A60XQD7mumxS2/vot u9mB8mGNpyVKjrGgqxChOk46F6F8x6NOD8HRW7Jx0YYiSSUTN7qkc6wkb Q==; X-IronPort-AV: E=McAfee;i="6600,9927,11005"; a="4321001" X-IronPort-AV: E=Sophos;i="6.07,211,1708416000"; d="scan'208";a="4321001" Received: from orviesa001.jf.intel.com ([10.64.159.141]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Mar 2024 03:30:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,211,1708416000"; d="scan'208";a="47574436" Received: from lkp-server01.sh.intel.com (HELO b21307750695) ([10.239.97.150]) by orviesa001.jf.intel.com with ESMTP; 07 Mar 2024 03:30:56 -0800 Received: from kbuild by b21307750695 with local (Exim 4.96) (envelope-from ) id 1riBxd-000589-1s; Thu, 07 Mar 2024 11:30:53 +0000 Date: Thu, 7 Mar 2024 19:30:14 +0800 From: kernel test robot To: Filipe Manana Cc: oe-kbuild-all@lists.linux.dev, Linux Memory Management List , David Sterba , Josef Bacik Subject: [linux-next:master 11882/12647] fs/btrfs/extent_io.c:3246:26: warning: 'last_extent_end' may be used uninitialized Message-ID: <202403071947.NUYuBx0G-lkp@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Rspam-User: X-Stat-Signature: qpiuuga4i5xgda695wqraxgpdyou8c4o X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 1369F180025 X-HE-Tag: 1709811059-402983 X-HE-Meta: U2FsdGVkX19nvglrH1vGMyjBPiU1Q9EGupOtSHevNNUBrihDuqs8tKm7yhU0ARmM8XyUlEuVZqyWs6ghKSBr6PTkFvHoi1TJ0WqR7ipxN6Sdr8nxPgHAJBI7QDDK8vzGEjNsb/HRGWVIVRMsMfqsf9i+gy5o1ucWTL3SHKuTyy4GtYyQIeVPXmk8phrLq5Q52oMmyR1M1KpN5IjIcmRPhngUKVRQ2uSaEdq+lltZ6rqWCNJ2MpB4i+ut/t2/Kc0CtK9mlhnD9ETcl/MKbA997LvLFyCI4wOO7tpMT72WmG6PjCPKXpK5GLhd8bKOwHRSGUmUW+PsunCNrFUnXpS19GlEysIeRtXEc3mV7TwbqkWh+aSYQqCHgPYtBwC5WEc6Y/yT20WGU19pVgixKy0Qk8irho6bSyO15TgP3fBUlEWZt3/gZ89omPNlevT68rGVOHk3ECVmgzAcngaN8feIt/2RzdgONGtAGYI3qeL9i44scfzVLyt4YSVG5omYJRPrzhgHzOxuH14brJICnNJ+osKLaMgI0h35wZwYcnRMbxTLIj1/2bSkfVdMsLrpJ+b8G7lI0S1n45Scc0aieV7aRQFzkL9tmXda4fQCPybPqgkm60TIgKLD37S0FBOhFYpi+cA7nzCmOsTxmLxvIboEa5ePXmH3nTD0DobzjydJaMO916y9DOOGwM5x/45n3K+lVbGm0/6TT55S5xP+Orvt694MWbeFpNWtWhDHAzu7qxsCd7U86Tuv6X60XnjJIR/dk9W2ZsX6H2R7BIIyZJAAfA19P1b/qlcoJUireijdPnLsLIBwtDbl1O9UGmQ9JlqeYWS6iM3yChAjQIXc66VQJStlhNAyWV/U5XRe+i+irIQvCiWcxvtP9VmktB4c665IIdxnoUYA3QYTgV8U3EivTfPt5wmRIx3bHIRpeoZq4pdZIhs24022mElQfU/heoooYYFeT2TdHT4ZoDd/0/V C/dTcjdU 1APD2ysK01fZbVT2U2/f527V4j+FCib7JgBqrwWgAAWXhtRw095btizdfkrFyyOtnZXcsBUMhQEZE8EK2QCKQihb9MZp9UdDAR527+YFb36Omn+AhW+kc7lSqyA1WeAb9XtIQxRIHBS1JcN3nXq1iIsMugTHvMRfZRO8Ylap7Q9CkQLiXl2u1Kcu0YTOnu5fKHoQ/IDhJRdVI3eHDfR1gMgzCmMRleU/EDvxU4c1lznHZ0gB2q+UDL3sMUCqgm0QkILiWxXRUCbN9F8De8lCBcqzFBcKhiMrNWKiWiqNHqZYq3G/inmgvn4FNM28qlpCgwK19u+TB8QFoLNiJtMvAWVrbkGNPo5hK93n0RUoGA6Ef2NrVN5YxAU4kf1TgcreZQT+bHtcIeYpH0HO1DB9GIdY5MyqFYSia9Og1pCofglv1UX9N/o8HhhcXBXQi54tSsOvFBQp2iWOXmc7ccivVicjuED8PEAw32odz X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: 1843e16d2df9d98427ef8045589571749d627cf7 commit: 978b63f7464abcfd364a6c95f734282c50f3decf [11882/12647] btrfs: fix race when detecting delalloc ranges during fiemap config: s390-randconfig-c005-20230325 (https://download.01.org/0day-ci/archive/20240307/202403071947.NUYuBx0G-lkp@intel.com/config) compiler: s390-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240307/202403071947.NUYuBx0G-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot | Closes: https://lore.kernel.org/oe-kbuild-all/202403071947.NUYuBx0G-lkp@intel.com/ Note: it may well be a FALSE warning. FWIW you are at least aware of it now. http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings All warnings (new ones prefixed by >>): fs/btrfs/extent_io.c: In function 'extent_fiemap': >> fs/btrfs/extent_io.c:3246:26: warning: 'last_extent_end' may be used uninitialized [-Wmaybe-uninitialized] 3246 | if (cache.cached && cache.offset + cache.len >= last_extent_end) { | ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/extent_io.c:3064:13: note: 'last_extent_end' was declared here 3064 | u64 last_extent_end; | ^~~~~~~~~~~~~~~ vim +/last_extent_end +3246 fs/btrfs/extent_io.c ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3054 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3055 int extent_fiemap(struct btrfs_inode *inode, struct fiemap_extent_info *fieinfo, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3056 u64 start, u64 len) ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3057 { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3058 const u64 ino = btrfs_ino(inode); 978b63f7464abc Filipe Manana 2024-02-28 3059 struct extent_state *cached_state = NULL; b3e744fe6d289b Filipe Manana 2022-11-11 3060 struct extent_state *delalloc_cached_state = NULL; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3061 struct btrfs_path *path; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3062 struct fiemap_cache cache = { 0 }; 61dbb952f0a5f5 Filipe Manana 2022-10-11 3063 struct btrfs_backref_share_check_ctx *backref_ctx; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3064 u64 last_extent_end; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3065 u64 prev_extent_end; b0ad381fa76902 Josef Bacik 2024-02-12 3066 u64 range_start; b0ad381fa76902 Josef Bacik 2024-02-12 3067 u64 range_end; b0ad381fa76902 Josef Bacik 2024-02-12 3068 const u64 sectorsize = inode->root->fs_info->sectorsize; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3069 bool stopped = false; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3070 int ret; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3071 978b63f7464abc Filipe Manana 2024-02-28 3072 cache.entries_size = PAGE_SIZE / sizeof(struct btrfs_fiemap_entry); 978b63f7464abc Filipe Manana 2024-02-28 3073 cache.entries = kmalloc_array(cache.entries_size, 978b63f7464abc Filipe Manana 2024-02-28 3074 sizeof(struct btrfs_fiemap_entry), 978b63f7464abc Filipe Manana 2024-02-28 3075 GFP_KERNEL); 84a7949d409753 Filipe Manana 2022-10-11 3076 backref_ctx = btrfs_alloc_backref_share_check_ctx(); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3077 path = btrfs_alloc_path(); 978b63f7464abc Filipe Manana 2024-02-28 3078 if (!cache.entries || !backref_ctx || !path) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3079 ret = -ENOMEM; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3080 goto out; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3081 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3082 978b63f7464abc Filipe Manana 2024-02-28 3083 restart: b0ad381fa76902 Josef Bacik 2024-02-12 3084 range_start = round_down(start, sectorsize); b0ad381fa76902 Josef Bacik 2024-02-12 3085 range_end = round_up(start + len, sectorsize); b0ad381fa76902 Josef Bacik 2024-02-12 3086 prev_extent_end = range_start; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3087 978b63f7464abc Filipe Manana 2024-02-28 3088 lock_extent(&inode->io_tree, range_start, range_end, &cached_state); 978b63f7464abc Filipe Manana 2024-02-28 3089 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3090 ret = fiemap_find_last_extent_offset(inode, path, &last_extent_end); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3091 if (ret < 0) 978b63f7464abc Filipe Manana 2024-02-28 3092 goto out_unlock; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3093 btrfs_release_path(path); fe09e16cc8d444 Liu Bo 2013-09-22 3094 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3095 path->reada = READA_FORWARD; b0ad381fa76902 Josef Bacik 2024-02-12 3096 ret = fiemap_search_slot(inode, path, range_start); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3097 if (ret < 0) { 978b63f7464abc Filipe Manana 2024-02-28 3098 goto out_unlock; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3099 } else if (ret > 0) { b8f164e3e67f22 Filipe Manana 2022-09-01 3100 /* ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3101 * No file extent item found, but we may have delalloc between ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3102 * the current offset and i_size. So check for that. b8f164e3e67f22 Filipe Manana 2022-09-01 3103 */ ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3104 ret = 0; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3105 goto check_eof_delalloc; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3106 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3107 b0ad381fa76902 Josef Bacik 2024-02-12 3108 while (prev_extent_end < range_end) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3109 struct extent_buffer *leaf = path->nodes[0]; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3110 struct btrfs_file_extent_item *ei; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3111 struct btrfs_key key; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3112 u64 extent_end; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3113 u64 extent_len; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3114 u64 extent_offset = 0; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3115 u64 extent_gen; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3116 u64 disk_bytenr = 0; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3117 u64 flags = 0; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3118 int extent_type; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3119 u8 compression; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3120 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3121 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3122 if (key.objectid != ino || key.type != BTRFS_EXTENT_DATA_KEY) ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3123 break; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3124 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3125 extent_end = btrfs_file_extent_end(path); b8f164e3e67f22 Filipe Manana 2022-09-01 3126 fe09e16cc8d444 Liu Bo 2013-09-22 3127 /* ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3128 * The first iteration can leave us at an extent item that ends ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3129 * before our range's start. Move to the next item. fe09e16cc8d444 Liu Bo 2013-09-22 3130 */ b0ad381fa76902 Josef Bacik 2024-02-12 3131 if (extent_end <= range_start) ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3132 goto next_item; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3133 877c14767f106a Filipe Manana 2022-10-11 3134 backref_ctx->curr_leaf_bytenr = leaf->start; 877c14767f106a Filipe Manana 2022-10-11 3135 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3136 /* We have in implicit hole (NO_HOLES feature enabled). */ ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3137 if (prev_extent_end < key.offset) { b0ad381fa76902 Josef Bacik 2024-02-12 3138 const u64 hole_end = min(key.offset, range_end) - 1; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3139 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3140 ret = fiemap_process_hole(inode, fieinfo, &cache, b3e744fe6d289b Filipe Manana 2022-11-11 3141 &delalloc_cached_state, 61dbb952f0a5f5 Filipe Manana 2022-10-11 3142 backref_ctx, 0, 0, 0, b0ad381fa76902 Josef Bacik 2024-02-12 3143 prev_extent_end, hole_end); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3144 if (ret < 0) { 978b63f7464abc Filipe Manana 2024-02-28 3145 goto out_unlock; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3146 } else if (ret > 0) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3147 /* fiemap_fill_next_extent() told us to stop. */ ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3148 stopped = true; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3149 break; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3150 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3151 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3152 /* We've reached the end of the fiemap range, stop. */ b0ad381fa76902 Josef Bacik 2024-02-12 3153 if (key.offset >= range_end) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3154 stopped = true; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3155 break; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3156 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3157 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3158 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3159 extent_len = extent_end - key.offset; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3160 ei = btrfs_item_ptr(leaf, path->slots[0], ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3161 struct btrfs_file_extent_item); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3162 compression = btrfs_file_extent_compression(leaf, ei); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3163 extent_type = btrfs_file_extent_type(leaf, ei); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3164 extent_gen = btrfs_file_extent_generation(leaf, ei); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3165 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3166 if (extent_type != BTRFS_FILE_EXTENT_INLINE) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3167 disk_bytenr = btrfs_file_extent_disk_bytenr(leaf, ei); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3168 if (compression == BTRFS_COMPRESS_NONE) ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3169 extent_offset = btrfs_file_extent_offset(leaf, ei); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3170 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3171 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3172 if (compression != BTRFS_COMPRESS_NONE) ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3173 flags |= FIEMAP_EXTENT_ENCODED; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3174 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3175 if (extent_type == BTRFS_FILE_EXTENT_INLINE) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3176 flags |= FIEMAP_EXTENT_DATA_INLINE; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3177 flags |= FIEMAP_EXTENT_NOT_ALIGNED; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3178 ret = emit_fiemap_extent(fieinfo, &cache, key.offset, 0, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3179 extent_len, flags); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3180 } else if (extent_type == BTRFS_FILE_EXTENT_PREALLOC) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3181 ret = fiemap_process_hole(inode, fieinfo, &cache, b3e744fe6d289b Filipe Manana 2022-11-11 3182 &delalloc_cached_state, 61dbb952f0a5f5 Filipe Manana 2022-10-11 3183 backref_ctx, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3184 disk_bytenr, extent_offset, 84a7949d409753 Filipe Manana 2022-10-11 3185 extent_gen, key.offset, 84a7949d409753 Filipe Manana 2022-10-11 3186 extent_end - 1); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3187 } else if (disk_bytenr == 0) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3188 /* We have an explicit hole. */ ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3189 ret = fiemap_process_hole(inode, fieinfo, &cache, b3e744fe6d289b Filipe Manana 2022-11-11 3190 &delalloc_cached_state, 61dbb952f0a5f5 Filipe Manana 2022-10-11 3191 backref_ctx, 0, 0, 0, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3192 key.offset, extent_end - 1); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3193 } else { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3194 /* We have a regular extent. */ ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3195 if (fieinfo->fi_extents_max) { ceb707da9ad92a Filipe Manana 2022-10-11 3196 ret = btrfs_is_data_extent_shared(inode, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3197 disk_bytenr, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3198 extent_gen, 61dbb952f0a5f5 Filipe Manana 2022-10-11 3199 backref_ctx); dc046b10c8b7d4 Josef Bacik 2014-09-10 3200 if (ret < 0) 978b63f7464abc Filipe Manana 2024-02-28 3201 goto out_unlock; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3202 else if (ret > 0) fe09e16cc8d444 Liu Bo 2013-09-22 3203 flags |= FIEMAP_EXTENT_SHARED; 1506fcc8189cdd Yehuda Sadeh 2009-01-21 3204 } 1506fcc8189cdd Yehuda Sadeh 2009-01-21 3205 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3206 ret = emit_fiemap_extent(fieinfo, &cache, key.offset, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3207 disk_bytenr + extent_offset, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3208 extent_len, flags); 1506fcc8189cdd Yehuda Sadeh 2009-01-21 3209 } 1506fcc8189cdd Yehuda Sadeh 2009-01-21 3210 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3211 if (ret < 0) { 978b63f7464abc Filipe Manana 2024-02-28 3212 goto out_unlock; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3213 } else if (ret > 0) { 978b63f7464abc Filipe Manana 2024-02-28 3214 /* emit_fiemap_extent() told us to stop. */ ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3215 stopped = true; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3216 break; 1506fcc8189cdd Yehuda Sadeh 2009-01-21 3217 } 09fbc1c8e7b00e Filipe Manana 2022-09-01 3218 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3219 prev_extent_end = extent_end; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3220 next_item: 09fbc1c8e7b00e Filipe Manana 2022-09-01 3221 if (fatal_signal_pending(current)) { 09fbc1c8e7b00e Filipe Manana 2022-09-01 3222 ret = -EINTR; 978b63f7464abc Filipe Manana 2024-02-28 3223 goto out_unlock; 09fbc1c8e7b00e Filipe Manana 2022-09-01 3224 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3225 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3226 ret = fiemap_next_leaf_item(inode, path); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3227 if (ret < 0) { 978b63f7464abc Filipe Manana 2024-02-28 3228 goto out_unlock; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3229 } else if (ret > 0) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3230 /* No more file extent items for this inode. */ ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3231 break; 26e726afe01c1c Chengyu Song 2015-03-24 3232 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3233 cond_resched(); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3234 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3235 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3236 check_eof_delalloc: b0ad381fa76902 Josef Bacik 2024-02-12 3237 if (!stopped && prev_extent_end < range_end) { b3e744fe6d289b Filipe Manana 2022-11-11 3238 ret = fiemap_process_hole(inode, fieinfo, &cache, b3e744fe6d289b Filipe Manana 2022-11-11 3239 &delalloc_cached_state, backref_ctx, b0ad381fa76902 Josef Bacik 2024-02-12 3240 0, 0, 0, prev_extent_end, range_end - 1); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3241 if (ret < 0) 978b63f7464abc Filipe Manana 2024-02-28 3242 goto out_unlock; b0ad381fa76902 Josef Bacik 2024-02-12 3243 prev_extent_end = range_end; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3244 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3245 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 @3246 if (cache.cached && cache.offset + cache.len >= last_extent_end) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3247 const u64 i_size = i_size_read(&inode->vfs_inode); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3248 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3249 if (prev_extent_end < i_size) { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3250 u64 delalloc_start; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3251 u64 delalloc_end; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3252 bool delalloc; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3253 ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3254 delalloc = btrfs_find_delalloc_in_range(inode, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3255 prev_extent_end, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3256 i_size - 1, b3e744fe6d289b Filipe Manana 2022-11-11 3257 &delalloc_cached_state, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3258 &delalloc_start, ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3259 &delalloc_end); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3260 if (!delalloc) ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3261 cache.flags |= FIEMAP_EXTENT_LAST; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3262 } else { ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3263 cache.flags |= FIEMAP_EXTENT_LAST; ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3264 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3265 } ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3266 978b63f7464abc Filipe Manana 2024-02-28 3267 out_unlock: 978b63f7464abc Filipe Manana 2024-02-28 3268 unlock_extent(&inode->io_tree, range_start, range_end, &cached_state); 978b63f7464abc Filipe Manana 2024-02-28 3269 978b63f7464abc Filipe Manana 2024-02-28 3270 if (ret == BTRFS_FIEMAP_FLUSH_CACHE) { 978b63f7464abc Filipe Manana 2024-02-28 3271 btrfs_release_path(path); 978b63f7464abc Filipe Manana 2024-02-28 3272 ret = flush_fiemap_cache(fieinfo, &cache); 978b63f7464abc Filipe Manana 2024-02-28 3273 if (ret) 978b63f7464abc Filipe Manana 2024-02-28 3274 goto out; 978b63f7464abc Filipe Manana 2024-02-28 3275 len -= cache.next_search_offset - start; 978b63f7464abc Filipe Manana 2024-02-28 3276 start = cache.next_search_offset; 978b63f7464abc Filipe Manana 2024-02-28 3277 goto restart; 978b63f7464abc Filipe Manana 2024-02-28 3278 } else if (ret < 0) { 978b63f7464abc Filipe Manana 2024-02-28 3279 goto out; 978b63f7464abc Filipe Manana 2024-02-28 3280 } 978b63f7464abc Filipe Manana 2024-02-28 3281 978b63f7464abc Filipe Manana 2024-02-28 3282 /* 978b63f7464abc Filipe Manana 2024-02-28 3283 * Must free the path before emitting to the fiemap buffer because we 978b63f7464abc Filipe Manana 2024-02-28 3284 * may have a non-cloned leaf and if the fiemap buffer is memory mapped 978b63f7464abc Filipe Manana 2024-02-28 3285 * to a file, a write into it (through btrfs_page_mkwrite()) may trigger 978b63f7464abc Filipe Manana 2024-02-28 3286 * waiting for an ordered extent that in order to complete needs to 978b63f7464abc Filipe Manana 2024-02-28 3287 * modify that leaf, therefore leading to a deadlock. 978b63f7464abc Filipe Manana 2024-02-28 3288 */ 978b63f7464abc Filipe Manana 2024-02-28 3289 btrfs_free_path(path); 978b63f7464abc Filipe Manana 2024-02-28 3290 path = NULL; 978b63f7464abc Filipe Manana 2024-02-28 3291 978b63f7464abc Filipe Manana 2024-02-28 3292 ret = flush_fiemap_cache(fieinfo, &cache); 978b63f7464abc Filipe Manana 2024-02-28 3293 if (ret) 978b63f7464abc Filipe Manana 2024-02-28 3294 goto out; 978b63f7464abc Filipe Manana 2024-02-28 3295 5c5aff98f83abc David Sterba 2019-03-20 3296 ret = emit_last_fiemap_cache(fieinfo, &cache); ac3c0d36a2a2f7 Filipe Manana 2022-09-01 3297 out: b3e744fe6d289b Filipe Manana 2022-11-11 3298 free_extent_state(delalloc_cached_state); 978b63f7464abc Filipe Manana 2024-02-28 3299 kfree(cache.entries); 84a7949d409753 Filipe Manana 2022-10-11 3300 btrfs_free_backref_share_ctx(backref_ctx); e02d48eaaed77f Colin Ian King 2019-07-05 3301 btrfs_free_path(path); 1506fcc8189cdd Yehuda Sadeh 2009-01-21 3302 return ret; 1506fcc8189cdd Yehuda Sadeh 2009-01-21 3303 } 1506fcc8189cdd Yehuda Sadeh 2009-01-21 3304 :::::: The code at line 3246 was first introduced by commit :::::: ac3c0d36a2a2f7a8f9778faef3f2639f5bf29d44 btrfs: make fiemap more efficient and accurate reporting extent sharedness :::::: TO: Filipe Manana :::::: CC: David Sterba -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki