CC: [email protected] CC: [email protected] CC: [email protected] TO: Xiubo Li <[email protected]> CC: Jeff Layton <[email protected]>
tree: https://github.com/ceph/ceph-client.git wip-fscrypt head: 4ec0d0e0cc68c6525ace02e7a8a5bb57a4242997 commit: 198de1e330730790cd177912db20bd05d3f635d4 [51/63] ceph: add truncate size handling support for fscrypt :::::: branch date: 3 days ago :::::: commit date: 3 days ago config: x86_64-randconfig-c007 (https://download.01.org/0day-ci/archive/20220222/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e) 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 # https://github.com/ceph/ceph-client/commit/198de1e330730790cd177912db20bd05d3f635d4 git remote add ceph-client https://github.com/ceph/ceph-client.git git fetch --no-tags ceph-client wip-fscrypt git checkout 198de1e330730790cd177912db20bd05d3f635d4 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 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 >>) arch/x86/kernel/cpu/resctrl/rdtgroup.c:2868:2: note: Taking true branch if (IS_ERR(kn)) { ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2871:3: note: Control jumps to line 2923 goto out_free_rgrp; ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2923:2: note: Memory is released kfree(rdtgrp); ^~~~~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2947:8: note: Returning; memory was released via 5th parameter ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTMON_GROUP, &rdtgrp); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2948:6: note: Assuming 'ret' is 0 if (ret) ^~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2948:2: note: Taking false branch if (ret) ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2951:10: note: Use of memory after it is freed prgrp = rdtgrp->mon.parent; ^~~~~~~~~~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2980:7: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] kn = rdtgrp->kn; ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:3041:6: note: Assuming the condition is false if (strchr(name, '\n')) ^~~~~~~~~~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:3041:2: note: Taking false branch if (strchr(name, '\n')) ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:3049:6: note: Assuming 'rdt_alloc_capable' is true if (rdt_alloc_capable && parent_kn == rdtgroup_default.kn) ^~~~~~~~~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:3049:6: note: Left side of '&&' is true arch/x86/kernel/cpu/resctrl/rdtgroup.c:3049:27: note: Assuming 'parent_kn' is equal to field 'kn' if (rdt_alloc_capable && parent_kn == rdtgroup_default.kn) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:3049:2: note: Taking true branch if (rdt_alloc_capable && parent_kn == rdtgroup_default.kn) ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:3050:10: note: Calling 'rdtgroup_mkdir_ctrl_mon' return rdtgroup_mkdir_ctrl_mon(parent_kn, name, mode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2976:8: note: Calling 'mkdir_rdt_prepare' ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTCTRL_GROUP, &rdtgrp); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2841:7: note: 'prdtgrp' is non-null if (!prdtgrp) { ^~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2841:2: note: Taking false branch if (!prdtgrp) { ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2846:6: note: 'rtype' is not equal to RDTMON_GROUP if (rtype == RDTMON_GROUP && ^~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2846:28: note: Left side of '&&' is false if (rtype == RDTMON_GROUP && ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2856:6: note: Assuming 'rdtgrp' is non-null if (!rdtgrp) { ^~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2856:2: note: Taking false branch if (!rdtgrp) { ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2868:2: note: Taking true branch if (IS_ERR(kn)) { ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2871:3: note: Control jumps to line 2923 goto out_free_rgrp; ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2923:2: note: Memory is released kfree(rdtgrp); ^~~~~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2976:8: note: Returning; memory was released via 5th parameter ret = mkdir_rdt_prepare(parent_kn, name, mode, RDTCTRL_GROUP, &rdtgrp); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2977:6: note: Assuming 'ret' is 0 if (ret) ^~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2977:2: note: Taking false branch if (ret) ^ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2980:7: note: Use of memory after it is freed kn = rdtgrp->kn; ^~~~~~~~~~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2987:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = 0; ^ ~ arch/x86/kernel/cpu/resctrl/rdtgroup.c:2987:2: note: Value stored to 'ret' is never read ret = 0; ^ ~ Suppressed 4 warnings (4 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. 9 warnings generated. >> fs/ceph/inode.c:2278:9: warning: Value stored to 'i_size' during its >> initialization is never read [clang-analyzer-deadcode.DeadStores] loff_t i_size = i_size_read(inode); ^~~~~~ ~~~~~~~~~~~~~~~~~~ fs/ceph/inode.c:2278:9: note: Value stored to 'i_size' during its initialization is never read loff_t i_size = i_size_read(inode); ^~~~~~ ~~~~~~~~~~~~~~~~~~ >> fs/ceph/inode.c:2345:3: warning: Value stored to 'ret' is never read >> [clang-analyzer-deadcode.DeadStores] ret = 0; ^ ~ fs/ceph/inode.c:2345:3: note: Value stored to 'ret' is never read ret = 0; ^ ~ fs/ceph/inode.c:2378:2: warning: 1st function call argument is an uninitialized value [clang-analyzer-core.CallAndMessage] kunmap_local(iov.iov_base); ^ include/linux/highmem-internal.h:252:2: note: expanded from macro 'kunmap_local' __kunmap_local(__addr); \ ^ ~~~~~~ fs/ceph/inode.c:2283:6: note: Assuming 'ret' is >= 0 if (ret < 0) ^~~~~~~ fs/ceph/inode.c:2283:2: note: Taking false branch if (ret < 0) ^ fs/ceph/inode.c:2288:2: note: Taking false branch dout("%s size %lld -> %lld got cap refs on %s, issued %s\n", __func__, ^ include/linux/ceph/ceph_debug.h:35:25: note: expanded from macro 'dout' # define dout(fmt, ...) pr_debug(" " fmt, ##__VA_ARGS__) ^ include/linux/printk.h:576:2: note: expanded from macro 'pr_debug' no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) ^ include/linux/printk.h:131:2: note: expanded from macro 'no_printk' if (0) \ ^ fs/ceph/inode.c:2293:6: note: Assuming the condition is false if (issued & (CEPH_CAP_FILE_BUFFER)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/ceph/inode.c:2293:2: note: Taking false branch if (issued & (CEPH_CAP_FILE_BUFFER)) ^ fs/ceph/inode.c:2297:6: note: Assuming 'page' is equal to NULL if (page == NULL) { ^~~~~~~~~~~~ fs/ceph/inode.c:2297:2: note: Taking true branch if (page == NULL) { ^ fs/ceph/inode.c:2299:3: note: Control jumps to line 2376 goto out; ^ fs/ceph/inode.c:2376:2: note: Taking false branch dout("%s %p size dropping cap refs on %s\n", __func__, ^ include/linux/ceph/ceph_debug.h:35:25: note: expanded from macro 'dout' # define dout(fmt, ...) pr_debug(" " fmt, ##__VA_ARGS__) ^ include/linux/printk.h:576:2: note: expanded from macro 'pr_debug' no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) ^ include/linux/printk.h:131:2: note: expanded from macro 'no_printk' if (0) \ ^ fs/ceph/inode.c:2378:2: note: Taking false branch kunmap_local(iov.iov_base); ^ include/linux/highmem-internal.h:251:2: note: expanded from macro 'kunmap_local' BUILD_BUG_ON(__same_type((__addr), struct page *)); \ ^ include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON' BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition) ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:346:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:334:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:326:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ fs/ceph/inode.c:2378:2: note: Loop condition is false. Exiting loop kunmap_local(iov.iov_base); ^ include/linux/highmem-internal.h:251:2: note: expanded from macro 'kunmap_local' BUILD_BUG_ON(__same_type((__addr), struct page *)); \ ^ include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON' BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition) ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:346:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:334:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:318:2: note: expanded from macro '__compiletime_assert' do { \ ^ fs/ceph/inode.c:2378:2: note: 1st function call argument is an uninitialized value kunmap_local(iov.iov_base); vim +/i_size +2278 fs/ceph/inode.c 069ec826c8d190 Jeff Layton 2020-09-03 2255 198de1e3307307 Xiubo Li 2022-01-12 2256 /* 198de1e3307307 Xiubo Li 2022-01-12 2257 * Transfer the encrypted last block to the MDS and the MDS 198de1e3307307 Xiubo Li 2022-01-12 2258 * will help update it when truncating a smaller size. 198de1e3307307 Xiubo Li 2022-01-12 2259 * 198de1e3307307 Xiubo Li 2022-01-12 2260 * We don't support a PAGE_SIZE that is smaller than the 198de1e3307307 Xiubo Li 2022-01-12 2261 * CEPH_FSCRYPT_BLOCK_SIZE. 198de1e3307307 Xiubo Li 2022-01-12 2262 */ 198de1e3307307 Xiubo Li 2022-01-12 2263 static int fill_fscrypt_truncate(struct inode *inode, 198de1e3307307 Xiubo Li 2022-01-12 2264 struct ceph_mds_request *req, 198de1e3307307 Xiubo Li 2022-01-12 2265 struct iattr *attr) 198de1e3307307 Xiubo Li 2022-01-12 2266 { 198de1e3307307 Xiubo Li 2022-01-12 2267 struct ceph_inode_info *ci = ceph_inode(inode); 198de1e3307307 Xiubo Li 2022-01-12 2268 int boff = attr->ia_size % CEPH_FSCRYPT_BLOCK_SIZE; 198de1e3307307 Xiubo Li 2022-01-12 2269 loff_t pos, orig_pos = round_down(attr->ia_size, CEPH_FSCRYPT_BLOCK_SIZE); 198de1e3307307 Xiubo Li 2022-01-12 2270 u64 block = orig_pos >> CEPH_FSCRYPT_BLOCK_SHIFT; 198de1e3307307 Xiubo Li 2022-01-12 2271 struct ceph_pagelist *pagelist = NULL; 198de1e3307307 Xiubo Li 2022-01-12 2272 struct kvec iov; 198de1e3307307 Xiubo Li 2022-01-12 2273 struct iov_iter iter; 198de1e3307307 Xiubo Li 2022-01-12 2274 struct page *page = NULL; 198de1e3307307 Xiubo Li 2022-01-12 2275 struct ceph_fscrypt_truncate_size_header header; 198de1e3307307 Xiubo Li 2022-01-12 2276 int retry_op = 0; 198de1e3307307 Xiubo Li 2022-01-12 2277 int len = CEPH_FSCRYPT_BLOCK_SIZE; 198de1e3307307 Xiubo Li 2022-01-12 @2278 loff_t i_size = i_size_read(inode); 198de1e3307307 Xiubo Li 2022-01-12 2279 int got, ret, issued; 198de1e3307307 Xiubo Li 2022-01-12 2280 u64 objver; 198de1e3307307 Xiubo Li 2022-01-12 2281 198de1e3307307 Xiubo Li 2022-01-12 2282 ret = __ceph_get_caps(inode, NULL, CEPH_CAP_FILE_RD, 0, -1, &got); 198de1e3307307 Xiubo Li 2022-01-12 2283 if (ret < 0) 198de1e3307307 Xiubo Li 2022-01-12 2284 return ret; 198de1e3307307 Xiubo Li 2022-01-12 2285 198de1e3307307 Xiubo Li 2022-01-12 2286 issued = __ceph_caps_issued(ci, NULL); 198de1e3307307 Xiubo Li 2022-01-12 2287 198de1e3307307 Xiubo Li 2022-01-12 2288 dout("%s size %lld -> %lld got cap refs on %s, issued %s\n", __func__, 198de1e3307307 Xiubo Li 2022-01-12 2289 i_size, attr->ia_size, ceph_cap_string(got), 198de1e3307307 Xiubo Li 2022-01-12 2290 ceph_cap_string(issued)); 198de1e3307307 Xiubo Li 2022-01-12 2291 198de1e3307307 Xiubo Li 2022-01-12 2292 /* Try to writeback the dirty pagecaches */ 198de1e3307307 Xiubo Li 2022-01-12 2293 if (issued & (CEPH_CAP_FILE_BUFFER)) 198de1e3307307 Xiubo Li 2022-01-12 2294 filemap_write_and_wait(inode->i_mapping); 198de1e3307307 Xiubo Li 2022-01-12 2295 198de1e3307307 Xiubo Li 2022-01-12 2296 page = __page_cache_alloc(GFP_KERNEL); 198de1e3307307 Xiubo Li 2022-01-12 2297 if (page == NULL) { 198de1e3307307 Xiubo Li 2022-01-12 2298 ret = -ENOMEM; 198de1e3307307 Xiubo Li 2022-01-12 2299 goto out; 198de1e3307307 Xiubo Li 2022-01-12 2300 } 198de1e3307307 Xiubo Li 2022-01-12 2301 198de1e3307307 Xiubo Li 2022-01-12 2302 pagelist = ceph_pagelist_alloc(GFP_KERNEL); 198de1e3307307 Xiubo Li 2022-01-12 2303 if (!pagelist) { 198de1e3307307 Xiubo Li 2022-01-12 2304 ret = -ENOMEM; 198de1e3307307 Xiubo Li 2022-01-12 2305 goto out; 198de1e3307307 Xiubo Li 2022-01-12 2306 } 198de1e3307307 Xiubo Li 2022-01-12 2307 198de1e3307307 Xiubo Li 2022-01-12 2308 iov.iov_base = kmap_local_page(page); 198de1e3307307 Xiubo Li 2022-01-12 2309 iov.iov_len = len; 198de1e3307307 Xiubo Li 2022-01-12 2310 iov_iter_kvec(&iter, READ, &iov, 1, len); 198de1e3307307 Xiubo Li 2022-01-12 2311 198de1e3307307 Xiubo Li 2022-01-12 2312 pos = orig_pos; 198de1e3307307 Xiubo Li 2022-01-12 2313 ret = __ceph_sync_read(inode, &pos, &iter, &retry_op, &objver); 198de1e3307307 Xiubo Li 2022-01-12 2314 ceph_put_cap_refs(ci, got); 198de1e3307307 Xiubo Li 2022-01-12 2315 if (ret < 0) 198de1e3307307 Xiubo Li 2022-01-12 2316 goto out; 198de1e3307307 Xiubo Li 2022-01-12 2317 198de1e3307307 Xiubo Li 2022-01-12 2318 /* Insert the header first */ 198de1e3307307 Xiubo Li 2022-01-12 2319 header.ver = 1; 198de1e3307307 Xiubo Li 2022-01-12 2320 header.compat = 1; 198de1e3307307 Xiubo Li 2022-01-12 2321 header.change_attr = cpu_to_le64(inode_peek_iversion_raw(inode)); 198de1e3307307 Xiubo Li 2022-01-12 2322 198de1e3307307 Xiubo Li 2022-01-12 2323 /* 198de1e3307307 Xiubo Li 2022-01-12 2324 * Always set the block_size to CEPH_FSCRYPT_BLOCK_SIZE, 198de1e3307307 Xiubo Li 2022-01-12 2325 * because in MDS it may need this to do the truncate. 198de1e3307307 Xiubo Li 2022-01-12 2326 */ 198de1e3307307 Xiubo Li 2022-01-12 2327 header.block_size = cpu_to_le32(CEPH_FSCRYPT_BLOCK_SIZE); 198de1e3307307 Xiubo Li 2022-01-12 2328 198de1e3307307 Xiubo Li 2022-01-12 2329 /* 198de1e3307307 Xiubo Li 2022-01-12 2330 * If we hit a hole here, we should just skip filling 198de1e3307307 Xiubo Li 2022-01-12 2331 * the fscrypt for the request, because once the fscrypt 198de1e3307307 Xiubo Li 2022-01-12 2332 * is enabled, the file will be split into many blocks 198de1e3307307 Xiubo Li 2022-01-12 2333 * with the size of CEPH_FSCRYPT_BLOCK_SIZE, if there 198de1e3307307 Xiubo Li 2022-01-12 2334 * has a hole, the hole size should be multiple of block 198de1e3307307 Xiubo Li 2022-01-12 2335 * size. 198de1e3307307 Xiubo Li 2022-01-12 2336 * 198de1e3307307 Xiubo Li 2022-01-12 2337 * If the Rados object doesn't exist, it will be set to 0. 198de1e3307307 Xiubo Li 2022-01-12 2338 */ 198de1e3307307 Xiubo Li 2022-01-12 2339 if (!objver) { 198de1e3307307 Xiubo Li 2022-01-12 2340 dout("%s hit hole, ppos %lld < size %lld\n", __func__, 198de1e3307307 Xiubo Li 2022-01-12 2341 pos, i_size); 198de1e3307307 Xiubo Li 2022-01-12 2342 198de1e3307307 Xiubo Li 2022-01-12 2343 header.data_len = cpu_to_le32(8 + 8 + 4); 198de1e3307307 Xiubo Li 2022-01-12 2344 header.file_offset = 0; 198de1e3307307 Xiubo Li 2022-01-12 @2345 ret = 0; 198de1e3307307 Xiubo Li 2022-01-12 2346 } else { 198de1e3307307 Xiubo Li 2022-01-12 2347 header.data_len = cpu_to_le32(8 + 8 + 4 + CEPH_FSCRYPT_BLOCK_SIZE); 198de1e3307307 Xiubo Li 2022-01-12 2348 header.file_offset = cpu_to_le64(orig_pos); 198de1e3307307 Xiubo Li 2022-01-12 2349 198de1e3307307 Xiubo Li 2022-01-12 2350 /* truncate and zero out the extra contents for the last block */ 198de1e3307307 Xiubo Li 2022-01-12 2351 memset(iov.iov_base + boff, 0, PAGE_SIZE - boff); 198de1e3307307 Xiubo Li 2022-01-12 2352 198de1e3307307 Xiubo Li 2022-01-12 2353 /* encrypt the last block */ 198de1e3307307 Xiubo Li 2022-01-12 2354 ret = ceph_fscrypt_encrypt_block_inplace(inode, page, 198de1e3307307 Xiubo Li 2022-01-12 2355 CEPH_FSCRYPT_BLOCK_SIZE, 198de1e3307307 Xiubo Li 2022-01-12 2356 0, block, 198de1e3307307 Xiubo Li 2022-01-12 2357 GFP_KERNEL); 198de1e3307307 Xiubo Li 2022-01-12 2358 if (ret) 198de1e3307307 Xiubo Li 2022-01-12 2359 goto out; 198de1e3307307 Xiubo Li 2022-01-12 2360 } 198de1e3307307 Xiubo Li 2022-01-12 2361 198de1e3307307 Xiubo Li 2022-01-12 2362 /* Insert the header */ 198de1e3307307 Xiubo Li 2022-01-12 2363 ret = ceph_pagelist_append(pagelist, &header, sizeof(header)); 198de1e3307307 Xiubo Li 2022-01-12 2364 if (ret) 198de1e3307307 Xiubo Li 2022-01-12 2365 goto out; 198de1e3307307 Xiubo Li 2022-01-12 2366 198de1e3307307 Xiubo Li 2022-01-12 2367 if (header.block_size) { 198de1e3307307 Xiubo Li 2022-01-12 2368 /* Append the last block contents to pagelist */ 198de1e3307307 Xiubo Li 2022-01-12 2369 ret = ceph_pagelist_append(pagelist, iov.iov_base, 198de1e3307307 Xiubo Li 2022-01-12 2370 CEPH_FSCRYPT_BLOCK_SIZE); 198de1e3307307 Xiubo Li 2022-01-12 2371 if (ret) 198de1e3307307 Xiubo Li 2022-01-12 2372 goto out; 198de1e3307307 Xiubo Li 2022-01-12 2373 } 198de1e3307307 Xiubo Li 2022-01-12 2374 req->r_pagelist = pagelist; 198de1e3307307 Xiubo Li 2022-01-12 2375 out: 198de1e3307307 Xiubo Li 2022-01-12 2376 dout("%s %p size dropping cap refs on %s\n", __func__, 198de1e3307307 Xiubo Li 2022-01-12 2377 inode, ceph_cap_string(got)); 198de1e3307307 Xiubo Li 2022-01-12 2378 kunmap_local(iov.iov_base); 198de1e3307307 Xiubo Li 2022-01-12 2379 if (page) 198de1e3307307 Xiubo Li 2022-01-12 2380 __free_pages(page, 0); 198de1e3307307 Xiubo Li 2022-01-12 2381 if (ret && pagelist) 198de1e3307307 Xiubo Li 2022-01-12 2382 ceph_pagelist_release(pagelist); 198de1e3307307 Xiubo Li 2022-01-12 2383 return ret; 198de1e3307307 Xiubo Li 2022-01-12 2384 } 198de1e3307307 Xiubo Li 2022-01-12 2385 --- 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]
