@@ -1346,8 +1346,11 @@ static void __btree_split_node(struct btree_update *as,
13461346 struct bkey_packed * out [2 ];
13471347 struct bkey uk ;
13481348 unsigned u64s , n1_u64s = (b -> nr .live_u64s * 3 ) / 5 ;
1349+ struct { unsigned nr_keys , val_u64s ; } nr_keys [2 ];
13491350 int i ;
13501351
1352+ memset (& nr_keys , 0 , sizeof (nr_keys ));
1353+
13511354 for (i = 0 ; i < 2 ; i ++ ) {
13521355 BUG_ON (n [i ]-> nsets != 1 );
13531356
@@ -1369,6 +1372,9 @@ static void __btree_split_node(struct btree_update *as,
13691372 if (!i )
13701373 n1_pos = uk .p ;
13711374 bch2_bkey_format_add_key (& format [i ], & uk );
1375+
1376+ nr_keys [i ].nr_keys ++ ;
1377+ nr_keys [i ].val_u64s += bkeyp_val_u64s (& b -> format , k );
13721378 }
13731379
13741380 btree_set_min (n [0 ], b -> data -> min_key );
@@ -1381,6 +1387,12 @@ static void __btree_split_node(struct btree_update *as,
13811387 bch2_bkey_format_add_pos (& format [i ], n [i ]-> data -> max_key );
13821388
13831389 n [i ]-> data -> format = bch2_bkey_format_done (& format [i ]);
1390+
1391+ unsigned u64s = nr_keys [i ].nr_keys * n [i ]-> data -> format .key_u64s +
1392+ nr_keys [i ].val_u64s ;
1393+ if (__vstruct_bytes (struct btree_node , u64s ) > btree_bytes (as -> c ))
1394+ n [i ]-> data -> format = b -> format ;
1395+
13841396 btree_node_set_format (n [i ], n [i ]-> data -> format );
13851397 }
13861398
0 commit comments