From: kernel test robot <lkp@intel.com>
To: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Cc: kbuild-all@lists.01.org,
Linux Memory Management List <linux-mm@kvack.org>
Subject: [linux-next:master 5968/6619] fs/ntfs3/attrib.c:2145:38: sparse: sparse: restricted __le16 degrades to integer
Date: Wed, 29 Jun 2022 20:51:21 +0800 [thread overview]
Message-ID: <202206292052.LsFui3zO-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: c4ef528bd006febc7de444d9775b28706d924f78
commit: aa30eccb24e5a66a2cf7f7b34a69c3651d12cc6a [5968/6619] fs/ntfs3: Fallocate (FALLOC_FL_INSERT_RANGE) implementation
config: i386-randconfig-s002-20220627 (https://download.01.org/0day-ci/archive/20220629/202206292052.LsFui3zO-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=aa30eccb24e5a66a2cf7f7b34a69c3651d12cc6a
git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git fetch --no-tags linux-next master
git checkout aa30eccb24e5a66a2cf7f7b34a69c3651d12cc6a
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash fs/ntfs3/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> fs/ntfs3/attrib.c:2145:38: sparse: sparse: restricted __le16 degrades to integer
>> fs/ntfs3/attrib.c:2229:34: sparse: sparse: cast to restricted __le64
>> fs/ntfs3/attrib.c:2229:32: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le64 [usertype] data_size @@ got unsigned long long [usertype] @@
fs/ntfs3/attrib.c:2229:32: sparse: expected restricted __le64 [usertype] data_size
fs/ntfs3/attrib.c:2229:32: sparse: got unsigned long long [usertype]
fs/ntfs3/attrib.c:2230:35: sparse: sparse: cast to restricted __le64
>> fs/ntfs3/attrib.c:2230:33: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le64 [usertype] alloc_size @@ got unsigned long long [usertype] @@
fs/ntfs3/attrib.c:2230:33: sparse: expected restricted __le64 [usertype] alloc_size
fs/ntfs3/attrib.c:2230:33: sparse: got unsigned long long [usertype]
vim +2145 fs/ntfs3/attrib.c
2084
2085 /*
2086 * attr_insert_range - Insert range (hole) in file.
2087 * Not for normal files.
2088 */
2089 int attr_insert_range(struct ntfs_inode *ni, u64 vbo, u64 bytes)
2090 {
2091 int err = 0;
2092 struct runs_tree *run = &ni->file.run;
2093 struct ntfs_sb_info *sbi = ni->mi.sbi;
2094 struct ATTRIB *attr = NULL, *attr_b;
2095 struct ATTR_LIST_ENTRY *le, *le_b;
2096 struct mft_inode *mi, *mi_b;
2097 CLST vcn, svcn, evcn1, len, next_svcn;
2098 u64 data_size, alloc_size;
2099 u32 mask;
2100 __le16 a_flags;
2101
2102 if (!bytes)
2103 return 0;
2104
2105 le_b = NULL;
2106 attr_b = ni_find_attr(ni, NULL, &le_b, ATTR_DATA, NULL, 0, NULL, &mi_b);
2107 if (!attr_b)
2108 return -ENOENT;
2109
2110 if (!is_attr_ext(attr_b)) {
2111 /* It was checked above. See fallocate. */
2112 return -EOPNOTSUPP;
2113 }
2114
2115 if (!attr_b->non_res) {
2116 data_size = le32_to_cpu(attr_b->res.data_size);
2117 mask = sbi->cluster_mask; /* cluster_size - 1 */
2118 } else {
2119 data_size = le64_to_cpu(attr_b->nres.data_size);
2120 mask = (sbi->cluster_size << attr_b->nres.c_unit) - 1;
2121 }
2122
2123 if (vbo > data_size) {
2124 /* Insert range after the file size is not allowed. */
2125 return -EINVAL;
2126 }
2127
2128 if ((vbo & mask) || (bytes & mask)) {
2129 /* Allow to insert only frame aligned ranges. */
2130 return -EINVAL;
2131 }
2132
2133 vcn = vbo >> sbi->cluster_bits;
2134 len = bytes >> sbi->cluster_bits;
2135
2136 down_write(&ni->file.run_lock);
2137
2138 if (!attr_b->non_res) {
2139 err = attr_set_size(ni, ATTR_DATA, NULL, 0, run,
2140 data_size + bytes, NULL, false, &attr);
2141 if (err)
2142 goto out;
2143 if (!attr->non_res) {
2144 /* Still resident. */
> 2145 char *data = Add2Ptr(attr, attr->res.data_off);
2146
2147 memmove(data + bytes, data, bytes);
2148 memset(data, 0, bytes);
2149 err = 0;
2150 goto out;
2151 }
2152 /* Resident files becomes nonresident. */
2153 le_b = NULL;
2154 attr_b = ni_find_attr(ni, NULL, &le_b, ATTR_DATA, NULL, 0, NULL,
2155 &mi_b);
2156 if (!attr_b)
2157 return -ENOENT;
2158 if (!attr_b->non_res) {
2159 err = -EINVAL;
2160 goto out;
2161 }
2162 data_size = le64_to_cpu(attr_b->nres.data_size);
2163 alloc_size = le64_to_cpu(attr_b->nres.alloc_size);
2164 }
2165
2166 /*
2167 * Enumerate all attribute segments and shift start vcn.
2168 */
2169 a_flags = attr_b->flags;
2170 svcn = le64_to_cpu(attr_b->nres.svcn);
2171 evcn1 = le64_to_cpu(attr_b->nres.evcn) + 1;
2172
2173 if (svcn <= vcn && vcn < evcn1) {
2174 attr = attr_b;
2175 le = le_b;
2176 mi = mi_b;
2177 } else if (!le_b) {
2178 err = -EINVAL;
2179 goto out;
2180 } else {
2181 le = le_b;
2182 attr = ni_find_attr(ni, attr_b, &le, ATTR_DATA, NULL, 0, &vcn,
2183 &mi);
2184 if (!attr) {
2185 err = -EINVAL;
2186 goto out;
2187 }
2188
2189 svcn = le64_to_cpu(attr->nres.svcn);
2190 evcn1 = le64_to_cpu(attr->nres.evcn) + 1;
2191 }
2192
2193 run_truncate(run, 0); /* clear cached values. */
2194 err = attr_load_runs(attr, ni, run, NULL);
2195 if (err)
2196 goto out;
2197
2198 if (!run_insert_range(run, vcn, len)) {
2199 err = -ENOMEM;
2200 goto out;
2201 }
2202
2203 /* Try to pack in current record as much as possible. */
2204 err = mi_pack_runs(mi, attr, run, evcn1 + len - svcn);
2205 if (err)
2206 goto out;
2207
2208 next_svcn = le64_to_cpu(attr->nres.evcn) + 1;
2209 run_truncate_head(run, next_svcn);
2210
2211 while ((attr = ni_enum_attr_ex(ni, attr, &le, &mi)) &&
2212 attr->type == ATTR_DATA && !attr->name_len) {
2213 le64_add_cpu(&attr->nres.svcn, len);
2214 le64_add_cpu(&attr->nres.evcn, len);
2215 if (le) {
2216 le->vcn = attr->nres.svcn;
2217 ni->attr_list.dirty = true;
2218 }
2219 mi->dirty = true;
2220 }
2221
2222 /*
2223 * Update primary attribute segment in advance.
2224 * pointer attr_b may become invalid (layout of mft is changed)
2225 */
2226 if (vbo <= ni->i_valid)
2227 ni->i_valid += bytes;
2228
> 2229 attr_b->nres.data_size = le64_to_cpu(data_size + bytes);
> 2230 attr_b->nres.alloc_size = le64_to_cpu(alloc_size + bytes);
--
0-DAY CI Kernel Test Service
https://01.org/lkp
reply other threads:[~2022-06-29 12:52 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202206292052.LsFui3zO-lkp@intel.com \
--to=lkp@intel.com \
--cc=almaz.alexandrovich@paragon-software.com \
--cc=kbuild-all@lists.01.org \
--cc=linux-mm@kvack.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.