From patchwork Wed Jul 7 17:01:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: YonglongLi X-Patchwork-Id: 12363071 Received: from chinatelecom.cn (prt-mail.chinatelecom.cn [42.123.76.228]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 039AD72 for ; Wed, 7 Jul 2021 17:09:18 +0000 (UTC) HMM_SOURCE_IP: 172.18.0.218:54022.267134115 HMM_ATTACHE_NUM: 0000 HMM_SOURCE_TYPE: SMTP Received: from clientip-36.111.140.9?logid-436ef2b3ccc547e0a5ea08a54c44f662 (unknown [172.18.0.218]) by chinatelecom.cn (HERMES) with SMTP id 098152800C5; Thu, 8 Jul 2021 01:01:49 +0800 (CST) X-189-SAVE-TO-SEND: +liyonglong@chinatelecom.cn Received: from ([172.18.0.218]) by app0025 with ESMTP id 436ef2b3ccc547e0a5ea08a54c44f662 for mptcp@lists.linux.dev; Thu Jul 8 01:01:53 2021 X-Transaction-ID: 436ef2b3ccc547e0a5ea08a54c44f662 X-filter-score: X-Real-From: liyonglong@chinatelecom.cn X-Receive-IP: 172.18.0.218 X-MEDUSA-Status: 0 Sender: liyonglong@chinatelecom.cn From: Yonglong Li To: mptcp@lists.linux.dev Cc: mathew.j.martineau@linux.intel.com, geliangtang@gmail.com, Yonglong Li Subject: [PATCH v8 0/4] mptcp: fix conflicts when using pm.add_signal in ADD_ADDR/echo and RM_ADDR process Date: Thu, 8 Jul 2021 01:01:37 +0800 Message-Id: <1625677301-139357-1-git-send-email-liyonglong@chinatelecom.cn> X-Mailer: git-send-email 1.8.3.1 Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 fix issue: ADD_ADDR and RM_ADDR use pm.add_signal to mark event, so in some case pm.add_signal will be flush when ADD_ADDR/RM_ADDR in process. fix issue: if ADD_ADDR and ADD_ADDR-echo process at the same time, only one event can write pm.add_signal. so ADD_ADDR will process after add_timer timeout or ADD_ADDR-echo will not be process. Patch 1 fix ADD_ADDR and RM_ADDR maybe clear addr_signal each other. Patch 2 and 3 deal ADD_ADDR and ADD_ADDR-echo with separately to fix conflicts in using pm.addr_signal porcess. Patch 4 MPTCP_ADD_ADDR_IPV6 and MPTCP_ADD_ADDR_PORT is not necessary. v1->v2: - remove READ_ONCE under the pm spin lock. v2->v3: - Patch 2: mptcp_pm_should_add_addr => mptcp_pm_should_add_signal_addr - Patch 3: avoid read-modify-write of msk->pm.addr_signal and change mptcp_pm_add_addr_signal to return void. v3->v4: - Patch 1: use ~(BIT(MPTCP_ADD_ADDR_SIGNAL) | BIT(MPTCP_ADD_ADDR_ECHO)) instead of BIT(MPTCP_RM_ADDR_SIGNAL) - Patch 3: simple the code; init flags; fix wrong goto logic code; v4->v5: - Patch 3: simple the code of 'mptcp_established_options_add_addr' v5->v6: - Patch2: fix fails of 'mptcp_join.sh -t'. In mptcp_pm_add_addr_send_ack without MPTCP_ADD_ADDR_SIGNAL check so pure ack can not be sent for ADD_ADDR. That cause ADD_ADDR can not be sent in time. - Patch3: refactor some code according Geliang's suggestions. - Patch4: modify commit comment v6->v7: - Patch1: use reverse xmas tree order for variables definition - Patch3: refactor some code according Geliang's suggestions. - add a Patch4: remove some double-check v7->v8: - Patch1,2: exchange patch1 and patch2 - Patch3: refactor some code according Geliang's suggestions. - remove patch "remove some double check", Geliang think it's unnecessary Yonglong Li (4): mptcp: make MPTCP_ADD_ADDR_SIGNAL and MPTCP_ADD_ADDR_ECHO separate mptcp: fix ADD_ADDR and RM_ADDR maybe flush addr_signal each other mptcp: build ADD_ADDR/echo-ADD_ADDR option according pm.add_signal mptcp: remove MPTCP_ADD_ADDR_IPV6 and MPTCP_ADD_ADDR_PORT include/net/mptcp.h | 3 ++- net/mptcp/options.c | 51 +++++++++++++++++++++++++++----------------------- net/mptcp/pm.c | 51 +++++++++++++++++++++++++++++++------------------- net/mptcp/pm_netlink.c | 10 ++++------ net/mptcp/protocol.h | 44 +++++++++++++++++++++++-------------------- 5 files changed, 90 insertions(+), 69 deletions(-)