stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Damien Le Moal <damien.lemoal@wdc.com>,
	Bart Van Assche <bvanassche@acm.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>
Subject: [PATCH 4.14 088/119] scsi: core: save/restore command resid for error handling
Date: Sun, 27 Oct 2019 22:01:05 +0100	[thread overview]
Message-ID: <20191027203347.970364903@linuxfoundation.org> (raw)
In-Reply-To: <20191027203259.948006506@linuxfoundation.org>

From: Damien Le Moal <damien.lemoal@wdc.com>

commit 8f8fed0cdbbd6cdbf28d9ebe662f45765d2f7d39 upstream.

When a non-passthrough command is terminated with CHECK CONDITION, request
sense is executed by hijacking the command descriptor. Since
scsi_eh_prep_cmnd() and scsi_eh_restore_cmnd() do not save/restore the
original command resid, the value returned on failure of the original
command is lost and replaced with the value set by the execution of the
request sense command. This value may in many instances be unaligned to the
device sector size, causing sd_done() to print a warning message about the
incorrect unaligned resid before the command is retried.

Fix this problem by saving the original command residual in struct
scsi_eh_save using scsi_eh_prep_cmnd() and restoring it in
scsi_eh_restore_cmnd(). In addition, to make sure that the request sense
command is executed with a correctly initialized command structure, also
reset the residual to 0 in scsi_eh_prep_cmnd() after saving the original
command value in struct scsi_eh_save.

Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20191001074839.1994-1-damien.lemoal@wdc.com
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/scsi/scsi_error.c |    3 +++
 include/scsi/scsi_eh.h    |    1 +
 2 files changed, 4 insertions(+)

--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -935,6 +935,7 @@ void scsi_eh_prep_cmnd(struct scsi_cmnd
 	ses->sdb = scmd->sdb;
 	ses->next_rq = scmd->request->next_rq;
 	ses->result = scmd->result;
+	ses->resid_len = scmd->req.resid_len;
 	ses->underflow = scmd->underflow;
 	ses->prot_op = scmd->prot_op;
 	ses->eh_eflags = scmd->eh_eflags;
@@ -946,6 +947,7 @@ void scsi_eh_prep_cmnd(struct scsi_cmnd
 	memset(&scmd->sdb, 0, sizeof(scmd->sdb));
 	scmd->request->next_rq = NULL;
 	scmd->result = 0;
+	scmd->req.resid_len = 0;
 
 	if (sense_bytes) {
 		scmd->sdb.length = min_t(unsigned, SCSI_SENSE_BUFFERSIZE,
@@ -999,6 +1001,7 @@ void scsi_eh_restore_cmnd(struct scsi_cm
 	scmd->sdb = ses->sdb;
 	scmd->request->next_rq = ses->next_rq;
 	scmd->result = ses->result;
+	scmd->req.resid_len = ses->resid_len;
 	scmd->underflow = ses->underflow;
 	scmd->prot_op = ses->prot_op;
 	scmd->eh_eflags = ses->eh_eflags;
--- a/include/scsi/scsi_eh.h
+++ b/include/scsi/scsi_eh.h
@@ -32,6 +32,7 @@ extern int scsi_ioctl_reset(struct scsi_
 struct scsi_eh_save {
 	/* saved state */
 	int result;
+	unsigned int resid_len;
 	int eh_eflags;
 	enum dma_data_direction data_direction;
 	unsigned underflow;



  parent reply	other threads:[~2019-10-27 21:34 UTC|newest]

Thread overview: 135+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-27 20:59 [PATCH 4.14 000/119] 4.14.151-stable review Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 001/119] scsi: ufs: skip shutdown if hba is not powered Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 002/119] scsi: megaraid: disable device when probe failed after enabled device Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 003/119] scsi: qla2xxx: Fix unbound sleep in fcport delete path Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 004/119] ARM: OMAP2+: Fix missing reset done flag for am3 and am43 Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 005/119] ieee802154: ca8210: prevent memory leak Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 006/119] ARM: dts: am4372: Set memory bandwidth limit for DISPC Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 007/119] net: dsa: qca8k: Use up to 7 ports for all operations Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 008/119] MIPS: dts: ar9331: fix interrupt-controller size Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 009/119] xen/efi: Set nonblocking callbacks Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 010/119] nl80211: fix null pointer dereference Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 011/119] mac80211: fix txq " Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 012/119] mips: Loongson: Fix the link time qualifier of serial_exit() Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 013/119] net: hisilicon: Fix usage of uninitialized variable in function mdio_sc_cfg_reg_write() Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 014/119] r8152: Set macpassthru in reset_resume callback Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 015/119] namespace: fix namespace.pl script to support relative paths Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 016/119] md/raid0: fix warning message for parameter default_layout Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 017/119] Revert "drm/radeon: Fix EEH during kexec" Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 018/119] ocfs2: fix panic due to ocfs2_wq is null Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 019/119] ipv4: Return -ENETUNREACH if we cant create route but saddr is valid Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 020/119] net: bcmgenet: Fix RGMII_MODE_EN value for GENET v1/2/3 Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 021/119] net: bcmgenet: Set phydev->dev_flags only for internal PHYs Greg Kroah-Hartman
2019-10-27 20:59 ` [PATCH 4.14 022/119] net: i82596: fix dma_alloc_attr for sni_82596 Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 023/119] net: stmmac: disable/enable ptp_ref_clk in suspend/resume flow Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 024/119] sctp: change sctp_prot .no_autobind with true Greg Kroah-Hartman
2019-10-31  7:54   ` Rantala, Tommi T. (Nokia - FI/Espoo)
2019-10-31  9:14     ` Xin Long
2019-10-31 12:09       ` Sasha Levin
2019-11-01 17:58         ` Xin Long
2019-11-01 18:48           ` Sasha Levin
2019-10-27 21:00 ` [PATCH 4.14 025/119] net: avoid potential infinite loop in tc_ctl_action() Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 026/119] MIPS: Treat Loongson Extensions as ASEs Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 027/119] MIPS: elf_hwcap: Export userspace ASEs Greg Kroah-Hartman
2019-10-29 10:50   ` Jiaxun Yang
2019-10-30  9:02     ` Greg Kroah-Hartman
2019-10-30 13:22       ` [PATCH] " Jiaxun Yang
2019-12-03 12:25         ` Greg KH
2019-10-30 13:23       ` Jiaxun Yang
2019-10-27 21:00 ` [PATCH 4.14 028/119] loop: Add LOOP_SET_DIRECT_IO to compat ioctl Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 029/119] memfd: Fix locking when tagging pins Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 030/119] USB: legousbtower: fix memleak on disconnect Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 031/119] ALSA: hda/realtek - Add support for ALC711 Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 032/119] usb: udc: lpc32xx: fix bad bit shift operation Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 033/119] USB: serial: ti_usb_3410_5052: fix port-close races Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 034/119] USB: ldusb: fix memleak on disconnect Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 035/119] USB: usblp: fix use-after-free " Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 036/119] USB: ldusb: fix read info leaks Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 037/119] arm64: sysreg: Move to use definitions for all the SCTLR bits Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 038/119] arm64: Expose support for optional ARMv8-A features Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 039/119] arm64: Fix the feature type for ID register fields Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 040/119] arm64: v8.4: Support for new floating point multiplication instructions Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 041/119] arm64: Documentation: cpu-feature-registers: Remove RES0 fields Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 042/119] arm64: Expose Arm v8.4 features Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 043/119] arm64: move SCTLR_EL{1,2} assertions to <asm/sysreg.h> Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 044/119] arm64: add PSR_AA32_* definitions Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 045/119] arm64: Introduce sysreg_clear_set() Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 046/119] arm64: capabilities: Update prototype for enable call back Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 047/119] arm64: capabilities: Move errata work around check on boot CPU Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 048/119] arm64: capabilities: Move errata processing code Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 049/119] arm64: capabilities: Prepare for fine grained capabilities Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 050/119] arm64: capabilities: Add flags to handle the conflicts on late CPU Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 051/119] arm64: capabilities: Unify the verification Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 052/119] arm64: capabilities: Filter the entries based on a given mask Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 053/119] arm64: capabilities: Prepare for grouping features and errata work arounds Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 054/119] arm64: capabilities: Split the processing of " Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 055/119] arm64: capabilities: Allow features based on local CPU scope Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 056/119] arm64: capabilities: Group handling of features and errata workarounds Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 057/119] arm64: capabilities: Introduce weak features based on local CPU Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 058/119] arm64: capabilities: Restrict KPTI detection to boot-time CPUs Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 059/119] arm64: capabilities: Add support for features enabled early Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 060/119] arm64: capabilities: Change scope of VHE to Boot CPU feature Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 061/119] arm64: capabilities: Clean up midr range helpers Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 062/119] arm64: Add helpers for checking CPU MIDR against a range Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 063/119] arm64: Add MIDR encoding for Arm Cortex-A55 and Cortex-A35 Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 064/119] arm64: capabilities: Add support for checks based on a list of MIDRs Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 065/119] arm64: KVM: Use SMCCC_ARCH_WORKAROUND_1 for Falkor BP hardening Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 066/119] arm64: dont zero DIT on signal return Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 067/119] arm64: Get rid of __smccc_workaround_1_hvc_* Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 068/119] arm64: cpufeature: Detect SSBS and advertise to userspace Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 069/119] arm64: ssbd: Add support for PSTATE.SSBS rather than trapping to EL3 Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 070/119] KVM: arm64: Set SCTLR_EL2.DSSBS if SSBD is forcefully disabled and !vhe Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 071/119] arm64: fix SSBS sanitization Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 072/119] arm64: Add sysfs vulnerability show for spectre-v1 Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 073/119] arm64: add sysfs vulnerability show for meltdown Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 074/119] arm64: enable generic CPU vulnerabilites support Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 075/119] arm64: Always enable ssb vulnerability detection Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 076/119] arm64: Provide a command line to disable spectre_v2 mitigation Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 077/119] arm64: Advertise mitigation of Spectre-v2, or lack thereof Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 078/119] arm64: Always enable spectre-v2 vulnerability detection Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 079/119] arm64: add sysfs vulnerability show for spectre-v2 Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 080/119] arm64: add sysfs vulnerability show for speculative store bypass Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 081/119] arm64: ssbs: Dont treat CPUs with SSBS as unaffected by SSB Greg Kroah-Hartman
2019-10-27 21:00 ` [PATCH 4.14 082/119] arm64: Force SSBS on context switch Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 083/119] arm64: Use firmware to detect CPUs that are not affected by Spectre-v2 Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 084/119] arm64/speculation: Support mitigations= cmdline option Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 085/119] MIPS: tlbex: Fix build_restore_pagemask KScratch restore Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 086/119] staging: wlan-ng: fix exit return when sme->key_idx >= NUM_WEPKEYS Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 087/119] scsi: sd: Ignore a failure to sync cache due to lack of authorization Greg Kroah-Hartman
2019-10-27 21:01 ` Greg Kroah-Hartman [this message]
2019-10-27 21:01 ` [PATCH 4.14 089/119] scsi: core: try to get module before removing device Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 090/119] scsi: ch: Make it possible to open a ch device multiple times again Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 091/119] Input: da9063 - fix capability and drop KEY_SLEEP Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 092/119] Input: synaptics-rmi4 - avoid processing unknown IRQs Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 093/119] ASoC: rsnd: Reinitialize bit clock inversion flag for every format setting Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 094/119] cfg80211: wext: avoid copying malformed SSIDs Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 095/119] mac80211: Reject malformed SSID elements Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 096/119] drm/edid: Add 6 bpc quirk for SDC panel in Lenovo G50 Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 097/119] drm/amdgpu: Bail earlier when amdgpu.cik_/si_support is not set to 1 Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 098/119] drivers/base/memory.c: dont access uninitialized memmaps in soft_offline_page_store() Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 099/119] fs/proc/page.c: dont access uninitialized memmaps in fs/proc/page.c Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 100/119] scsi: zfcp: fix reaction on bit error threshold notification Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 101/119] mm/slub: fix a deadlock in show_slab_objects() Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 102/119] mm/page_owner: dont access uninitialized memmaps when reading /proc/pagetypeinfo Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 103/119] hugetlbfs: dont access uninitialized memmaps in pfn_range_valid_gigantic() Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 104/119] xtensa: drop EXPORT_SYMBOL for outs*/ins* Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 105/119] parisc: Fix vmap memory leak in ioremap()/iounmap() Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 106/119] CIFS: avoid using MID 0xFFFF Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 107/119] x86/boot/64: Make level2_kernel_pgt pages invalid outside kernel area Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 108/119] pinctrl: armada-37xx: fix control of pins 32 and up Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 109/119] pinctrl: armada-37xx: swap polarity on LED group Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 110/119] btrfs: block-group: Fix a memory leak due to missing btrfs_put_block_group() Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 111/119] memstick: jmb38x_ms: Fix an error handling path in jmb38x_ms_probe() Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 112/119] cpufreq: Avoid cpufreq_suspend() deadlock on system shutdown Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 113/119] xen/netback: fix error path of xenvif_connect_data() Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 114/119] PCI: PM: Fix pci_power_up() Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 115/119] KVM: X86: introduce invalidate_gpa argument to tlb flush Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 116/119] kvm: vmx: Introduce lapic_mode enumeration Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 117/119] kvm: apic: Flush TLB after APIC mode/address change if VPIDs are in use Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 118/119] kvm: vmx: Basic APIC virtualization controls have three settings Greg Kroah-Hartman
2019-10-27 21:01 ` [PATCH 4.14 119/119] RDMA/cxgb4: Do not dma memory off of the stack Greg Kroah-Hartman
2019-10-28  2:35 ` [PATCH 4.14 000/119] 4.14.151-stable review kernelci.org bot
2019-10-28  5:59 ` Didik Setiawan
2019-10-28 13:35 ` Guenter Roeck
2019-10-28 21:39 ` Jon Hunter
2019-10-29  7:15 ` Naresh Kamboju

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191027203347.970364903@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=bvanassche@acm.org \
    --cc=damien.lemoal@wdc.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).