CC: [email protected] TO: Dave Chinner <[email protected]> tree: https://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs.git xfs-cil-scale-3 head: 3b5181b310e0f2064f2aafb6143cdb0e920f5858 commit: 68a175316bac0337bbf0b1c29fb10b63e3c00915 [29/30] xfs: xlog_sync() manually adjusts grant head space :::::: branch date: 3 days ago :::::: commit date: 3 days ago config: i386-randconfig-c001-20211210 (https://download.01.org/0day-ci/archive/20211212/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 097a1cb1d5ebb3a0ec4bcaed8ba3ff6a8e33c00a) 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://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs.git/commit/?id=68a175316bac0337bbf0b1c29fb10b63e3c00915 git remote add dgc-xfs https://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs.git git fetch --no-tags dgc-xfs xfs-cil-scale-3 git checkout 68a175316bac0337bbf0b1c29fb10b63e3c00915 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=i386 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 >>) .high = (1ULL << 63) | ((__u64) (size) << 20) | (inode), \ ^~~~~ 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 4 warnings generated. 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. 2 warnings generated. Suppressed 2 warnings (2 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. 1 warning generated. Suppressed 1 warnings (1 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. drivers/gpu/drm/i915/gt/intel_region_lmem.c:83:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = init_fake_lmem_bar(mem); ^ ~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/gt/intel_region_lmem.c:83:3: note: Value stored to 'ret' is never read ret = init_fake_lmem_bar(mem); ^ ~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 2 warnings (2 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. 3 warnings generated. Suppressed 3 warnings (3 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 1 warning generated. Suppressed 1 warnings (1 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 3 warnings generated. fs/gfs2/file.c:793:3: warning: Value stored to 'pages' is never read [clang-analyzer-deadcode.DeadStores] pages = min(pages, nr_dirtied); ^ fs/gfs2/file.c:793:3: note: Value stored to 'pages' is never read Suppressed 2 warnings (2 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. fs/xfs/xfs_log.c:1004:2: warning: Value stored to 'error' is never read [clang-analyzer-deadcode.DeadStores] error = xlog_force_iclog(iclog); ^ ~~~~~~~~~~~~~~~~~~~~~~~ fs/xfs/xfs_log.c:1004:2: note: Value stored to 'error' is never read error = xlog_force_iclog(iclog); ^ ~~~~~~~~~~~~~~~~~~~~~~~ fs/xfs/xfs_log.c:3662:2: warning: Value stored to 'p' is never read [clang-analyzer-deadcode.DeadStores] p = &iclog->ic_header; ^ ~~~~~~~~~~~~~~~~~ fs/xfs/xfs_log.c:3662:2: note: Value stored to 'p' is never read p = &iclog->ic_header; ^ ~~~~~~~~~~~~~~~~~ fs/xfs/xfs_log.c:3672:2: warning: Value stored to 'ophead' is never read [clang-analyzer-deadcode.DeadStores] ophead = ptr; ^ ~~~ fs/xfs/xfs_log.c:3672:2: note: Value stored to 'ophead' is never read ophead = ptr; ^ ~~~ Suppressed 3 warnings (3 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. 4 warnings generated. >> fs/xfs/xfs_log_cil.c:1200:2: warning: Value stored to 'ticket' is never read >> [clang-analyzer-deadcode.DeadStores] ticket = ctx->ticket; ^ ~~~~~~~~~~~ fs/xfs/xfs_log_cil.c:1200:2: note: Value stored to 'ticket' is never read ticket = ctx->ticket; ^ ~~~~~~~~~~~ Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 3 warnings generated. fs/btrfs/free-space-tree.c:1454:3: warning: Value stored to 'total_found' is never read [clang-analyzer-deadcode.DeadStores] total_found += add_new_free_space(block_group, extent_start, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/free-space-tree.c:1454:3: note: Value stored to 'total_found' is never read total_found += add_new_free_space(block_group, extent_start, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 3 warnings generated. fs/btrfs/space-info.c:1544:3: warning: Value stored to 'used' is never read [clang-analyzer-deadcode.DeadStores] used += orig_bytes; ^ ~~~~~~~~~~ fs/btrfs/space-info.c:1544:3: note: Value stored to 'used' is never read used += orig_bytes; ^ ~~~~~~~~~~ Suppressed 2 warnings (2 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. 3 warnings generated. fs/btrfs/block-rsv.c:114:3: warning: Value stored to 'qgroup_to_release' is never read [clang-analyzer-deadcode.DeadStores] qgroup_to_release = block_rsv->qgroup_rsv_size; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/block-rsv.c:114:3: note: Value stored to 'qgroup_to_release' is never read qgroup_to_release = block_rsv->qgroup_rsv_size; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 3 warnings generated. drivers/iio/dac/ad7303.c:37:8: warning: Excessive padding in 'struct ad7303_state' (86 padding bytes, where 22 is optimal). Optimal fields order: data, config, spi, vdd_reg, vref_reg, lock, dac_cache, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct ad7303_state { ~~~~~~~^~~~~~~~~~~~~~ drivers/iio/dac/ad7303.c:37:8: note: Excessive padding in 'struct ad7303_state' (86 padding bytes, where 22 is optimal). Optimal fields order: data, config, spi, vdd_reg, vref_reg, lock, dac_cache, consider reordering the fields or adding explicit padding members struct ad7303_state { ~~~~~~~^~~~~~~~~~~~~~ Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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 +/ticket +1200 fs/xfs/xfs_log_cil.c 12cbf4e77f00dd Dave Chinner 2021-12-09 998 71e330b593905e Dave Chinner 2010-05-21 999 /* c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1000 * Push the Committed Item List to the log. c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1001 * c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1002 * If the current sequence is the same as xc_push_seq we need to do a flush. If c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1003 * xc_push_seq is less than the current sequence, then it has already been a44f13edf0ebb4 Dave Chinner 2010-08-24 1004 * flushed and we don't need to do anything - the caller will wait for it to a44f13edf0ebb4 Dave Chinner 2010-08-24 1005 * complete if necessary. a44f13edf0ebb4 Dave Chinner 2010-08-24 1006 * c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1007 * xc_push_seq is checked unlocked against the sequence number for a match. c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1008 * Hence we can allow log forces to run racily and not issue pushes for the c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1009 * same sequence twice. If we get a race between multiple pushes for the same c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1010 * sequence they will block on the first one and then abort, hence avoiding c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1011 * needless pushes. c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1012 */ c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1013 static void c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1014 xlog_cil_push_work( c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1015 struct work_struct *work) 71e330b593905e Dave Chinner 2010-05-21 1016 { 39823d0fac9416 Dave Chinner 2021-08-10 1017 struct xfs_cil_ctx *ctx = 39823d0fac9416 Dave Chinner 2021-08-10 1018 container_of(work, struct xfs_cil_ctx, push_work); 39823d0fac9416 Dave Chinner 2021-08-10 1019 struct xfs_cil *cil = ctx->cil; c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1020 struct xlog *log = cil->xc_log; 71e330b593905e Dave Chinner 2010-05-21 1021 struct xfs_log_vec *lv; 71e330b593905e Dave Chinner 2010-05-21 1022 struct xfs_cil_ctx *new_ctx; 6f186adfd5efa5 Dave Chinner 2021-12-09 1023 int num_iovecs = 0; 6f186adfd5efa5 Dave Chinner 2021-12-09 1024 int num_bytes = 0; 71e330b593905e Dave Chinner 2010-05-21 1025 int error = 0; 06825339535768 Dave Chinner 2021-12-09 1026 struct xlog_cil_trans_hdr thdr; aaae3238d5a91e Dave Chinner 2021-12-09 1027 struct xfs_log_vec lvhdr = {}; 0dc8f7f139f07a Dave Chinner 2021-07-27 1028 xfs_lsn_t preflush_tail_lsn; 0dc8f7f139f07a Dave Chinner 2021-07-27 1029 xfs_csn_t push_seq; bad77c375e8de6 Dave Chinner 2021-06-18 1030 struct bio bio; bad77c375e8de6 Dave Chinner 2021-06-18 1031 DECLARE_COMPLETION_ONSTACK(bdev_flush); 0020a190cf3eac Dave Chinner 2021-08-10 1032 bool push_commit_stable; 68a175316bac03 Dave Chinner 2021-12-09 1033 struct xlog_ticket *ticket; 71e330b593905e Dave Chinner 2010-05-21 1034 39823d0fac9416 Dave Chinner 2021-08-10 1035 new_ctx = xlog_cil_ctx_alloc(); 71e330b593905e Dave Chinner 2010-05-21 1036 new_ctx->ticket = xlog_cil_ticket_alloc(log); 71e330b593905e Dave Chinner 2010-05-21 1037 71e330b593905e Dave Chinner 2010-05-21 1038 down_write(&cil->xc_ctx_lock); 71e330b593905e Dave Chinner 2010-05-21 1039 4bb928cdb900d0 Dave Chinner 2013-08-12 1040 spin_lock(&cil->xc_push_lock); 4c2d542f2e7865 Dave Chinner 2012-04-23 1041 push_seq = cil->xc_push_seq; 4c2d542f2e7865 Dave Chinner 2012-04-23 1042 ASSERT(push_seq <= ctx->sequence); 0020a190cf3eac Dave Chinner 2021-08-10 1043 push_commit_stable = cil->xc_push_commit_stable; 0020a190cf3eac Dave Chinner 2021-08-10 1044 cil->xc_push_commit_stable = false; 71e330b593905e Dave Chinner 2010-05-21 1045 0e7ab7efe77451 Dave Chinner 2020-03-24 1046 /* 19f4e7cc819771 Dave Chinner 2021-06-18 1047 * As we are about to switch to a new, empty CIL context, we no longer 19f4e7cc819771 Dave Chinner 2021-06-18 1048 * need to throttle tasks on CIL space overruns. Wake any waiters that 19f4e7cc819771 Dave Chinner 2021-06-18 1049 * the hard push throttle may have caught so they can start committing 19f4e7cc819771 Dave Chinner 2021-06-18 1050 * to the new context. The ctx->xc_push_lock provides the serialisation 19f4e7cc819771 Dave Chinner 2021-06-18 1051 * necessary for safely using the lockless waitqueue_active() check in 19f4e7cc819771 Dave Chinner 2021-06-18 1052 * this context. 19f4e7cc819771 Dave Chinner 2021-06-18 1053 */ 19f4e7cc819771 Dave Chinner 2021-06-18 1054 if (waitqueue_active(&cil->xc_push_wait)) c7f87f3984cfa1 Dave Chinner 2020-06-16 1055 wake_up_all(&cil->xc_push_wait); 0e7ab7efe77451 Dave Chinner 2020-03-24 1056 4c2d542f2e7865 Dave Chinner 2012-04-23 1057 /* 4c2d542f2e7865 Dave Chinner 2012-04-23 1058 * Check if we've anything to push. If there is nothing, then we don't 4c2d542f2e7865 Dave Chinner 2012-04-23 1059 * move on to a new sequence number and so we have to be able to push 4c2d542f2e7865 Dave Chinner 2012-04-23 1060 * this sequence again later. 4c2d542f2e7865 Dave Chinner 2012-04-23 1061 */ 5c52eacb2b4420 Dave Chinner 2021-12-09 1062 if (test_bit(XLOG_CIL_EMPTY, &cil->xc_flags)) { 4c2d542f2e7865 Dave Chinner 2012-04-23 1063 cil->xc_push_seq = 0; 4bb928cdb900d0 Dave Chinner 2013-08-12 1064 spin_unlock(&cil->xc_push_lock); a44f13edf0ebb4 Dave Chinner 2010-08-24 1065 goto out_skip; 4c2d542f2e7865 Dave Chinner 2012-04-23 1066 } 4c2d542f2e7865 Dave Chinner 2012-04-23 1067 a44f13edf0ebb4 Dave Chinner 2010-08-24 1068 cf085a1b5d2214 Joe Perches 2019-11-07 1069 /* check for a previously pushed sequence */ 39823d0fac9416 Dave Chinner 2021-08-10 1070 if (push_seq < ctx->sequence) { 8af3dcd3c89aef Dave Chinner 2014-09-23 1071 spin_unlock(&cil->xc_push_lock); df806158b0f6eb Dave Chinner 2010-05-17 1072 goto out_skip; 8af3dcd3c89aef Dave Chinner 2014-09-23 1073 } 8af3dcd3c89aef Dave Chinner 2014-09-23 1074 8af3dcd3c89aef Dave Chinner 2014-09-23 1075 /* 8af3dcd3c89aef Dave Chinner 2014-09-23 1076 * We are now going to push this context, so add it to the committing 8af3dcd3c89aef Dave Chinner 2014-09-23 1077 * list before we do anything else. This ensures that anyone waiting on 8af3dcd3c89aef Dave Chinner 2014-09-23 1078 * this push can easily detect the difference between a "push in 8af3dcd3c89aef Dave Chinner 2014-09-23 1079 * progress" and "CIL is empty, nothing to do". 8af3dcd3c89aef Dave Chinner 2014-09-23 1080 * 8af3dcd3c89aef Dave Chinner 2014-09-23 1081 * IOWs, a wait loop can now check for: 8af3dcd3c89aef Dave Chinner 2014-09-23 1082 * the current sequence not being found on the committing list; 8af3dcd3c89aef Dave Chinner 2014-09-23 1083 * an empty CIL; and 8af3dcd3c89aef Dave Chinner 2014-09-23 1084 * an unchanged sequence number 8af3dcd3c89aef Dave Chinner 2014-09-23 1085 * to detect a push that had nothing to do and therefore does not need 8af3dcd3c89aef Dave Chinner 2014-09-23 1086 * waiting on. If the CIL is not empty, we get put on the committing 8af3dcd3c89aef Dave Chinner 2014-09-23 1087 * list before emptying the CIL and bumping the sequence number. Hence 8af3dcd3c89aef Dave Chinner 2014-09-23 1088 * an empty CIL and an unchanged sequence number means we jumped out 8af3dcd3c89aef Dave Chinner 2014-09-23 1089 * above after doing nothing. 8af3dcd3c89aef Dave Chinner 2014-09-23 1090 * 8af3dcd3c89aef Dave Chinner 2014-09-23 1091 * Hence the waiter will either find the commit sequence on the 8af3dcd3c89aef Dave Chinner 2014-09-23 1092 * committing list or the sequence number will be unchanged and the CIL 8af3dcd3c89aef Dave Chinner 2014-09-23 1093 * still dirty. In that latter case, the push has not yet started, and 8af3dcd3c89aef Dave Chinner 2014-09-23 1094 * so the waiter will have to continue trying to check the CIL 8af3dcd3c89aef Dave Chinner 2014-09-23 1095 * committing list until it is found. In extreme cases of delay, the 8af3dcd3c89aef Dave Chinner 2014-09-23 1096 * sequence may fully commit between the attempts the wait makes to wait 8af3dcd3c89aef Dave Chinner 2014-09-23 1097 * on the commit sequence. 8af3dcd3c89aef Dave Chinner 2014-09-23 1098 */ 8af3dcd3c89aef Dave Chinner 2014-09-23 1099 list_add(&ctx->committing, &cil->xc_committing); 8af3dcd3c89aef Dave Chinner 2014-09-23 1100 spin_unlock(&cil->xc_push_lock); df806158b0f6eb Dave Chinner 2010-05-17 1101 71e330b593905e Dave Chinner 2010-05-21 1102 /* bad77c375e8de6 Dave Chinner 2021-06-18 1103 * The CIL is stable at this point - nothing new will be added to it bad77c375e8de6 Dave Chinner 2021-06-18 1104 * because we hold the flush lock exclusively. Hence we can now issue bad77c375e8de6 Dave Chinner 2021-06-18 1105 * a cache flush to ensure all the completed metadata in the journal we bad77c375e8de6 Dave Chinner 2021-06-18 1106 * are about to overwrite is on stable storage. 0dc8f7f139f07a Dave Chinner 2021-07-27 1107 * 0dc8f7f139f07a Dave Chinner 2021-07-27 1108 * Because we are issuing this cache flush before we've written the 0dc8f7f139f07a Dave Chinner 2021-07-27 1109 * tail lsn to the iclog, we can have metadata IO completions move the 0dc8f7f139f07a Dave Chinner 2021-07-27 1110 * tail forwards between the completion of this flush and the iclog 0dc8f7f139f07a Dave Chinner 2021-07-27 1111 * being written. In this case, we need to re-issue the cache flush 0dc8f7f139f07a Dave Chinner 2021-07-27 1112 * before the iclog write. To detect whether the log tail moves, sample 0dc8f7f139f07a Dave Chinner 2021-07-27 1113 * the tail LSN *before* we issue the flush. 0dc8f7f139f07a Dave Chinner 2021-07-27 1114 */ 0dc8f7f139f07a Dave Chinner 2021-07-27 1115 preflush_tail_lsn = atomic64_read(&log->l_tail_lsn); bad77c375e8de6 Dave Chinner 2021-06-18 1116 xfs_flush_bdev_async(&bio, log->l_mp->m_ddev_targp->bt_bdev, bad77c375e8de6 Dave Chinner 2021-06-18 1117 &bdev_flush); bad77c375e8de6 Dave Chinner 2021-06-18 1118 783bf145877323 Dave Chinner 2021-12-09 1119 xlog_cil_pcp_aggregate(cil, ctx); 783bf145877323 Dave Chinner 2021-12-09 1120 692a45164049bb Dave Chinner 2021-12-09 1121 while (!list_empty(&ctx->log_items)) { 71e330b593905e Dave Chinner 2010-05-21 1122 struct xfs_log_item *item; 71e330b593905e Dave Chinner 2010-05-21 1123 692a45164049bb Dave Chinner 2021-12-09 1124 item = list_first_entry(&ctx->log_items, 71e330b593905e Dave Chinner 2010-05-21 1125 struct xfs_log_item, li_cil); aaae3238d5a91e Dave Chinner 2021-12-09 1126 lv = item->li_lv; 988009101d40bb Dave Chinner 2021-12-09 1127 lv->lv_order_id = item->li_order_id; aaae3238d5a91e Dave Chinner 2021-12-09 1128 num_iovecs += lv->lv_niovecs; 6f186adfd5efa5 Dave Chinner 2021-12-09 1129 /* we don't write ordered log vectors */ 6f186adfd5efa5 Dave Chinner 2021-12-09 1130 if (lv->lv_buf_len != XFS_LOG_VEC_ORDERED) 6f186adfd5efa5 Dave Chinner 2021-12-09 1131 num_bytes += lv->lv_bytes; aaae3238d5a91e Dave Chinner 2021-12-09 1132 aaae3238d5a91e Dave Chinner 2021-12-09 1133 list_add_tail(&lv->lv_list, &ctx->lv_chain); 988009101d40bb Dave Chinner 2021-12-09 1134 list_del_init(&item->li_cil); 988009101d40bb Dave Chinner 2021-12-09 1135 item->li_order_id = 0; 988009101d40bb Dave Chinner 2021-12-09 1136 item->li_lv = NULL; 71e330b593905e Dave Chinner 2010-05-21 1137 } 71e330b593905e Dave Chinner 2010-05-21 1138 71e330b593905e Dave Chinner 2010-05-21 1139 /* 39823d0fac9416 Dave Chinner 2021-08-10 1140 * Switch the contexts so we can drop the context lock and move out 71e330b593905e Dave Chinner 2010-05-21 1141 * of a shared context. We can't just go straight to the commit record, 71e330b593905e Dave Chinner 2010-05-21 1142 * though - we need to synchronise with previous and future commits so 71e330b593905e Dave Chinner 2010-05-21 1143 * that the commit records are correctly ordered in the log to ensure 71e330b593905e Dave Chinner 2010-05-21 1144 * that we process items during log IO completion in the correct order. 71e330b593905e Dave Chinner 2010-05-21 1145 * 71e330b593905e Dave Chinner 2010-05-21 1146 * For example, if we get an EFI in one checkpoint and the EFD in the 71e330b593905e Dave Chinner 2010-05-21 1147 * next (e.g. due to log forces), we do not want the checkpoint with 71e330b593905e Dave Chinner 2010-05-21 1148 * the EFD to be committed before the checkpoint with the EFI. Hence 71e330b593905e Dave Chinner 2010-05-21 1149 * we must strictly order the commit records of the checkpoints so 71e330b593905e Dave Chinner 2010-05-21 1150 * that: a) the checkpoint callbacks are attached to the iclogs in the 71e330b593905e Dave Chinner 2010-05-21 1151 * correct order; and b) the checkpoints are replayed in correct order 71e330b593905e Dave Chinner 2010-05-21 1152 * in log recovery. 71e330b593905e Dave Chinner 2010-05-21 1153 * 71e330b593905e Dave Chinner 2010-05-21 1154 * Hence we need to add this context to the committing context list so 71e330b593905e Dave Chinner 2010-05-21 1155 * that higher sequences will wait for us to write out a commit record 71e330b593905e Dave Chinner 2010-05-21 1156 * before they do. f876e44603ad09 Dave Chinner 2014-02-27 1157 * 5f9b4b0de8dc2f Dave Chinner 2021-06-18 1158 * xfs_log_force_seq requires us to mirror the new sequence into the cil f876e44603ad09 Dave Chinner 2014-02-27 1159 * structure atomically with the addition of this sequence to the f876e44603ad09 Dave Chinner 2014-02-27 1160 * committing list. This also ensures that we can do unlocked checks f876e44603ad09 Dave Chinner 2014-02-27 1161 * against the current sequence in log forces without risking f876e44603ad09 Dave Chinner 2014-02-27 1162 * deferencing a freed context pointer. 71e330b593905e Dave Chinner 2010-05-21 1163 */ 4bb928cdb900d0 Dave Chinner 2013-08-12 1164 spin_lock(&cil->xc_push_lock); 39823d0fac9416 Dave Chinner 2021-08-10 1165 xlog_cil_ctx_switch(cil, new_ctx); 4bb928cdb900d0 Dave Chinner 2013-08-12 1166 spin_unlock(&cil->xc_push_lock); 71e330b593905e Dave Chinner 2010-05-21 1167 up_write(&cil->xc_ctx_lock); 71e330b593905e Dave Chinner 2010-05-21 1168 988009101d40bb Dave Chinner 2021-12-09 1169 /* 988009101d40bb Dave Chinner 2021-12-09 1170 * Sort the log vector chain before we add the transaction headers. 988009101d40bb Dave Chinner 2021-12-09 1171 * This ensures we always have the transaction headers at the start 988009101d40bb Dave Chinner 2021-12-09 1172 * of the chain. 988009101d40bb Dave Chinner 2021-12-09 1173 */ 988009101d40bb Dave Chinner 2021-12-09 1174 list_sort(NULL, &ctx->lv_chain, xlog_cil_order_cmp); 988009101d40bb Dave Chinner 2021-12-09 1175 71e330b593905e Dave Chinner 2010-05-21 1176 /* 71e330b593905e Dave Chinner 2010-05-21 1177 * Build a checkpoint transaction header and write it to the log to 71e330b593905e Dave Chinner 2010-05-21 1178 * begin the transaction. We need to account for the space used by the 71e330b593905e Dave Chinner 2010-05-21 1179 * transaction header here as it is not accounted for in xlog_write(). aaae3238d5a91e Dave Chinner 2021-12-09 1180 * Add the lvhdr to the head of the lv chain we pass to xlog_write() so aaae3238d5a91e Dave Chinner 2021-12-09 1181 * it gets written into the iclog first. 71e330b593905e Dave Chinner 2010-05-21 1182 */ 06825339535768 Dave Chinner 2021-12-09 1183 xlog_cil_build_trans_hdr(ctx, &thdr, &lvhdr, num_iovecs); 6f186adfd5efa5 Dave Chinner 2021-12-09 1184 num_bytes += lvhdr.lv_bytes; aaae3238d5a91e Dave Chinner 2021-12-09 1185 list_add(&lvhdr.lv_list, &ctx->lv_chain); 71e330b593905e Dave Chinner 2010-05-21 1186 bad77c375e8de6 Dave Chinner 2021-06-18 1187 /* bad77c375e8de6 Dave Chinner 2021-06-18 1188 * Before we format and submit the first iclog, we have to ensure that bad77c375e8de6 Dave Chinner 2021-06-18 1189 * the metadata writeback ordering cache flush is complete. bad77c375e8de6 Dave Chinner 2021-06-18 1190 */ bad77c375e8de6 Dave Chinner 2021-06-18 1191 wait_for_completion(&bdev_flush); bad77c375e8de6 Dave Chinner 2021-06-18 1192 68a175316bac03 Dave Chinner 2021-12-09 1193 /* 68a175316bac03 Dave Chinner 2021-12-09 1194 * Grab the ticket from the ctx so we can ungrant it after releasing the 68a175316bac03 Dave Chinner 2021-12-09 1195 * commit_iclog. The ctx may be freed by the time we return from 68a175316bac03 Dave Chinner 2021-12-09 1196 * releasing the commit_iclog (i.e. checkpoint has been completed and 68a175316bac03 Dave Chinner 2021-12-09 1197 * callback run) so we can't reference the ctx after the call to 68a175316bac03 Dave Chinner 2021-12-09 1198 * xlog_state_release_iclog(). 68a175316bac03 Dave Chinner 2021-12-09 1199 */ 68a175316bac03 Dave Chinner 2021-12-09 @1200 ticket = ctx->ticket; 68a175316bac03 Dave Chinner 2021-12-09 1201 aaae3238d5a91e Dave Chinner 2021-12-09 1202 /* aaae3238d5a91e Dave Chinner 2021-12-09 1203 * Take the lvhdr back off the lv_chain immediately after calling aaae3238d5a91e Dave Chinner 2021-12-09 1204 * xlog_cil_write_chain() as it should not be passed to log IO aaae3238d5a91e Dave Chinner 2021-12-09 1205 * completion. aaae3238d5a91e Dave Chinner 2021-12-09 1206 */ aaae3238d5a91e Dave Chinner 2021-12-09 1207 error = xlog_cil_write_chain(ctx, num_bytes); aaae3238d5a91e Dave Chinner 2021-12-09 1208 list_del(&lvhdr.lv_list); bf034bc827807a Dave Chinner 2021-08-10 1209 if (error) ac983517ec5941 Dave Chinner 2014-05-07 1210 goto out_abort_free_ticket; 71e330b593905e Dave Chinner 2010-05-21 1211 caa80090d17c89 Dave Chinner 2021-08-10 1212 error = xlog_cil_write_commit_record(ctx); dd401770b0ff68 Dave Chinner 2020-03-25 1213 if (error) dd401770b0ff68 Dave Chinner 2020-03-25 1214 goto out_abort_free_ticket; dd401770b0ff68 Dave Chinner 2020-03-25 1215 a79b28c284fd91 Dave Chinner 2021-06-18 1216 /* 1effb72a8179a0 Dave Chinner 2021-06-25 1217 * If the checkpoint spans multiple iclogs, wait for all previous iclogs 1effb72a8179a0 Dave Chinner 2021-06-25 1218 * to complete before we submit the commit_iclog. We can't use state 1effb72a8179a0 Dave Chinner 2021-06-25 1219 * checks for this - ACTIVE can be either a past completed iclog or a 1effb72a8179a0 Dave Chinner 2021-06-25 1220 * future iclog being filled, while WANT_SYNC through SYNC_DONE can be a 1effb72a8179a0 Dave Chinner 2021-06-25 1221 * past or future iclog awaiting IO or ordered IO completion to be run. 1effb72a8179a0 Dave Chinner 2021-06-25 1222 * In the latter case, if it's a future iclog and we wait on it, the we 1effb72a8179a0 Dave Chinner 2021-06-25 1223 * will hang because it won't get processed through to ic_force_wait 1effb72a8179a0 Dave Chinner 2021-06-25 1224 * wakeup until this commit_iclog is written to disk. Hence we use the 1effb72a8179a0 Dave Chinner 2021-06-25 1225 * iclog header lsn and compare it to the commit lsn to determine if we 1effb72a8179a0 Dave Chinner 2021-06-25 1226 * need to wait on iclogs or not. a79b28c284fd91 Dave Chinner 2021-06-18 1227 */ caa80090d17c89 Dave Chinner 2021-08-10 1228 spin_lock(&log->l_icloglock); c45aba40cf5b29 Dave Chinner 2021-08-10 1229 if (ctx->start_lsn != ctx->commit_lsn) { 1effb72a8179a0 Dave Chinner 2021-06-25 1230 xfs_lsn_t plsn; 1effb72a8179a0 Dave Chinner 2021-06-25 1231 caa80090d17c89 Dave Chinner 2021-08-10 1232 plsn = be64_to_cpu(ctx->commit_iclog->ic_prev->ic_header.h_lsn); c45aba40cf5b29 Dave Chinner 2021-08-10 1233 if (plsn && XFS_LSN_CMP(plsn, ctx->commit_lsn) < 0) { 1effb72a8179a0 Dave Chinner 2021-06-25 1234 /* 1effb72a8179a0 Dave Chinner 2021-06-25 1235 * Waiting on ic_force_wait orders the completion of 1effb72a8179a0 Dave Chinner 2021-06-25 1236 * iclogs older than ic_prev. Hence we only need to wait 1effb72a8179a0 Dave Chinner 2021-06-25 1237 * on the most recent older iclog here. 1effb72a8179a0 Dave Chinner 2021-06-25 1238 */ caa80090d17c89 Dave Chinner 2021-08-10 1239 xlog_wait_on_iclog(ctx->commit_iclog->ic_prev); eef983ffeae7a1 Dave Chinner 2021-06-18 1240 spin_lock(&log->l_icloglock); 1effb72a8179a0 Dave Chinner 2021-06-25 1241 } 1effb72a8179a0 Dave Chinner 2021-06-25 1242 1effb72a8179a0 Dave Chinner 2021-06-25 1243 /* 1effb72a8179a0 Dave Chinner 2021-06-25 1244 * We need to issue a pre-flush so that the ordering for this 1effb72a8179a0 Dave Chinner 2021-06-25 1245 * checkpoint is correctly preserved down to stable storage. 1effb72a8179a0 Dave Chinner 2021-06-25 1246 */ caa80090d17c89 Dave Chinner 2021-08-10 1247 ctx->commit_iclog->ic_flags |= XLOG_ICL_NEED_FLUSH; a79b28c284fd91 Dave Chinner 2021-06-18 1248 } a79b28c284fd91 Dave Chinner 2021-06-18 1249 eef983ffeae7a1 Dave Chinner 2021-06-18 1250 /* eef983ffeae7a1 Dave Chinner 2021-06-18 1251 * The commit iclog must be written to stable storage to guarantee eef983ffeae7a1 Dave Chinner 2021-06-18 1252 * journal IO vs metadata writeback IO is correctly ordered on stable eef983ffeae7a1 Dave Chinner 2021-06-18 1253 * storage. 0020a190cf3eac Dave Chinner 2021-08-10 1254 * 0020a190cf3eac Dave Chinner 2021-08-10 1255 * If the push caller needs the commit to be immediately stable and the 0020a190cf3eac Dave Chinner 2021-08-10 1256 * commit_iclog is not yet marked as XLOG_STATE_WANT_SYNC to indicate it 0020a190cf3eac Dave Chinner 2021-08-10 1257 * will be written when released, switch it's state to WANT_SYNC right 0020a190cf3eac Dave Chinner 2021-08-10 1258 * now. eef983ffeae7a1 Dave Chinner 2021-06-18 1259 */ caa80090d17c89 Dave Chinner 2021-08-10 1260 ctx->commit_iclog->ic_flags |= XLOG_ICL_NEED_FUA; 0020a190cf3eac Dave Chinner 2021-08-10 1261 if (push_commit_stable && 0020a190cf3eac Dave Chinner 2021-08-10 1262 ctx->commit_iclog->ic_state == XLOG_STATE_ACTIVE) 0020a190cf3eac Dave Chinner 2021-08-10 1263 xlog_state_switch_iclogs(log, ctx->commit_iclog, 0); 68a175316bac03 Dave Chinner 2021-12-09 1264 ticket = ctx->ticket; 68a175316bac03 Dave Chinner 2021-12-09 1265 xlog_state_release_iclog(log, ctx->commit_iclog, ticket, 68a175316bac03 Dave Chinner 2021-12-09 1266 preflush_tail_lsn); 502a01fac09834 Dave Chinner 2021-08-10 1267 502a01fac09834 Dave Chinner 2021-08-10 1268 /* Not safe to reference ctx now! */ 502a01fac09834 Dave Chinner 2021-08-10 1269 eef983ffeae7a1 Dave Chinner 2021-06-18 1270 spin_unlock(&log->l_icloglock); 68a175316bac03 Dave Chinner 2021-12-09 1271 xfs_log_ticket_ungrant(log, ticket); c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1272 return; 71e330b593905e Dave Chinner 2010-05-21 1273 71e330b593905e Dave Chinner 2010-05-21 1274 out_skip: 71e330b593905e Dave Chinner 2010-05-21 1275 up_write(&cil->xc_ctx_lock); 71e330b593905e Dave Chinner 2010-05-21 1276 xfs_log_ticket_put(new_ctx->ticket); 71e330b593905e Dave Chinner 2010-05-21 1277 kmem_free(new_ctx); c7cc296ddd1f6d Christoph Hellwig 2020-03-20 1278 return; 71e330b593905e Dave Chinner 2010-05-21 1279 7db37c5e6575b2 Dave Chinner 2011-01-27 1280 out_abort_free_ticket: 2039a272300b94 Dave Chinner 2021-08-10 1281 ASSERT(xlog_is_shutdown(log)); caa80090d17c89 Dave Chinner 2021-08-10 1282 if (!ctx->commit_iclog) { 68a175316bac03 Dave Chinner 2021-12-09 1283 xfs_log_ticket_ungrant(log, ctx->ticket); 12e6a0f449d585 Christoph Hellwig 2020-03-20 1284 xlog_cil_committed(ctx); caa80090d17c89 Dave Chinner 2021-08-10 1285 return; caa80090d17c89 Dave Chinner 2021-08-10 1286 } caa80090d17c89 Dave Chinner 2021-08-10 1287 spin_lock(&log->l_icloglock); 68a175316bac03 Dave Chinner 2021-12-09 1288 ticket = ctx->ticket; 68a175316bac03 Dave Chinner 2021-12-09 1289 xlog_state_release_iclog(log, ctx->commit_iclog, ticket, 0); caa80090d17c89 Dave Chinner 2021-08-10 1290 /* Not safe to reference ctx now! */ caa80090d17c89 Dave Chinner 2021-08-10 1291 spin_unlock(&log->l_icloglock); 68a175316bac03 Dave Chinner 2021-12-09 1292 xfs_log_ticket_ungrant(log, ticket); 4c2d542f2e7865 Dave Chinner 2012-04-23 1293 } 4c2d542f2e7865 Dave Chinner 2012-04-23 1294 --- 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]
