From 2b3feb70e34af5a5541e7ede15724f4d094d0f7a Mon Sep 17 00:00:00 2001 From: John Wren Kennedy Date: Thu, 1 Apr 2021 19:46:14 +0000 Subject: [PATCH 1/7] @@DELPHIX_PATCHSET_START@@ This is a placeholder commit to separate the Ubuntu kernel source and our patches. Used by kernel_merge_with_upstream() in the linux-pkg repo. --- delphix | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 delphix diff --git a/delphix b/delphix new file mode 100644 index 0000000000000..e69de29bb2d1d From a5d5a95201aeb38d0951fd96de6dd8f1c15f3c7d Mon Sep 17 00:00:00 2001 From: Pavel Zakharov Date: Tue, 9 Feb 2021 11:15:55 -0500 Subject: [PATCH 2/7] DLPX-71852 iSCSI: journal flooded with "Unable to locate Target IQN" messages (#2) --- drivers/target/iscsi/iscsi_target_login.c | 2 +- drivers/target/iscsi/iscsi_target_nego.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c index 90b870f234f03..7ecf561465657 100644 --- a/drivers/target/iscsi/iscsi_target_login.c +++ b/drivers/target/iscsi/iscsi_target_login.c @@ -1132,7 +1132,7 @@ void iscsi_target_login_sess_out(struct iscsit_conn *conn, if (!new_sess) goto old_sess_out; - pr_err("iSCSI Login negotiation failed.\n"); + pr_debug("iSCSI Login negotiation failed.\n"); iscsit_collect_login_stats(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, ISCSI_LOGIN_STATUS_INIT_ERR); if (!zero_tsih || !conn->sess) diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c index fa3fb5f4e6bc4..5cddf8e60b3e6 100644 --- a/drivers/target/iscsi/iscsi_target_nego.c +++ b/drivers/target/iscsi/iscsi_target_nego.c @@ -1234,7 +1234,7 @@ int iscsi_target_locate_portal( */ tiqn = iscsit_get_tiqn_for_login(t_buf); if (!tiqn) { - pr_err("Unable to locate Target IQN: %s in" + pr_debug("Unable to locate Target IQN: %s in" " Storage Node\n", t_buf); iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, ISCSI_LOGIN_STATUS_SVC_UNAVAILABLE); From 34738a07bfcf36b212601b4f0bb535907884ed49 Mon Sep 17 00:00:00 2001 From: Pavel Zakharov Date: Mon, 8 Mar 2021 18:11:08 -0500 Subject: [PATCH 3/7] DLPX-72065 Aborted iSCSI command never completes after LUN reset (#4) --- drivers/target/iscsi/iscsi_target_erl1.c | 23 +++++++++++++++++++---- drivers/target/target_core_transport.c | 3 ++- include/target/target_core_fabric.h | 1 + 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/drivers/target/iscsi/iscsi_target_erl1.c b/drivers/target/iscsi/iscsi_target_erl1.c index 6797200211836..26f3ecd25c28d 100644 --- a/drivers/target/iscsi/iscsi_target_erl1.c +++ b/drivers/target/iscsi/iscsi_target_erl1.c @@ -1102,6 +1102,18 @@ void iscsit_handle_dataout_timeout(struct timer_list *t) iscsit_inc_conn_usage_count(conn); + /* + * If the command was aborted, for instance following a LUN RESET, + * a dataout timeout might be normal. + */ + if (target_cmd_interrupted(&cmd->se_cmd)) { + pr_debug("DataOut timeout on interrupted cmd with" + " ITT[0x%08llx]\n", cmd->se_cmd.tag); + cmd->dataout_timer_flags &= ~ISCSI_TF_RUNNING; + iscsit_dec_conn_usage_count(conn); + return; + } + spin_lock_bh(&cmd->dataout_timeout_lock); if (cmd->dataout_timer_flags & ISCSI_TF_STOP) { spin_unlock_bh(&cmd->dataout_timeout_lock); @@ -1115,19 +1127,22 @@ void iscsit_handle_dataout_timeout(struct timer_list *t) if (!sess->sess_ops->ErrorRecoveryLevel) { pr_err("Unable to recover from DataOut timeout while" " in ERL=0, closing iSCSI connection for I_T Nexus" - " %s,i,0x%6phN,%s,t,0x%02x\n", + " %s,i,0x%6phN,%s,t,0x%02x, cmd ITT[0x%08llx]\n", sess->sess_ops->InitiatorName, sess->isid, - sess->tpg->tpg_tiqn->tiqn, (u32)sess->tpg->tpgt); + sess->tpg->tpg_tiqn->tiqn, (u32)sess->tpg->tpgt, + cmd->se_cmd.tag); goto failure; } if (++cmd->dataout_timeout_retries == na->dataout_timeout_retries) { pr_err("Command ITT: 0x%08x exceeded max retries" " for DataOUT timeout %u, closing iSCSI connection for" - " I_T Nexus %s,i,0x%6phN,%s,t,0x%02x\n", + " I_T Nexus %s,i,0x%6phN,%s,t,0x%02x," + " cmd ITT[0x%08llx]\n", cmd->init_task_tag, na->dataout_timeout_retries, sess->sess_ops->InitiatorName, sess->isid, - sess->tpg->tpg_tiqn->tiqn, (u32)sess->tpg->tpgt); + sess->tpg->tpg_tiqn->tiqn, (u32)sess->tpg->tpgt, + cmd->se_cmd.tag); goto failure; } diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 73d0d6133ac8f..d37b2641bfe50 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -882,7 +882,7 @@ static void target_abort_work(struct work_struct *work) target_handle_abort(cmd); } -static bool target_cmd_interrupted(struct se_cmd *cmd) +bool target_cmd_interrupted(struct se_cmd *cmd) { int post_ret; @@ -901,6 +901,7 @@ static bool target_cmd_interrupted(struct se_cmd *cmd) return false; } +EXPORT_SYMBOL(target_cmd_interrupted); /* May be called from interrupt context so must not sleep. */ void target_complete_cmd_with_sense(struct se_cmd *cmd, u8 scsi_status, diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h index 3378ff9ee271c..4f136a98df63e 100644 --- a/include/target/target_core_fabric.h +++ b/include/target/target_core_fabric.h @@ -191,6 +191,7 @@ sense_reason_t transport_generic_new_cmd(struct se_cmd *); void target_put_cmd_and_wait(struct se_cmd *cmd); void target_execute_cmd(struct se_cmd *cmd); +bool target_cmd_interrupted(struct se_cmd *cmd); int transport_generic_free_cmd(struct se_cmd *, int); From c8241daed493306b74a1ce8eb06578f5ab78626a Mon Sep 17 00:00:00 2001 From: Paul Dagnelie Date: Mon, 14 Nov 2022 13:49:55 -0800 Subject: [PATCH 4/7] DLPX-83697 iscsi target login should wait until tx/rx threads have properly started (#14) --- drivers/target/iscsi/iscsi_target.c | 2 ++ drivers/target/iscsi/iscsi_target_login.c | 3 +++ include/target/iscsi/iscsi_target_core.h | 1 + 3 files changed, 6 insertions(+) diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index 1d25e64b068a0..f1eed1d49c8a0 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c @@ -3922,6 +3922,7 @@ int iscsi_target_tx_thread(void *arg) * connection recovery / failure event can be triggered externally. */ allow_signal(SIGINT); + complete(&conn->kthr_start_comp); while (!kthread_should_stop()) { /* @@ -4170,6 +4171,7 @@ int iscsi_target_rx_thread(void *arg) * connection recovery / failure event can be triggered externally. */ allow_signal(SIGINT); + complete(&conn->kthr_start_comp); /* * Wait for iscsi_post_login_handler() to complete before allowing * incoming iscsi/tcp socket I/O, and/or failing the connection. diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c index 7ecf561465657..d564f9ae4db97 100644 --- a/drivers/target/iscsi/iscsi_target_login.c +++ b/drivers/target/iscsi/iscsi_target_login.c @@ -660,6 +660,7 @@ int iscsit_start_kthreads(struct iscsit_conn *conn) ret = PTR_ERR(conn->tx_thread); goto out_bitmap; } + wait_for_completion(&conn->kthr_start_comp); conn->tx_thread_active = true; conn->rx_thread = kthread_run(iscsi_target_rx_thread, conn, @@ -669,6 +670,7 @@ int iscsit_start_kthreads(struct iscsit_conn *conn) ret = PTR_ERR(conn->rx_thread); goto out_tx; } + wait_for_completion(&conn->kthr_start_comp); conn->rx_thread_active = true; return 0; @@ -1064,6 +1066,7 @@ static struct iscsit_conn *iscsit_alloc_conn(struct iscsi_np *np) init_completion(&conn->rx_half_close_comp); init_completion(&conn->tx_half_close_comp); init_completion(&conn->rx_login_comp); + init_completion(&conn->kthr_start_comp); spin_lock_init(&conn->cmd_lock); spin_lock_init(&conn->conn_usage_lock); spin_lock_init(&conn->immed_queue_lock); diff --git a/include/target/iscsi/iscsi_target_core.h b/include/target/iscsi/iscsi_target_core.h index 60af7c63b34e6..002f37b6366f5 100644 --- a/include/target/iscsi/iscsi_target_core.h +++ b/include/target/iscsi/iscsi_target_core.h @@ -550,6 +550,7 @@ struct iscsit_conn { struct completion conn_logout_comp; struct completion tx_half_close_comp; struct completion rx_half_close_comp; + struct completion kthr_start_comp; /* socket used by this connection */ struct socket *sock; void (*orig_data_ready)(struct sock *); From 9fc5440b9b0c2abd99027dc6bdc39c68719bcc50 Mon Sep 17 00:00:00 2001 From: Don Brady Date: Fri, 9 Dec 2022 16:21:35 -0700 Subject: [PATCH 5/7] DLPX-83701 Make function mnt_add_count() traceable (#16) --- fs/namespace.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/namespace.c b/fs/namespace.c index a39b71e814bd6..bd84dbf560fd6 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -169,7 +169,7 @@ void mnt_release_group_id(struct mount *mnt) /* * vfsmount lock must be held for read */ -static inline void mnt_add_count(struct mount *mnt, int n) +static noinline __noclone void mnt_add_count(struct mount *mnt, int n) { #ifdef CONFIG_SMP this_cpu_add(mnt->mnt_pcp->mnt_count, n); @@ -1704,7 +1704,8 @@ static int do_umount_root(struct super_block *sb) return ret; } -static int do_umount(struct mount *mnt, int flags) +/* force a bpftrace dynamic function probe here */ +static noinline __noclone int do_umount(struct mount *mnt, int flags) { struct super_block *sb = mnt->mnt.mnt_sb; int retval; From f5c68a147d550effb99dd033a45d0691b5ea3744 Mon Sep 17 00:00:00 2001 From: Palash Gandhi Date: Thu, 17 Oct 2024 09:07:14 -0700 Subject: [PATCH 6/7] Extract PKG_ABI from mutated string --- debian/rules.d/0-common-vars.mk | 2 +- include/asm-generic/mshyperv.h | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/debian/rules.d/0-common-vars.mk b/debian/rules.d/0-common-vars.mk index 5cd38f6f1b6c9..98347b798c5f1 100644 --- a/debian/rules.d/0-common-vars.mk +++ b/debian/rules.d/0-common-vars.mk @@ -201,7 +201,7 @@ kmake = make ARCH=$(build_arch) \ KERNELRELEASE=$(abi_release)-$(target_flavour) \ CONFIG_DEBUG_SECTION_MISMATCH=y \ KBUILD_BUILD_VERSION="$(uploadnum)" \ - CFLAGS_MODULE="-DPKG_ABI=$(abinum)" \ + CFLAGS_MODULE='-DPKG_ABI=\"$(abinum)\"' \ PYTHON=$(PYTHON) ifneq ($(LOCAL_ENV_CC),) kmake += CC="$(LOCAL_ENV_CC)" DISTCC_HOSTS="$(LOCAL_ENV_DISTCC_HOSTS)" diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h index 1cfc69cb7efbe..ee759c8245f64 100644 --- a/include/asm-generic/mshyperv.h +++ b/include/asm-generic/mshyperv.h @@ -18,6 +18,7 @@ #ifndef _ASM_GENERIC_MSHYPERV_H #define _ASM_GENERIC_MSHYPERV_H +#include #include #include #include @@ -120,7 +121,7 @@ static inline u64 hv_do_rep_hypercall(u16 code, u16 rep_count, u16 varhead_size, * Preserve the ability to 'make deb-pkg' since PKG_ABI is provided * by the Ubuntu build rules. */ -#define PKG_ABI 0 +#define PKG_ABI "0" #endif /* Generate the guest OS identifier as described in the Hyper-V TLFS */ @@ -130,7 +131,15 @@ static inline u64 hv_generate_guest_id(u64 kernel_version) guest_id = (((u64)HV_LINUX_VENDOR_ID) << 48); guest_id |= (kernel_version << 16); - guest_id |= PKG_ABI; + /* + * Delphix mutates the ABI number by appending a date and the commit hash. Strip it. + */ + char *token; + char *pkg_abi_str = PKG_ABI; + token = strsep(&pkg_abi_str, "-"); + unsigned long abi_number = simple_strtoul(token, NULL, 10); + guest_id |= (abi_number << 8); + return guest_id; } From 8ff4e3260a1e842973ff7980266916322f20ed56 Mon Sep 17 00:00:00 2001 From: Sebastien Roy Date: Thu, 24 Apr 2025 16:44:25 -0400 Subject: [PATCH 7/7] Reintroduce fix from DLPX-87344 to build only with amd64 annotations --- debian.oracle/config/annotations | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian.oracle/config/annotations b/debian.oracle/config/annotations index e68fb625449ec..0a91867562b29 100644 --- a/debian.oracle/config/annotations +++ b/debian.oracle/config/annotations @@ -1,7 +1,7 @@ # Menu: HEADER # FORMAT: 4 -# ARCH: amd64 arm64 -# FLAVOUR: amd64-oracle arm64-oracle arm64-oracle-64k +# ARCH: amd64 +# FLAVOUR: amd64-oracle include "../../debian.master/config/annotations"