All of lore.kernel.org
 help / color / mirror / Atom feed
* [kdave-btrfs-devel:for-next-20210129 14817/14851] fs/btrfs/tree-log.c:3318:1-7: preceding lock on line 3156
@ 2021-01-30  8:55 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-01-30  8:55 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 24011 bytes --]

CC: kbuild-all(a)lists.01.org
TO: Naohiro Aota <naohiro.aota@wdc.com>
CC: David Sterba <dsterba@suse.com>
CC: Josef Bacik <josef@toxicpanda.com>
CC: Johannes Thumshirn <johannes.thumshirn@wdc.com>

tree:   https://github.com/kdave/btrfs-devel.git for-next-20210129
head:   6e043613b2c4377ce095ea826160d42031156d35
commit: 122cfba0d2eb42d0a31161cf2139be0ead18afb7 [14817/14851] btrfs: reorder log node allocation
:::::: branch date: 12 hours ago
:::::: commit date: 12 hours ago
config: powerpc64-randconfig-c003-20210129 (attached as .config)
compiler: powerpc64le-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>


"coccinelle warnings: (new ones prefixed by >>)"
>> fs/btrfs/tree-log.c:3318:1-7: preceding lock on line 3156

vim +3318 fs/btrfs/tree-log.c

8b050d350c7846 Miao Xie       2014-02-20  3039  
e02119d5a7b439 Chris Mason    2008-09-05  3040  /*
e02119d5a7b439 Chris Mason    2008-09-05  3041   * btrfs_sync_log does sends a given tree log down to the disk and
e02119d5a7b439 Chris Mason    2008-09-05  3042   * updates the super blocks to record it.  When this call is done,
12fcfd22fe5bf4 Chris Mason    2009-03-24  3043   * you know that any inodes previously logged are safely on disk only
12fcfd22fe5bf4 Chris Mason    2009-03-24  3044   * if it returns 0.
12fcfd22fe5bf4 Chris Mason    2009-03-24  3045   *
12fcfd22fe5bf4 Chris Mason    2009-03-24  3046   * Any other return value means you need to call btrfs_commit_transaction.
12fcfd22fe5bf4 Chris Mason    2009-03-24  3047   * Some of the edge cases for fsyncing directories that have had unlinks
12fcfd22fe5bf4 Chris Mason    2009-03-24  3048   * or renames done in the past mean that sometimes the only safe
12fcfd22fe5bf4 Chris Mason    2009-03-24  3049   * fsync is to commit the whole FS.  When btrfs_sync_log returns -EAGAIN,
12fcfd22fe5bf4 Chris Mason    2009-03-24  3050   * that has happened.
e02119d5a7b439 Chris Mason    2008-09-05  3051   */
e02119d5a7b439 Chris Mason    2008-09-05  3052  int btrfs_sync_log(struct btrfs_trans_handle *trans,
8b050d350c7846 Miao Xie       2014-02-20  3053  		   struct btrfs_root *root, struct btrfs_log_ctx *ctx)
e02119d5a7b439 Chris Mason    2008-09-05  3054  {
7237f1833601dc Yan Zheng      2009-01-21  3055  	int index1;
7237f1833601dc Yan Zheng      2009-01-21  3056  	int index2;
8cef4e160d7492 Yan, Zheng     2009-11-12  3057  	int mark;
e02119d5a7b439 Chris Mason    2008-09-05  3058  	int ret;
0b246afa62b0cf Jeff Mahoney   2016-06-22  3059  	struct btrfs_fs_info *fs_info = root->fs_info;
e02119d5a7b439 Chris Mason    2008-09-05  3060  	struct btrfs_root *log = root->log_root;
0b246afa62b0cf Jeff Mahoney   2016-06-22  3061  	struct btrfs_root *log_root_tree = fs_info->log_root_tree;
4203e968947071 Josef Bacik    2019-09-30  3062  	struct btrfs_root_item new_root_item;
bb14a59b619d3a Miao Xie       2014-02-20  3063  	int log_transid = 0;
8b050d350c7846 Miao Xie       2014-02-20  3064  	struct btrfs_log_ctx root_log_ctx;
c6adc9cc082e3c Miao Xie       2013-05-28  3065  	struct blk_plug plug;
47876f7ceffa0e Filipe Manana  2020-11-25  3066  	u64 log_root_start;
47876f7ceffa0e Filipe Manana  2020-11-25  3067  	u64 log_root_level;
e02119d5a7b439 Chris Mason    2008-09-05  3068  
7237f1833601dc Yan Zheng      2009-01-21  3069  	mutex_lock(&root->log_mutex);
d1433debe7f434 Miao Xie       2014-02-20  3070  	log_transid = ctx->log_transid;
d1433debe7f434 Miao Xie       2014-02-20  3071  	if (root->log_transid_committed >= log_transid) {
d1433debe7f434 Miao Xie       2014-02-20  3072  		mutex_unlock(&root->log_mutex);
d1433debe7f434 Miao Xie       2014-02-20  3073  		return ctx->log_ret;
d1433debe7f434 Miao Xie       2014-02-20  3074  	}
d1433debe7f434 Miao Xie       2014-02-20  3075  
d1433debe7f434 Miao Xie       2014-02-20  3076  	index1 = log_transid % 2;
7237f1833601dc Yan Zheng      2009-01-21  3077  	if (atomic_read(&root->log_commit[index1])) {
60d53eb3107c8e Zhaolei        2015-08-17  3078  		wait_log_commit(root, log_transid);
7237f1833601dc Yan Zheng      2009-01-21  3079  		mutex_unlock(&root->log_mutex);
8b050d350c7846 Miao Xie       2014-02-20  3080  		return ctx->log_ret;
e02119d5a7b439 Chris Mason    2008-09-05  3081  	}
d1433debe7f434 Miao Xie       2014-02-20  3082  	ASSERT(log_transid == root->log_transid);
7237f1833601dc Yan Zheng      2009-01-21  3083  	atomic_set(&root->log_commit[index1], 1);
7237f1833601dc Yan Zheng      2009-01-21  3084  
7237f1833601dc Yan Zheng      2009-01-21  3085  	/* wait for previous tree log sync to complete */
7237f1833601dc Yan Zheng      2009-01-21  3086  	if (atomic_read(&root->log_commit[(index1 + 1) % 2]))
60d53eb3107c8e Zhaolei        2015-08-17  3087  		wait_log_commit(root, log_transid - 1);
48cab2e0714913 Miao Xie       2014-02-20  3088  
86df7eb921a009 Yan, Zheng     2009-10-14  3089  	while (1) {
2ecb79239bcd04 Miao Xie       2012-09-06  3090  		int batch = atomic_read(&root->log_batch);
cd354ad613a393 Chris Mason    2011-10-20  3091  		/* when we're on an ssd, just kick the log commit out */
0b246afa62b0cf Jeff Mahoney   2016-06-22  3092  		if (!btrfs_test_opt(fs_info, SSD) &&
27cdeb7096b86f Miao Xie       2014-04-02  3093  		    test_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state)) {
7237f1833601dc Yan Zheng      2009-01-21  3094  			mutex_unlock(&root->log_mutex);
e02119d5a7b439 Chris Mason    2008-09-05  3095  			schedule_timeout_uninterruptible(1);
7237f1833601dc Yan Zheng      2009-01-21  3096  			mutex_lock(&root->log_mutex);
86df7eb921a009 Yan, Zheng     2009-10-14  3097  		}
60d53eb3107c8e Zhaolei        2015-08-17  3098  		wait_for_writer(root);
2ecb79239bcd04 Miao Xie       2012-09-06  3099  		if (batch == atomic_read(&root->log_batch))
e02119d5a7b439 Chris Mason    2008-09-05  3100  			break;
e02119d5a7b439 Chris Mason    2008-09-05  3101  	}
e02119d5a7b439 Chris Mason    2008-09-05  3102  
12fcfd22fe5bf4 Chris Mason    2009-03-24  3103  	/* bail out if we need to do a full commit */
4884b8e8ebf54e David Sterba   2019-03-20  3104  	if (btrfs_need_log_full_commit(trans)) {
12fcfd22fe5bf4 Chris Mason    2009-03-24  3105  		ret = -EAGAIN;
12fcfd22fe5bf4 Chris Mason    2009-03-24  3106  		mutex_unlock(&root->log_mutex);
12fcfd22fe5bf4 Chris Mason    2009-03-24  3107  		goto out;
12fcfd22fe5bf4 Chris Mason    2009-03-24  3108  	}
12fcfd22fe5bf4 Chris Mason    2009-03-24  3109  
8cef4e160d7492 Yan, Zheng     2009-11-12  3110  	if (log_transid % 2 == 0)
8cef4e160d7492 Yan, Zheng     2009-11-12  3111  		mark = EXTENT_DIRTY;
8cef4e160d7492 Yan, Zheng     2009-11-12  3112  	else
8cef4e160d7492 Yan, Zheng     2009-11-12  3113  		mark = EXTENT_NEW;
8cef4e160d7492 Yan, Zheng     2009-11-12  3114  
690587d109ffe1 Chris Mason    2009-10-13  3115  	/* we start IO on  all the marked extents here, but we don't actually
690587d109ffe1 Chris Mason    2009-10-13  3116  	 * wait for them until later.
690587d109ffe1 Chris Mason    2009-10-13  3117  	 */
c6adc9cc082e3c Miao Xie       2013-05-28  3118  	blk_start_plug(&plug);
2ff7e61e0d30ff Jeff Mahoney   2016-06-22  3119  	ret = btrfs_write_marked_extents(fs_info, &log->dirty_log_pages, mark);
79787eaab46121 Jeff Mahoney   2012-03-12  3120  	if (ret) {
c6adc9cc082e3c Miao Xie       2013-05-28  3121  		blk_finish_plug(&plug);
66642832f06a43 Jeff Mahoney   2016-06-10  3122  		btrfs_abort_transaction(trans, ret);
907877664e2d85 David Sterba   2019-03-20  3123  		btrfs_set_log_full_commit(trans);
79787eaab46121 Jeff Mahoney   2012-03-12  3124  		mutex_unlock(&root->log_mutex);
79787eaab46121 Jeff Mahoney   2012-03-12  3125  		goto out;
79787eaab46121 Jeff Mahoney   2012-03-12  3126  	}
7237f1833601dc Yan Zheng      2009-01-21  3127  
4203e968947071 Josef Bacik    2019-09-30  3128  	/*
4203e968947071 Josef Bacik    2019-09-30  3129  	 * We _must_ update under the root->log_mutex in order to make sure we
4203e968947071 Josef Bacik    2019-09-30  3130  	 * have a consistent view of the log root we are trying to commit at
4203e968947071 Josef Bacik    2019-09-30  3131  	 * this moment.
4203e968947071 Josef Bacik    2019-09-30  3132  	 *
4203e968947071 Josef Bacik    2019-09-30  3133  	 * We _must_ copy this into a local copy, because we are not holding the
4203e968947071 Josef Bacik    2019-09-30  3134  	 * log_root_tree->log_mutex yet.  This is important because when we
4203e968947071 Josef Bacik    2019-09-30  3135  	 * commit the log_root_tree we must have a consistent view of the
4203e968947071 Josef Bacik    2019-09-30  3136  	 * log_root_tree when we update the super block to point at the
4203e968947071 Josef Bacik    2019-09-30  3137  	 * log_root_tree bytenr.  If we update the log_root_tree here we'll race
4203e968947071 Josef Bacik    2019-09-30  3138  	 * with the commit and possibly point at the new block which we may not
4203e968947071 Josef Bacik    2019-09-30  3139  	 * have written out.
4203e968947071 Josef Bacik    2019-09-30  3140  	 */
5d4f98a28c7d33 Yan Zheng      2009-06-10  3141  	btrfs_set_root_node(&log->root_item, log->node);
4203e968947071 Josef Bacik    2019-09-30  3142  	memcpy(&new_root_item, &log->root_item, sizeof(new_root_item));
7237f1833601dc Yan Zheng      2009-01-21  3143  
7237f1833601dc Yan Zheng      2009-01-21  3144  	root->log_transid++;
7237f1833601dc Yan Zheng      2009-01-21  3145  	log->log_transid = root->log_transid;
ff782e0a131c7f Josef Bacik    2009-10-08  3146  	root->log_start_pid = 0;
7237f1833601dc Yan Zheng      2009-01-21  3147  	/*
8cef4e160d7492 Yan, Zheng     2009-11-12  3148  	 * IO has been started, blocks of the log tree have WRITTEN flag set
8cef4e160d7492 Yan, Zheng     2009-11-12  3149  	 * in their headers. new modifications of the log will be written to
8cef4e160d7492 Yan, Zheng     2009-11-12  3150  	 * new positions. so it's safe to allow log writers to go in.
7237f1833601dc Yan Zheng      2009-01-21  3151  	 */
7237f1833601dc Yan Zheng      2009-01-21  3152  	mutex_unlock(&root->log_mutex);
7237f1833601dc Yan Zheng      2009-01-21  3153  
28a235931b56d4 Filipe Manana  2016-08-23  3154  	btrfs_init_log_ctx(&root_log_ctx, NULL);
d1433debe7f434 Miao Xie       2014-02-20  3155  
7237f1833601dc Yan Zheng      2009-01-21 @3156  	mutex_lock(&log_root_tree->log_mutex);
d1433debe7f434 Miao Xie       2014-02-20  3157  
d1433debe7f434 Miao Xie       2014-02-20  3158  	index2 = log_root_tree->log_transid % 2;
d1433debe7f434 Miao Xie       2014-02-20  3159  	list_add_tail(&root_log_ctx.list, &log_root_tree->log_ctxs[index2]);
d1433debe7f434 Miao Xie       2014-02-20  3160  	root_log_ctx.log_transid = log_root_tree->log_transid;
d1433debe7f434 Miao Xie       2014-02-20  3161  
122cfba0d2eb42 Naohiro Aota   2021-01-26  3162  	mutex_lock(&fs_info->tree_log_mutex);
122cfba0d2eb42 Naohiro Aota   2021-01-26  3163  	if (!log_root_tree->node) {
122cfba0d2eb42 Naohiro Aota   2021-01-26  3164  		ret = btrfs_alloc_log_tree_node(trans, log_root_tree);
122cfba0d2eb42 Naohiro Aota   2021-01-26  3165  		if (ret) {
122cfba0d2eb42 Naohiro Aota   2021-01-26  3166  			mutex_unlock(&fs_info->tree_log_mutex);
122cfba0d2eb42 Naohiro Aota   2021-01-26  3167  			goto out;
122cfba0d2eb42 Naohiro Aota   2021-01-26  3168  		}
122cfba0d2eb42 Naohiro Aota   2021-01-26  3169  	}
122cfba0d2eb42 Naohiro Aota   2021-01-26  3170  	mutex_unlock(&fs_info->tree_log_mutex);
122cfba0d2eb42 Naohiro Aota   2021-01-26  3171  
4203e968947071 Josef Bacik    2019-09-30  3172  	/*
4203e968947071 Josef Bacik    2019-09-30  3173  	 * Now we are safe to update the log_root_tree because we're under the
4203e968947071 Josef Bacik    2019-09-30  3174  	 * log_mutex, and we're a current writer so we're holding the commit
4203e968947071 Josef Bacik    2019-09-30  3175  	 * open until we drop the log_mutex.
4203e968947071 Josef Bacik    2019-09-30  3176  	 */
4203e968947071 Josef Bacik    2019-09-30  3177  	ret = update_log_root(trans, log, &new_root_item);
4a500fd178c89b Yan, Zheng     2010-05-16  3178  	if (ret) {
d1433debe7f434 Miao Xie       2014-02-20  3179  		if (!list_empty(&root_log_ctx.list))
d1433debe7f434 Miao Xie       2014-02-20  3180  			list_del_init(&root_log_ctx.list);
d1433debe7f434 Miao Xie       2014-02-20  3181  
c6adc9cc082e3c Miao Xie       2013-05-28  3182  		blk_finish_plug(&plug);
907877664e2d85 David Sterba   2019-03-20  3183  		btrfs_set_log_full_commit(trans);
995946dd296177 Miao Xie       2014-04-02  3184  
79787eaab46121 Jeff Mahoney   2012-03-12  3185  		if (ret != -ENOSPC) {
66642832f06a43 Jeff Mahoney   2016-06-10  3186  			btrfs_abort_transaction(trans, ret);
79787eaab46121 Jeff Mahoney   2012-03-12  3187  			mutex_unlock(&log_root_tree->log_mutex);
79787eaab46121 Jeff Mahoney   2012-03-12  3188  			goto out;
79787eaab46121 Jeff Mahoney   2012-03-12  3189  		}
bf89d38febaadd Jeff Mahoney   2016-09-09  3190  		btrfs_wait_tree_log_extents(log, mark);
4a500fd178c89b Yan, Zheng     2010-05-16  3191  		mutex_unlock(&log_root_tree->log_mutex);
4a500fd178c89b Yan, Zheng     2010-05-16  3192  		ret = -EAGAIN;
4a500fd178c89b Yan, Zheng     2010-05-16  3193  		goto out;
4a500fd178c89b Yan, Zheng     2010-05-16  3194  	}
4a500fd178c89b Yan, Zheng     2010-05-16  3195  
d1433debe7f434 Miao Xie       2014-02-20  3196  	if (log_root_tree->log_transid_committed >= root_log_ctx.log_transid) {
3da5ab56482f32 Forrest Liu    2015-01-30  3197  		blk_finish_plug(&plug);
cbd60aa7cd17d8 Chris Mason    2016-09-06  3198  		list_del_init(&root_log_ctx.list);
d1433debe7f434 Miao Xie       2014-02-20  3199  		mutex_unlock(&log_root_tree->log_mutex);
d1433debe7f434 Miao Xie       2014-02-20  3200  		ret = root_log_ctx.log_ret;
d1433debe7f434 Miao Xie       2014-02-20  3201  		goto out;
d1433debe7f434 Miao Xie       2014-02-20  3202  	}
8b050d350c7846 Miao Xie       2014-02-20  3203  
d1433debe7f434 Miao Xie       2014-02-20  3204  	index2 = root_log_ctx.log_transid % 2;
7237f1833601dc Yan Zheng      2009-01-21  3205  	if (atomic_read(&log_root_tree->log_commit[index2])) {
c6adc9cc082e3c Miao Xie       2013-05-28  3206  		blk_finish_plug(&plug);
bf89d38febaadd Jeff Mahoney   2016-09-09  3207  		ret = btrfs_wait_tree_log_extents(log, mark);
60d53eb3107c8e Zhaolei        2015-08-17  3208  		wait_log_commit(log_root_tree,
d1433debe7f434 Miao Xie       2014-02-20  3209  				root_log_ctx.log_transid);
7237f1833601dc Yan Zheng      2009-01-21  3210  		mutex_unlock(&log_root_tree->log_mutex);
5ab5e44a36164f Filipe Manana  2014-11-13  3211  		if (!ret)
8b050d350c7846 Miao Xie       2014-02-20  3212  			ret = root_log_ctx.log_ret;
7237f1833601dc Yan Zheng      2009-01-21  3213  		goto out;
7237f1833601dc Yan Zheng      2009-01-21  3214  	}
d1433debe7f434 Miao Xie       2014-02-20  3215  	ASSERT(root_log_ctx.log_transid == log_root_tree->log_transid);
7237f1833601dc Yan Zheng      2009-01-21  3216  	atomic_set(&log_root_tree->log_commit[index2], 1);
7237f1833601dc Yan Zheng      2009-01-21  3217  
12fcfd22fe5bf4 Chris Mason    2009-03-24  3218  	if (atomic_read(&log_root_tree->log_commit[(index2 + 1) % 2])) {
60d53eb3107c8e Zhaolei        2015-08-17  3219  		wait_log_commit(log_root_tree,
d1433debe7f434 Miao Xie       2014-02-20  3220  				root_log_ctx.log_transid - 1);
12fcfd22fe5bf4 Chris Mason    2009-03-24  3221  	}
7237f1833601dc Yan Zheng      2009-01-21  3222  
12fcfd22fe5bf4 Chris Mason    2009-03-24  3223  	/*
12fcfd22fe5bf4 Chris Mason    2009-03-24  3224  	 * now that we've moved on to the tree of log tree roots,
12fcfd22fe5bf4 Chris Mason    2009-03-24  3225  	 * check the full commit flag again
12fcfd22fe5bf4 Chris Mason    2009-03-24  3226  	 */
4884b8e8ebf54e David Sterba   2019-03-20  3227  	if (btrfs_need_log_full_commit(trans)) {
c6adc9cc082e3c Miao Xie       2013-05-28  3228  		blk_finish_plug(&plug);
bf89d38febaadd Jeff Mahoney   2016-09-09  3229  		btrfs_wait_tree_log_extents(log, mark);
12fcfd22fe5bf4 Chris Mason    2009-03-24  3230  		mutex_unlock(&log_root_tree->log_mutex);
12fcfd22fe5bf4 Chris Mason    2009-03-24  3231  		ret = -EAGAIN;
12fcfd22fe5bf4 Chris Mason    2009-03-24  3232  		goto out_wake_log_root;
12fcfd22fe5bf4 Chris Mason    2009-03-24  3233  	}
7237f1833601dc Yan Zheng      2009-01-21  3234  
2ff7e61e0d30ff Jeff Mahoney   2016-06-22  3235  	ret = btrfs_write_marked_extents(fs_info,
8cef4e160d7492 Yan, Zheng     2009-11-12  3236  					 &log_root_tree->dirty_log_pages,
8cef4e160d7492 Yan, Zheng     2009-11-12  3237  					 EXTENT_DIRTY | EXTENT_NEW);
c6adc9cc082e3c Miao Xie       2013-05-28  3238  	blk_finish_plug(&plug);
79787eaab46121 Jeff Mahoney   2012-03-12  3239  	if (ret) {
907877664e2d85 David Sterba   2019-03-20  3240  		btrfs_set_log_full_commit(trans);
66642832f06a43 Jeff Mahoney   2016-06-10  3241  		btrfs_abort_transaction(trans, ret);
79787eaab46121 Jeff Mahoney   2012-03-12  3242  		mutex_unlock(&log_root_tree->log_mutex);
79787eaab46121 Jeff Mahoney   2012-03-12  3243  		goto out_wake_log_root;
79787eaab46121 Jeff Mahoney   2012-03-12  3244  	}
bf89d38febaadd Jeff Mahoney   2016-09-09  3245  	ret = btrfs_wait_tree_log_extents(log, mark);
5ab5e44a36164f Filipe Manana  2014-11-13  3246  	if (!ret)
bf89d38febaadd Jeff Mahoney   2016-09-09  3247  		ret = btrfs_wait_tree_log_extents(log_root_tree,
c6adc9cc082e3c Miao Xie       2013-05-28  3248  						  EXTENT_NEW | EXTENT_DIRTY);
5ab5e44a36164f Filipe Manana  2014-11-13  3249  	if (ret) {
907877664e2d85 David Sterba   2019-03-20  3250  		btrfs_set_log_full_commit(trans);
5ab5e44a36164f Filipe Manana  2014-11-13  3251  		mutex_unlock(&log_root_tree->log_mutex);
5ab5e44a36164f Filipe Manana  2014-11-13  3252  		goto out_wake_log_root;
5ab5e44a36164f Filipe Manana  2014-11-13  3253  	}
e02119d5a7b439 Chris Mason    2008-09-05  3254  
47876f7ceffa0e Filipe Manana  2020-11-25  3255  	log_root_start = log_root_tree->node->start;
47876f7ceffa0e Filipe Manana  2020-11-25  3256  	log_root_level = btrfs_header_level(log_root_tree->node);
7237f1833601dc Yan Zheng      2009-01-21  3257  	log_root_tree->log_transid++;
7237f1833601dc Yan Zheng      2009-01-21  3258  	mutex_unlock(&log_root_tree->log_mutex);
7237f1833601dc Yan Zheng      2009-01-21  3259  
7237f1833601dc Yan Zheng      2009-01-21  3260  	/*
47876f7ceffa0e Filipe Manana  2020-11-25  3261  	 * Here we are guaranteed that nobody is going to write the superblock
47876f7ceffa0e Filipe Manana  2020-11-25  3262  	 * for the current transaction before us and that neither we do write
47876f7ceffa0e Filipe Manana  2020-11-25  3263  	 * our superblock before the previous transaction finishes its commit
47876f7ceffa0e Filipe Manana  2020-11-25  3264  	 * and writes its superblock, because:
47876f7ceffa0e Filipe Manana  2020-11-25  3265  	 *
47876f7ceffa0e Filipe Manana  2020-11-25  3266  	 * 1) We are holding a handle on the current transaction, so no body
47876f7ceffa0e Filipe Manana  2020-11-25  3267  	 *    can commit it until we release the handle;
47876f7ceffa0e Filipe Manana  2020-11-25  3268  	 *
47876f7ceffa0e Filipe Manana  2020-11-25  3269  	 * 2) Before writing our superblock we acquire the tree_log_mutex, so
47876f7ceffa0e Filipe Manana  2020-11-25  3270  	 *    if the previous transaction is still committing, and hasn't yet
47876f7ceffa0e Filipe Manana  2020-11-25  3271  	 *    written its superblock, we wait for it to do it, because a
47876f7ceffa0e Filipe Manana  2020-11-25  3272  	 *    transaction commit acquires the tree_log_mutex when the commit
47876f7ceffa0e Filipe Manana  2020-11-25  3273  	 *    begins and releases it only after writing its superblock.
7237f1833601dc Yan Zheng      2009-01-21  3274  	 */
47876f7ceffa0e Filipe Manana  2020-11-25  3275  	mutex_lock(&fs_info->tree_log_mutex);
47876f7ceffa0e Filipe Manana  2020-11-25  3276  	btrfs_set_super_log_root(fs_info->super_for_commit, log_root_start);
47876f7ceffa0e Filipe Manana  2020-11-25  3277  	btrfs_set_super_log_root_level(fs_info->super_for_commit, log_root_level);
eece6a9cf69140 David Sterba   2017-02-10  3278  	ret = write_all_supers(fs_info, 1);
47876f7ceffa0e Filipe Manana  2020-11-25  3279  	mutex_unlock(&fs_info->tree_log_mutex);
5af3e8cce8b7ba Stefan Behrens 2012-08-01  3280  	if (ret) {
907877664e2d85 David Sterba   2019-03-20  3281  		btrfs_set_log_full_commit(trans);
66642832f06a43 Jeff Mahoney   2016-06-10  3282  		btrfs_abort_transaction(trans, ret);
5af3e8cce8b7ba Stefan Behrens 2012-08-01  3283  		goto out_wake_log_root;
5af3e8cce8b7ba Stefan Behrens 2012-08-01  3284  	}
7237f1833601dc Yan Zheng      2009-01-21  3285  
257c62e1bce03e Chris Mason    2009-10-13  3286  	mutex_lock(&root->log_mutex);
257c62e1bce03e Chris Mason    2009-10-13  3287  	if (root->last_log_commit < log_transid)
257c62e1bce03e Chris Mason    2009-10-13  3288  		root->last_log_commit = log_transid;
257c62e1bce03e Chris Mason    2009-10-13  3289  	mutex_unlock(&root->log_mutex);
257c62e1bce03e Chris Mason    2009-10-13  3290  
12fcfd22fe5bf4 Chris Mason    2009-03-24  3291  out_wake_log_root:
570dd45042a7c8 Chris Mason    2016-10-27  3292  	mutex_lock(&log_root_tree->log_mutex);
8b050d350c7846 Miao Xie       2014-02-20  3293  	btrfs_remove_all_log_ctxs(log_root_tree, index2, ret);
8b050d350c7846 Miao Xie       2014-02-20  3294  
d1433debe7f434 Miao Xie       2014-02-20  3295  	log_root_tree->log_transid_committed++;
7237f1833601dc Yan Zheng      2009-01-21  3296  	atomic_set(&log_root_tree->log_commit[index2], 0);
d1433debe7f434 Miao Xie       2014-02-20  3297  	mutex_unlock(&log_root_tree->log_mutex);
d1433debe7f434 Miao Xie       2014-02-20  3298  
33a9eca7e4a4c2 David Sterba   2015-10-10  3299  	/*
093258e6ebaf17 David Sterba   2018-02-26  3300  	 * The barrier before waitqueue_active (in cond_wake_up) is needed so
093258e6ebaf17 David Sterba   2018-02-26  3301  	 * all the updates above are seen by the woken threads. It might not be
093258e6ebaf17 David Sterba   2018-02-26  3302  	 * necessary, but proving that seems to be hard.
33a9eca7e4a4c2 David Sterba   2015-10-10  3303  	 */
093258e6ebaf17 David Sterba   2018-02-26  3304  	cond_wake_up(&log_root_tree->log_commit_wait[index2]);
e02119d5a7b439 Chris Mason    2008-09-05  3305  out:
d1433debe7f434 Miao Xie       2014-02-20  3306  	mutex_lock(&root->log_mutex);
570dd45042a7c8 Chris Mason    2016-10-27  3307  	btrfs_remove_all_log_ctxs(root, index1, ret);
d1433debe7f434 Miao Xie       2014-02-20  3308  	root->log_transid_committed++;
7237f1833601dc Yan Zheng      2009-01-21  3309  	atomic_set(&root->log_commit[index1], 0);
d1433debe7f434 Miao Xie       2014-02-20  3310  	mutex_unlock(&root->log_mutex);
8b050d350c7846 Miao Xie       2014-02-20  3311  
33a9eca7e4a4c2 David Sterba   2015-10-10  3312  	/*
093258e6ebaf17 David Sterba   2018-02-26  3313  	 * The barrier before waitqueue_active (in cond_wake_up) is needed so
093258e6ebaf17 David Sterba   2018-02-26  3314  	 * all the updates above are seen by the woken threads. It might not be
093258e6ebaf17 David Sterba   2018-02-26  3315  	 * necessary, but proving that seems to be hard.
33a9eca7e4a4c2 David Sterba   2015-10-10  3316  	 */
093258e6ebaf17 David Sterba   2018-02-26  3317  	cond_wake_up(&root->log_commit_wait[index1]);
b31eabd86eb68d Chris Mason    2011-01-31 @3318  	return ret;
e02119d5a7b439 Chris Mason    2008-09-05  3319  }
e02119d5a7b439 Chris Mason    2008-09-05  3320  

:::::: The code at line 3318 was first introduced by commit
:::::: b31eabd86eb68d3c217e6821078249bc045e698a Btrfs: catch errors from btrfs_sync_log

:::::: TO: Chris Mason <chris.mason@oracle.com>
:::::: CC: Chris Mason <chris.mason@oracle.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 27269 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-01-30  8:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-30  8:55 [kdave-btrfs-devel:for-next-20210129 14817/14851] fs/btrfs/tree-log.c:3318:1-7: preceding lock on line 3156 kernel test robot

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.