@@ -1346,8 +1346,11 @@ static void __btree_split_node(struct btree_update *as,
1346
1346
struct bkey_packed * out [2 ];
1347
1347
struct bkey uk ;
1348
1348
unsigned u64s , n1_u64s = (b -> nr .live_u64s * 3 ) / 5 ;
1349
+ struct { unsigned nr_keys , val_u64s ; } nr_keys [2 ];
1349
1350
int i ;
1350
1351
1352
+ memset (& nr_keys , 0 , sizeof (nr_keys ));
1353
+
1351
1354
for (i = 0 ; i < 2 ; i ++ ) {
1352
1355
BUG_ON (n [i ]-> nsets != 1 );
1353
1356
@@ -1369,6 +1372,9 @@ static void __btree_split_node(struct btree_update *as,
1369
1372
if (!i )
1370
1373
n1_pos = uk .p ;
1371
1374
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 );
1372
1378
}
1373
1379
1374
1380
btree_set_min (n [0 ], b -> data -> min_key );
@@ -1381,6 +1387,12 @@ static void __btree_split_node(struct btree_update *as,
1381
1387
bch2_bkey_format_add_pos (& format [i ], n [i ]-> data -> max_key );
1382
1388
1383
1389
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
+
1384
1396
btree_node_set_format (n [i ], n [i ]-> data -> format );
1385
1397
}
1386
1398
0 commit comments