mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
libdm: add check transaction_id after message
Add extra safety detection for thin pool transaction id and query pool status after confirmed message. In case there is a missmatch, immeditelly abort further processing.
This commit is contained in:
parent
0794a10f91
commit
8f518cf197
@ -1,5 +1,6 @@
|
|||||||
Version 1.02.89 -
|
Version 1.02.89 -
|
||||||
=================================
|
=================================
|
||||||
|
Add extra check for matching transation_id after message submitting.
|
||||||
Add dm_report_field_string_list_unsorted for str. list report without sorting.
|
Add dm_report_field_string_list_unsorted for str. list report without sorting.
|
||||||
Support --deferred with dmsetup remove to defer removal of open devices.
|
Support --deferred with dmsetup remove to defer removal of open devices.
|
||||||
Update dm-ioctl.h to include DM_DEFERRED_REMOVE flag.
|
Update dm-ioctl.h to include DM_DEFERRED_REMOVE flag.
|
||||||
|
@ -1561,7 +1561,7 @@ static int _node_send_messages(struct dm_tree_node *dnode,
|
|||||||
|
|
||||||
/* Error if there are no stacked messages or id mismatches */
|
/* Error if there are no stacked messages or id mismatches */
|
||||||
if (trans_id != (seg->transaction_id - have_messages)) {
|
if (trans_id != (seg->transaction_id - have_messages)) {
|
||||||
log_error("Thin pool transaction_id=%" PRIu64 ", while expected: %" PRIu64 ".",
|
log_error("Thin pool transaction_id is %" PRIu64 ", while expected %" PRIu64 ".",
|
||||||
trans_id, seg->transaction_id - have_messages);
|
trans_id, seg->transaction_id - have_messages);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1569,9 +1569,21 @@ static int _node_send_messages(struct dm_tree_node *dnode,
|
|||||||
if (!send)
|
if (!send)
|
||||||
return 1; /* transaction_id is matching */
|
return 1; /* transaction_id is matching */
|
||||||
|
|
||||||
dm_list_iterate_items(tmsg, &seg->thin_messages)
|
dm_list_iterate_items(tmsg, &seg->thin_messages) {
|
||||||
if (!(_thin_pool_node_message(dnode, tmsg)))
|
if (!(_thin_pool_node_message(dnode, tmsg)))
|
||||||
return_0;
|
return_0;
|
||||||
|
if (tmsg->message.type == DM_THIN_MESSAGE_SET_TRANSACTION_ID) {
|
||||||
|
if (!_thin_pool_status_transaction_id(dnode, &trans_id))
|
||||||
|
return_0;
|
||||||
|
if (trans_id != tmsg->message.u.m_set_transaction_id.new_id) {
|
||||||
|
log_error("Thin pool transaction_id is %" PRIu64
|
||||||
|
" and does not match expected %" PRIu64 ".",
|
||||||
|
trans_id,
|
||||||
|
tmsg->message.u.m_set_transaction_id.new_id);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dnode->props.send_messages = 0; /* messages posted */
|
dnode->props.send_messages = 0; /* messages posted */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user