[Regression] Partition not removed after removing the memory cards from card reader since kernel 5.9.0-rc3+

Bug #1920874 reported by Chris Chiu
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
HWE Next
Fix Released
Undecided
Unassigned
linux (Ubuntu)
Fix Released
High
Chris Chiu
Focal
Invalid
Undecided
Unassigned
Hirsute
Fix Released
High
Chris Chiu
linux-oem-5.10 (Ubuntu)
Invalid
Undecided
Unassigned
Focal
Fix Released
High
Chris Chiu
Hirsute
Invalid
Undecided
Unassigned

Bug Description

[SRU Justification]

[Impact]
Memory card removal event can not be reflected via uevent on some card
readers Ex. Realtek card readers 0bda:0328 and 0bda:0158. Thus the file
browser still see the ghost disk even it's already removed.

[Fix]
Found the commit 6540fbf6b643 in 5.9.0-rc3 introduce this regression.
Fix it by making sure the partition scan will never be skipped for each
vfs_open until the partition scan is really done

[Test]
Verified on the Realtek card reader 0bda:0328 on Dell Precision 7820
and the external Realtek usb interface card reader 0bda:0158.

Insert the SD card in the card reader
  $ udevadm monitor
Remove the SD card and check the udevadm monitor output

KERNEL[188.377042] change /devices/pci0000:00/0000:00:14.0/usb2/2-9/2-9:1.0/host5/target5:0:0/5:0:0:0/block/sdc (block)
UDEV [188.383261] remove /devices/pci0000:00/0000:00:14.0/usb2/2-9/2-9:1.0/host5/target5:0:0/5:0:0:0/block/sdc (block)
KERNEL[188.390887] change /devices/pci0000:00/0000:00:14.0/usb2/2-9/2-9:1.0/host5/target5:0:0/5:0:0:0/block/sdc (block)
UDEV [188.396012] remove /devices/pci0000:00/0000:00:14.0/usb2/2-9/2-9:1.0/host5/target5:0:0/5:0:0:0/block/sdc (block)

The remove event should be observed from the output messages. On the
affected card reader, only change event would be observed.

[Where problem could occur]
These kind of card readers doesn't send remove event of scsi_disk and
scsi_device like others so they only depend on the block subsystem to
detect the media change and relect the removal event by partition scan.
The behavior related to media removal is changed after 5.9.0-rc3.
The remove event is not able to be correcly reflected since then, the
device node of the media will remain there until next card insertion.

========== Original Bug Description ==========

Ubuntu version: 20.10
Kernel: 5.10.0-1013-oem

Card reader: Realtek Card Reader (0bda:0328 and 0bda:0158)

Summary
=======

After upgrading to kernel 5.9.0-rc3 or later, the device node for the partitions on the memory cards will not disappear after removing the memory cards. This is confusing to the user level applications like File Browser since the partition label will remain there for a long time.

Steps to reproduce
==================

1. Upgrade to kernel later than 5.9.0-rc3
2. Plug the external card reader and insert the formatted memory card
3. Verify if the memory card mounted and visible on File Browser
4. Remove the memory card from the card reader
5. Verify if the mounted memory card removed from the File Browser

Expected results
================

The mounted memory card identifier should be disappear after remove the memory card

Actual results
==============

The partition label of the memory card exists for a long time.
---
ProblemType: Bug
ApportVersion: 2.20.11-0ubuntu50
Architecture: amd64
AudioDevicesInUse:
 USER PID ACCESS COMMAND
 /dev/snd/controlC1: dev 1443 F.... pulseaudio
 /dev/snd/controlC0: dev 1443 F.... pulseaudio
CasperMD5CheckResult: skip
CurrentDesktop: ubuntu:GNOME
DistroRelease: Ubuntu 20.10
InstallationDate: Installed on 2021-03-22 (0 days ago)
InstallationMedia: Ubuntu 20.10 "Groovy Gorilla" - Release amd64 (20201022)
MachineType: ASUSTeK COMPUTER INC. ZenBook UX434IQ_UX434IQ
Package: linux (not installed)
ProcFB: 0 amdgpudrmfb
ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-5.10.0-14-generic root=UUID=ac0e9628-3402-4892-84ab-a1dfb21be15a ro quiet splash vt.handoff=7
ProcVersionSignature: Ubuntu 5.10.0-14.15-generic 5.10.11
RelatedPackageVersions:
 linux-restricted-modules-5.10.0-14-generic N/A
 linux-backports-modules-5.10.0-14-generic N/A
 linux-firmware 1.190
Tags: groovy
Uname: Linux 5.10.0-14-generic x86_64
UpgradeStatus: No upgrade log present (probably fresh install)
UserGroups: adm cdrom dip lpadmin lxd plugdev sambashare sudo
_MarkForUpload: True
dmi.bios.date: 02/26/2020
dmi.bios.release: 5.16
dmi.bios.vendor: American Megatrends Inc.
dmi.bios.version: UX434IQ_UX434IQ.203
dmi.board.asset.tag: ATN12345678901234567
dmi.board.name: UX434IQ
dmi.board.vendor: ASUSTeK COMPUTER INC.
dmi.board.version: 1.0
dmi.chassis.asset.tag: No Asset Tag
dmi.chassis.type: 10
dmi.chassis.vendor: ASUSTeK COMPUTER INC.
dmi.chassis.version: 1.0
dmi.modalias: dmi:bvnAmericanMegatrendsInc.:bvrUX434IQ_UX434IQ.203:bd02/26/2020:br5.16:svnASUSTeKCOMPUTERINC.:pnZenBookUX434IQ_UX434IQ:pvr1.0:rvnASUSTeKCOMPUTERINC.:rnUX434IQ:rvr1.0:cvnASUSTeKCOMPUTERINC.:ct10:cvr1.0:
dmi.product.family: ZenBook
dmi.product.name: ZenBook UX434IQ_UX434IQ
dmi.product.version: 1.0
dmi.sys.vendor: ASUSTeK COMPUTER INC.

CVE References

Revision history for this message
Chris Chiu (mschiu77) wrote : AlsaInfo.txt

apport information

tags: added: apport-collected groovy
description: updated
Revision history for this message
Chris Chiu (mschiu77) wrote : CRDA.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : CurrentDmesg.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : IwConfig.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : Lspci.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : Lspci-vt.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : Lsusb.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : Lsusb-t.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : Lsusb-v.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : PaInfo.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : ProcCpuinfo.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : ProcCpuinfoMinimal.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : ProcEnviron.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : ProcInterrupts.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : ProcModules.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : PulseList.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : RfKill.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : UdevDb.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : WifiSyslog.txt

apport information

Revision history for this message
Chris Chiu (mschiu77) wrote : acpidump.txt

apport information

Revision history for this message
Ubuntu Kernel Bot (ubuntu-kernel-bot) wrote : Status changed to Confirmed

This change was made by a bot.

Changed in linux (Ubuntu):
status: New → Confirmed
Revision history for this message
Chris Chiu (mschiu77) wrote :

`udevadm monitor` shows events as follows while removing memory card of these card reader in kernel 5.8

```

KERNEL[188.377042] change /devices/pci0000:00/0000:00:14.0/usb2/2-9/2-9:1.0/host5/target5:0:0/5:0:0:0/block/sdc (block)
UDEV [188.383261] remove /devices/pci0000:00/0000:00:14.0/usb2/2-9/2-9:1.0/host5/target5:0:0/5:0:0:0/block/sdc (block)
KERNEL[188.390887] change /devices/pci0000:00/0000:00:14.0/usb2/2-9/2-9:1.0/host5/target5:0:0/5:0:0:0/block/sdc (block)
UDEV [188.396012] remove /devices/pci0000:00/0000:00:14.0/usb2/2-9/2-9:1.0/host5/target5:0:0/5:0:0:0/block/sdc (block)
```

In Kernel later then 5.9.0-rc3, the udevadm shows only `change` event instead of `remove`.

Removing memory cards on these card readers do not trigger remove event for scsi_disk, scsi_device, scsi_generic, or usb unbind like other card readers do.

After kernel bisecting, I found the commit `block: don't clear bd_invalidated in check_disk_size_change` (https://github.com/torvalds/linux/commit/6540fbf6b634071950f01ee4e4194e2ea8ca72d1) makes the difference.

When removing memory card on kernel 5.10, the GD_NEED_PART_SCAN bit is cleared in bdev_disk_changed() but the blk_drop_partitions() returns -EBUSY right after. It makes the consequent __blkdev_get have no chance to invoke bdev_disk_changed() again, thus the partitions has no chance to be removed until the memory card re-inserted.

Reverting the commit or clear the GD_NEED_PART_SCAN bit after blk_drop_partitions done can fix the issue.

Chris Chiu (mschiu77)
tags: added: oem-priority originate-from-1917413 somerville
tags: added: focal
removed: groovy oem-priority originate-from-1917413 somerville
tags: added: groovy
tags: added: originate-from-1917413
Chris Chiu (mschiu77)
tags: added: oem-priority somerville
Revision history for this message
Chris Chiu (mschiu77) wrote :

Patch sent upstream and accepted
https://<email address hidden>/msg2522594.html

Changed in linux (Ubuntu):
assignee: nobody → Chris Chiu (mschiu77)
status: Confirmed → Fix Committed
Chris Chiu (mschiu77)
Changed in linux (Ubuntu):
status: Fix Committed → In Progress
Changed in linux-oem-5.10 (Ubuntu Hirsute):
status: New → Invalid
Changed in linux-oem-5.10 (Ubuntu Focal):
status: New → In Progress
Changed in linux (Ubuntu Hirsute):
importance: Undecided → High
Changed in linux-oem-5.10 (Ubuntu Focal):
importance: Undecided → High
assignee: nobody → Chris Chiu (mschiu77)
Changed in linux (Ubuntu Focal):
status: New → Invalid
Chris Chiu (mschiu77)
description: updated
Chris Chiu (mschiu77)
description: updated
Chris Chiu (mschiu77)
description: updated
Timo Aaltonen (tjaalton)
Changed in linux-oem-5.10 (Ubuntu Focal):
status: In Progress → Fix Committed
Revision history for this message
Ubuntu Kernel Bot (ubuntu-kernel-bot) wrote :

This bug is awaiting verification that the kernel in -proposed solves the problem. Please test the kernel and update this bug with the results. If the problem is solved, change the tag 'verification-needed-focal' to 'verification-done-focal'. If the problem still exists, change the tag 'verification-needed-focal' to 'verification-failed-focal'.

If verification is not done by 5 working days from today, this fix will be dropped from the source code, and this bug will be closed.

See https://wiki.ubuntu.com/Testing/EnableProposed for documentation how to enable and use -proposed. Thank you!

tags: added: verification-needed-focal
Revision history for this message
Kelsey Steele (kelsey-steele) wrote :

Hi Chris, may you please verify that the Focal kernel in -proposed resolves the problem encountered? If it does, you can leave a comment letting me know and/or update the tag from 'verification-needed-focal' to 'verification-done-focal'. Thank you!

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package linux-oem-5.10 - 5.10.0-1021.22

---------------
linux-oem-5.10 (5.10.0-1021.22) focal; urgency=medium

  * focal/linux-oem-5.10: 5.10.0-1021.22 -proposed tracker (LP: #1922921)

  * Display abnormal on the TGL+4k panel machines (LP: #1922885)
    - drm/i915/display: Do not allow DC3CO if PSR SF is enabled
    - SAUCE: drm/i915/display/psr: Disable DC3CO when the PSR2 is used

  * Fix mic on P620 after S3 resume (LP: #1921757)
    - ALSA: usb-audio: Carve out connector value checking into a helper
    - ALSA: usb-audio: Check connector value on resume

 -- Timo Aaltonen <email address hidden> Wed, 07 Apr 2021 18:07:55 +0300

Changed in linux-oem-5.10 (Ubuntu Focal):
status: Fix Committed → Fix Released
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (37.7 KiB)

This bug was fixed in the package linux - 5.11.0-14.15

---------------
linux (5.11.0-14.15) hirsute; urgency=medium

  * hirsute/linux: 5.11.0-14.15 -proposed tracker (LP: #1923103)

  * Packaging resync (LP: #1786013)
    - update dkms package versions

  * Include Infiniband Peer Memory interface (LP: #1923104)
    - SAUCE: RDMA/core: Introduce peer memory interface

  * Hirsute update: v5.11.12 upstream stable release (LP: #1923069)
    - arm64: mm: correct the inside linear map range during hotplug check
    - virtiofs: Fail dax mount if device does not support it
    - ext4: shrink race window in ext4_should_retry_alloc()
    - ext4: fix bh ref count on error paths
    - fs: nfsd: fix kconfig dependency warning for NFSD_V4
    - rpc: fix NULL dereference on kmalloc failure
    - iomap: Fix negative assignment to unsigned sis->pages in
      iomap_swapfile_activate
    - ASoC: rt1015: fix i2c communication error
    - ASoC: rt5640: Fix dac- and adc- vol-tlv values being off by a factor of 10
    - ASoC: rt5651: Fix dac- and adc- vol-tlv values being off by a factor of 10
    - ASoC: sgtl5000: set DAP_AVC_CTRL register to correct default value on probe
    - ASoC: es8316: Simplify adc_pga_gain_tlv table
    - ASoC: soc-core: Prevent warning if no DMI table is present
    - ASoC: cs42l42: Fix Bitclock polarity inversion
    - ASoC: cs42l42: Fix channel width support
    - ASoC: cs42l42: Fix mixer volume control
    - ASoC: cs42l42: Always wait at least 3ms after reset
    - NFSD: fix error handling in NFSv4.0 callbacks
    - ASoC: mediatek: mt8192: fix tdm out data is valid on rising edge
    - kernel: freezer should treat PF_IO_WORKER like PF_KTHREAD for freezing
    - vhost: Fix vhost_vq_reset()
    - io_uring: fix ->flags races by linked timeouts
    - io_uring: halt SQO submission on ctx exit
    - scsi: st: Fix a use after free in st_open()
    - scsi: qla2xxx: Fix broken #endif placement
    - staging: comedi: cb_pcidas: fix request_irq() warn
    - staging: comedi: cb_pcidas64: fix request_irq() warn
    - ASoC: rt5659: Update MCLK rate in set_sysclk()
    - ASoC: rt711: add snd_soc_component remove callback
    - thermal/core: Add NULL pointer check before using cooling device stats
    - locking/ww_mutex: Simplify use_ww_ctx & ww_ctx handling
    - locking/ww_mutex: Fix acquire/release imbalance in
      ww_acquire_init()/ww_acquire_fini()
    - nvmet-tcp: fix kmap leak when data digest in use
    - io_uring: imply MSG_NOSIGNAL for send[msg]()/recv[msg]() calls
    - Revert "PM: ACPI: reboot: Use S5 for reboot"
    - nouveau: Skip unvailable ttm page entries
    - static_call: Align static_call_is_init() patching condition
    - ext4: do not iput inode under running transaction in ext4_rename()
    - io_uring: call req_set_fail_links() on short send[msg]()/recv[msg]() with
      MSG_WAITALL
    - net: mvpp2: fix interrupt mask/unmask skip condition
    - mptcp: deliver ssk errors to msk
    - mptcp: fix poll after shutdown
    - mptcp: init mptcp request socket earlier
    - mptcp: add a missing retransmission timer scheduling
    - flow_dissector: fix TTL and TOS dissection on IPv4 fragments
    - mptcp: fix DATA_FIN processing f...

Changed in linux (Ubuntu Hirsute):
status: In Progress → Fix Released
Timo Aaltonen (tjaalton)
Changed in hwe-next:
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.