Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

md-cluster: check the return value of process_recvd_msg

We don't need to run the full path of recv_daemon
if process_recvd_msg doesn't return 0.

Reviewed-by: NeilBrown <neilb@suse.com>
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: Shaohua Li <shli@fb.com>

authored by

Guoqing Jiang and committed by
Shaohua Li
1fa9a1ad 51e453ae

+10 -3
+10 -3
drivers/md/md-cluster.c
··· 520 520 __func__, __LINE__, le32_to_cpu(msg->raid_slot)); 521 521 } 522 522 523 - static void process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg) 523 + static int process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg) 524 524 { 525 + int ret = 0; 526 + 525 527 if (WARN(mddev->cluster_info->slot_number - 1 == le32_to_cpu(msg->slot), 526 528 "node %d received it's own msg\n", le32_to_cpu(msg->slot))) 527 - return; 529 + return -1; 528 530 switch (le32_to_cpu(msg->type)) { 529 531 case METADATA_UPDATED: 530 532 process_metadata_update(mddev, msg); ··· 549 547 __recover_slot(mddev, le32_to_cpu(msg->slot)); 550 548 break; 551 549 default: 550 + ret = -1; 552 551 pr_warn("%s:%d Received unknown message from %d\n", 553 552 __func__, __LINE__, msg->slot); 554 553 } 554 + return ret; 555 555 } 556 556 557 557 /* ··· 577 573 578 574 /* read lvb and wake up thread to process this message_lockres */ 579 575 memcpy(&msg, message_lockres->lksb.sb_lvbptr, sizeof(struct cluster_msg)); 580 - process_recvd_msg(thread->mddev, &msg); 576 + ret = process_recvd_msg(thread->mddev, &msg); 577 + if (ret) 578 + goto out; 581 579 582 580 /*release CR on ack_lockres*/ 583 581 ret = dlm_unlock_sync(ack_lockres); ··· 593 587 ret = dlm_lock_sync(ack_lockres, DLM_LOCK_CR); 594 588 if (unlikely(ret != 0)) 595 589 pr_info("lock CR on ack failed return %d\n", ret); 590 + out: 596 591 /*release CR on message_lockres*/ 597 592 ret = dlm_unlock_sync(message_lockres); 598 593 if (unlikely(ret != 0))