CC: [email protected]
TO: Naohiro Aota <[email protected]>
CC: David Sterba <[email protected]>
CC: Josef Bacik <[email protected]>
CC: Johannes Thumshirn <[email protected]>

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 <[email protected]>
Reported-by: Julia Lawall <[email protected]>


"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 <[email protected]>
:::::: CC: Chris Mason <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to