CC: [email protected] CC: [email protected] CC: [email protected] TO: Gao Xiang <[email protected]> CC: Liu Bo <[email protected]> CC: Chao Yu <[email protected]>, Chao Yu <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: dfd42facf1e4ada021b939b4e19c935dcdd55566 commit: bb88e8da00253bea0e7f0f4cdfd7910572d7799f erofs: use meta buffers for xattr operations date: 5 weeks ago :::::: branch date: 20 hours ago :::::: commit date: 5 weeks ago config: arm-randconfig-c002-20220206 (https://download.01.org/0day-ci/archive/20220208/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 6daaf5a44925592c764c59219b0024ee06317028) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bb88e8da00253bea0e7f0f4cdfd7910572d7799f git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout bb88e8da00253bea0e7f0f4cdfd7910572d7799f # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^ include/linux/compiler_types.h:335:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:323:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:307:2: note: expanded from macro '__compiletime_assert' do { \ ^ include/linux/list.h:37:2: note: Use of memory after it is freed WRITE_ONCE(list->next, list); ^ include/asm-generic/rwonce.h:61:2: note: expanded from macro 'WRITE_ONCE' __WRITE_ONCE(x, val); \ ^~~~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:55:30: note: expanded from macro '__WRITE_ONCE' *(volatile typeof(x) *)&(x) = (val); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ include/linux/list.h:137:13: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] __list_del(entry->prev, entry->next); ^ fs/btrfs/block-group.c:3898:2: note: Loop condition is true. Entering loop body while (!list_empty(&info->caching_block_groups)) { ^ fs/btrfs/block-group.c:3902:3: note: Calling 'btrfs_put_caching_control' btrfs_put_caching_control(caching_ctl); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/block-group.c:382:2: note: Taking true branch if (refcount_dec_and_test(&ctl->count)) ^ fs/btrfs/block-group.c:383:3: note: Memory is released kfree(ctl); ^~~~~~~~~~ fs/btrfs/block-group.c:3902:3: note: Returning; memory was released via 1st parameter btrfs_put_caching_control(caching_ctl); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/block-group.c:3898:2: note: Loop condition is true. Entering loop body while (!list_empty(&info->caching_block_groups)) { ^ fs/btrfs/block-group.c:3901:3: note: Calling 'list_del' list_del(&caching_ctl->list); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:148:2: note: Calling '__list_del_entry' __list_del_entry(entry); ^~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:134:6: note: Assuming the condition is false if (!__list_del_entry_valid(entry)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:134:2: note: Taking false branch if (!__list_del_entry_valid(entry)) ^ include/linux/list.h:137:13: note: Use of memory after it is freed __list_del(entry->prev, entry->next); ^~~~~~~~~~~ include/linux/list.h:149:14: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] entry->next = LIST_POISON1; ^ fs/btrfs/block-group.c:3898:2: note: Loop condition is true. Entering loop body while (!list_empty(&info->caching_block_groups)) { ^ fs/btrfs/block-group.c:3902:3: note: Calling 'btrfs_put_caching_control' btrfs_put_caching_control(caching_ctl); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/block-group.c:382:2: note: Taking true branch if (refcount_dec_and_test(&ctl->count)) ^ fs/btrfs/block-group.c:383:3: note: Memory is released kfree(ctl); ^~~~~~~~~~ fs/btrfs/block-group.c:3902:3: note: Returning; memory was released via 1st parameter btrfs_put_caching_control(caching_ctl); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/block-group.c:3898:2: note: Loop condition is true. Entering loop body while (!list_empty(&info->caching_block_groups)) { ^ fs/btrfs/block-group.c:3901:3: note: Calling 'list_del' list_del(&caching_ctl->list); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:149:14: note: Use of memory after it is freed entry->next = LIST_POISON1; ~~~~~~~~~~~ ^ Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. >> fs/erofs/xattr.c:205:10: warning: Dereference of null pointer >> [clang-analyzer-core.NullDereference] entry = *(struct erofs_xattr_entry *)(it->kaddr + it->ofs); ^ fs/erofs/xattr.c:629:6: note: Assuming 'rcu' is false if (rcu) ^~~ fs/erofs/xattr.c:629:2: note: Taking false branch if (rcu) ^ fs/erofs/xattr.c:632:2: note: Control jumps to 'case 16384:' at line 636 switch (type) { ^ fs/erofs/xattr.c:638:3: note: Execution continues on line 643 break; ^ fs/erofs/xattr.c:643:7: note: Calling 'erofs_getxattr' rc = erofs_getxattr(inode, prefix, "", NULL, 0); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:400:7: note: 'name' is non-null if (!name) ^~~~ fs/erofs/xattr.c:400:2: note: Taking false branch if (!name) ^ fs/erofs/xattr.c:404:6: note: 'ret' is 0 if (ret) ^~~ fs/erofs/xattr.c:404:2: note: Taking false branch if (ret) ^ fs/erofs/xattr.c:409:14: note: Field 'len' is <= EROFS_NAME_LEN if (it.name.len > EROFS_NAME_LEN) ^ fs/erofs/xattr.c:409:2: note: Taking false branch if (it.name.len > EROFS_NAME_LEN) ^ fs/erofs/xattr.c:419:8: note: Calling 'inline_getxattr' ret = inline_getxattr(inode, &it); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:344:8: note: Calling 'inline_xattr_iter_begin' ret = inline_xattr_iter_begin(&it->it, inode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:166:6: note: Assuming 'xattr_header_sz' is < field 'xattr_isize' if (xattr_header_sz >= vi->xattr_isize) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:166:2: note: Taking false branch if (xattr_header_sz >= vi->xattr_isize) { ^ fs/erofs/xattr.c:178:2: note: Taking false branch if (IS_ERR(it->kaddr)) ^ fs/erofs/xattr.c:344:8: note: Returning from 'inline_xattr_iter_begin' ret = inline_xattr_iter_begin(&it->it, inode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:345:6: note: 'ret' is >= 0 if (ret < 0) ^~~ fs/erofs/xattr.c:345:2: note: Taking false branch if (ret < 0) ^ fs/erofs/xattr.c:349:2: note: Loop condition is true. Entering loop body while (remaining) { ^ fs/erofs/xattr.c:350:9: note: Calling 'xattr_foreach' ret = xattr_foreach(&it->it, &find_xattr_handlers, &remaining); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:196:8: note: Calling 'xattr_iter_fixup' err = xattr_iter_fixup(it); ^~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:146:6: note: Assuming the condition is false if (it->ofs < EROFS_BLKSIZ) ^~~~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:146:2: note: Taking false branch if (it->ofs < EROFS_BLKSIZ) ^ fs/erofs/xattr.c:150:2: note: Value assigned to 'it.it.kaddr' it->kaddr = erofs_read_metabuf(&it->buf, it->sb, it->blkaddr, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:152:6: note: Assuming the condition is true if (IS_ERR(it->kaddr)) ^~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:152:2: note: Taking true branch if (IS_ERR(it->kaddr)) ^ fs/erofs/xattr.c:153:3: note: Returning value, which participates in a condition later return PTR_ERR(it->kaddr); ^~~~~~~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:196:8: note: Returning from 'xattr_iter_fixup' err = xattr_iter_fixup(it); ^~~~~~~~~~~~~~~~~~~~ fs/erofs/xattr.c:197:6: note: Assuming 'err' is 0 if (err) ^~~ fs/erofs/xattr.c:197:2: note: Taking false branch if (err) ^ fs/erofs/xattr.c:205:10: note: Dereference of null pointer entry = *(struct erofs_xattr_entry *)(it->kaddr + it->ofs); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. vim +205 fs/erofs/xattr.c b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 182 bdf30cef10558d2 drivers/staging/erofs/xattr.c Gao Xiang 2018-09-19 183 /* bdf30cef10558d2 drivers/staging/erofs/xattr.c Gao Xiang 2018-09-19 184 * Regardless of success or failure, `xattr_foreach' will end up with bdf30cef10558d2 drivers/staging/erofs/xattr.c Gao Xiang 2018-09-19 185 * `ofs' pointing to the next xattr item rather than an arbitrary position. bdf30cef10558d2 drivers/staging/erofs/xattr.c Gao Xiang 2018-09-19 186 */ b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 187 static int xattr_foreach(struct xattr_iter *it, 447a3621b3835b6 drivers/staging/erofs/xattr.c Julian Merida 2019-03-18 188 const struct xattr_iter_handlers *op, 447a3621b3835b6 drivers/staging/erofs/xattr.c Julian Merida 2019-03-18 189 unsigned int *tlimit) b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 190 { b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 191 struct erofs_xattr_entry entry; 7dd68b147d60e5e drivers/staging/erofs/xattr.c Thomas Weißschuh 2018-09-10 192 unsigned int value_sz, processed, slice; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 193 int err; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 194 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 195 /* 0. fixup blkaddr, ofs, ipage */ cadf1ccf1b0021d drivers/staging/erofs/xattr.c Gao Xiang 2018-08-21 196 err = xattr_iter_fixup(it); cadf1ccf1b0021d drivers/staging/erofs/xattr.c Gao Xiang 2018-08-21 197 if (err) cadf1ccf1b0021d drivers/staging/erofs/xattr.c Gao Xiang 2018-08-21 198 return err; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 199 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 200 /* b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 201 * 1. read xattr entry to the memory, b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 202 * since we do EROFS_XATTR_ALIGN b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 203 * therefore entry should be in the page b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 204 */ b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 @205 entry = *(struct erofs_xattr_entry *)(it->kaddr + it->ofs); 561fb35a9d04ca7 drivers/staging/erofs/xattr.c Bhanusree Pola 2019-03-22 206 if (tlimit) { b6796abd3cc155e fs/erofs/xattr.c Gao Xiang 2019-09-04 207 unsigned int entry_sz = erofs_xattr_entry_size(&entry); b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 208 9ddc7004f6aae68 drivers/staging/erofs/xattr.c Gao Xiang 2019-08-13 209 /* xattr on-disk corruption: xattr entry beyond xattr_isize */ 8d8a09b093d7073 fs/erofs/xattr.c Gao Xiang 2019-08-30 210 if (*tlimit < entry_sz) { 9ddc7004f6aae68 drivers/staging/erofs/xattr.c Gao Xiang 2019-08-13 211 DBG_BUGON(1); a6b9b1d5eae61a6 drivers/staging/erofs/xattr.c Gao Xiang 2019-08-14 212 return -EFSCORRUPTED; 9ddc7004f6aae68 drivers/staging/erofs/xattr.c Gao Xiang 2019-08-13 213 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 214 *tlimit -= entry_sz; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 215 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 216 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 217 it->ofs += sizeof(struct erofs_xattr_entry); b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 218 value_sz = le16_to_cpu(entry.e_value_size); b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 219 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 220 /* handle entry */ b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 221 err = op->entry(it, &entry); b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 222 if (err) { b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 223 it->ofs += entry.e_name_len + value_sz; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 224 goto out; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 225 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 226 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 227 /* 2. handle xattr name (ofs will finally be at the end of name) */ b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 228 processed = 0; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 229 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 230 while (processed < entry.e_name_len) { b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 231 if (it->ofs >= EROFS_BLKSIZ) { 9ddc7004f6aae68 drivers/staging/erofs/xattr.c Gao Xiang 2019-08-13 232 DBG_BUGON(it->ofs > EROFS_BLKSIZ); b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 233 cadf1ccf1b0021d drivers/staging/erofs/xattr.c Gao Xiang 2018-08-21 234 err = xattr_iter_fixup(it); cadf1ccf1b0021d drivers/staging/erofs/xattr.c Gao Xiang 2018-08-21 235 if (err) cadf1ccf1b0021d drivers/staging/erofs/xattr.c Gao Xiang 2018-08-21 236 goto out; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 237 it->ofs = 0; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 238 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 239 bb88e8da00253be fs/erofs/xattr.c Gao Xiang 2022-01-02 240 slice = min_t(unsigned int, EROFS_BLKSIZ - it->ofs, b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 241 entry.e_name_len - processed); b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 242 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 243 /* handle name */ b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 244 err = op->name(it, processed, it->kaddr + it->ofs, slice); b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 245 if (err) { b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 246 it->ofs += entry.e_name_len - processed + value_sz; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 247 goto out; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 248 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 249 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 250 it->ofs += slice; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 251 processed += slice; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 252 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 253 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 254 /* 3. handle xattr value */ b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 255 processed = 0; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 256 561fb35a9d04ca7 drivers/staging/erofs/xattr.c Bhanusree Pola 2019-03-22 257 if (op->alloc_buffer) { b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 258 err = op->alloc_buffer(it, value_sz); b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 259 if (err) { b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 260 it->ofs += value_sz; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 261 goto out; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 262 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 263 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 264 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 265 while (processed < value_sz) { b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 266 if (it->ofs >= EROFS_BLKSIZ) { 9ddc7004f6aae68 drivers/staging/erofs/xattr.c Gao Xiang 2019-08-13 267 DBG_BUGON(it->ofs > EROFS_BLKSIZ); cadf1ccf1b0021d drivers/staging/erofs/xattr.c Gao Xiang 2018-08-21 268 cadf1ccf1b0021d drivers/staging/erofs/xattr.c Gao Xiang 2018-08-21 269 err = xattr_iter_fixup(it); cadf1ccf1b0021d drivers/staging/erofs/xattr.c Gao Xiang 2018-08-21 270 if (err) cadf1ccf1b0021d drivers/staging/erofs/xattr.c Gao Xiang 2018-08-21 271 goto out; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 272 it->ofs = 0; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 273 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 274 bb88e8da00253be fs/erofs/xattr.c Gao Xiang 2022-01-02 275 slice = min_t(unsigned int, EROFS_BLKSIZ - it->ofs, b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 276 value_sz - processed); b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 277 op->value(it, processed, it->kaddr + it->ofs, slice); b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 278 it->ofs += slice; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 279 processed += slice; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 280 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 281 b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 282 out: bdf30cef10558d2 drivers/staging/erofs/xattr.c Gao Xiang 2018-09-19 283 /* xattrs should be 4-byte aligned (on-disk constraint) */ b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 284 it->ofs = EROFS_XATTR_ALIGN(it->ofs); 6614f76530c102a drivers/staging/erofs/xattr.c Gao Xiang 2018-09-19 285 return err < 0 ? err : 0; b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 286 } b17500a0fdbae10 drivers/staging/erofs/xattr.c Gao Xiang 2018-07-26 287 :::::: The code at line 205 was first introduced by commit :::::: b17500a0fdbae10a8ce274dd523106f16d114339 staging: erofs: introduce xattr & acl support :::::: TO: Gao Xiang <[email protected]> :::::: CC: Greg Kroah-Hartman <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
