@@ -9308,7 +9308,8 @@ bs_swap_blobs(struct spdk_blob *destblob, struct spdk_blob *srcblob)
9308
9308
uint32_t * active_extent_pages = NULL , * clean_extent_pages = NULL ;
9309
9309
uint64_t * active_clusters = NULL , * clean_clusters = NULL ;
9310
9310
uint32_t * active_pages = NULL , * clean_pages = NULL ;
9311
- struct spdk_xattr * xattr ;
9311
+ // struct spdk_xattr *xattr;
9312
+ // struct spdk_xattr *new_xattr;
9312
9313
assert (destblob != NULL );
9313
9314
assert (srcblob != NULL );
9314
9315
@@ -9325,16 +9326,66 @@ bs_swap_blobs(struct spdk_blob *destblob, struct spdk_blob *srcblob)
9325
9326
9326
9327
destblob -> back_bs_dev = srcblob -> back_bs_dev ;
9327
9328
9329
+ // Free any existing xattrs in the destination blob
9328
9330
xattrs_free (& destblob -> xattrs );
9329
9331
xattrs_free (& destblob -> xattrs_internal );
9330
9332
9331
- TAILQ_FOREACH (xattr , & srcblob -> xattrs , link ) {
9332
- TAILQ_INSERT_TAIL (& destblob -> xattrs , xattr , link );
9333
- }
9333
+ // Swap the xattrs between the source and destination blobs
9334
+ TAILQ_SWAP (& destblob -> xattrs , & srcblob -> xattrs , spdk_xattr , link );
9335
+ TAILQ_SWAP (& destblob -> xattrs_internal , & srcblob -> xattrs_internal , spdk_xattr , link );
9336
+
9337
+ // Free the xattrs in the source blob after the swap
9338
+ xattrs_free (& srcblob -> xattrs );
9339
+ xattrs_free (& srcblob -> xattrs_internal );
9340
+
9341
+ // TAILQ_FOREACH(xattr, &srcblob->xattrs, link) {
9342
+ // new_xattr = calloc(1, sizeof(*new_xattr));
9343
+ // // if (xattr == NULL) {
9344
+ // // return -ENOMEM;
9345
+ // // }
9346
+ // new_xattr->name = malloc(strlen(xattr->name) + 1);
9347
+ // // if (xattr->name == NULL) {
9348
+ // // free(xattr);
9349
+ // // return -ENOMEM;
9350
+ // // }
9351
+
9352
+ // new_xattr->value = malloc(xattr->value_len);
9353
+ // // if (xattr->value == NULL) {
9354
+ // // free(xattr->name);
9355
+ // // free(xattr);
9356
+ // // return -ENOMEM;
9357
+ // // }
9358
+ // new_xattr->value_len = xattr->value_len;
9359
+ // memcpy(new_xattr->name, xattr->name, strlen(xattr->name));
9360
+ // new_xattr->name[strlen(xattr->name)] = '\0';
9361
+ // memcpy(new_xattr->value, xattr->value, xattr->value_len);
9362
+ // TAILQ_INSERT_TAIL(&destblob->xattrs, new_xattr, link);
9363
+ // }
9334
9364
9335
- TAILQ_FOREACH (xattr , & srcblob -> xattrs_internal , link ) {
9336
- TAILQ_INSERT_TAIL (& destblob -> xattrs_internal , xattr , link );
9337
- }
9365
+ // TAILQ_FOREACH(xattr, &srcblob->xattrs_internal, link) {
9366
+ // new_xattr = calloc(1, sizeof(*new_xattr));
9367
+ // // if (xattr == NULL) {
9368
+ // // return -ENOMEM;
9369
+ // // }
9370
+ // new_xattr->name = malloc(strlen(xattr->name) + 1);
9371
+ // // if (xattr->name == NULL) {
9372
+ // // free(xattr);
9373
+ // // return -ENOMEM;
9374
+ // // }
9375
+
9376
+ // new_xattr->value = malloc(xattr->value_len);
9377
+ // // if (xattr->value == NULL) {
9378
+ // // free(xattr->name);
9379
+ // // free(xattr);
9380
+ // // return -ENOMEM;
9381
+ // // }
9382
+
9383
+ // new_xattr->value_len = xattr->value_len;
9384
+ // memcpy(new_xattr->name, xattr->name, strlen(xattr->name));
9385
+ // new_xattr->name[strlen(xattr->name)] = '\0';
9386
+ // memcpy(new_xattr->value, xattr->value, xattr->value_len);
9387
+ // TAILQ_INSERT_TAIL(&destblob->xattrs_internal, new_xattr, link);
9388
+ // }
9338
9389
9339
9390
destblob -> state = srcblob -> state ;
9340
9391
@@ -9407,13 +9458,15 @@ bs_update_blob_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
9407
9458
}
9408
9459
blob_free (newblob );
9409
9460
bs_sequence_finish (seq , bserrno );
9461
+ free (ctx );
9410
9462
return ;
9411
9463
}
9412
9464
//copy the newblob to origblob
9413
9465
bs_swap_blobs (origblob , newblob );
9414
9466
bs_dump_blob_from_mem (origblob , NULL , false, "/etc/simplyblock/" );
9415
- // bs_dump_blob_from_mem(origblob, NULL, false, "/root/");
9467
+ // bs_dump_blob_from_mem(origblob, NULL, false, "/root/");
9416
9468
bs_sequence_finish (seq , bserrno );
9469
+ free (ctx );
9417
9470
}
9418
9471
9419
9472
static void
@@ -9482,6 +9535,7 @@ bs_update_blob_on_failover(struct spdk_blob_store *bs,
9482
9535
seq = bs_sequence_start_bs (bs -> md_channel , & cpl );
9483
9536
if (!seq ) {
9484
9537
blob_free (newblob );
9538
+ free (ctx );
9485
9539
cb_fn (cb_arg , origblob , - ENOMEM );
9486
9540
return ;
9487
9541
}
0 commit comments