Ricardo B. Marliere
6b6ca09611
rtc: class: make rtc_class constant
...
Since commit 43a7206b09 ("driver core: class: make class_register() take
a const *"), the driver core allows for struct class to be in read-only
memory, so move the rtc_class structure to be declared at build time
placing it into read-only memory, instead of having to be dynamically
allocated at boot time.
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Signed-off-by: Ricardo B. Marliere <ricardo@marliere.net >
Link: https://lore.kernel.org/r/20240305-class_cleanup-abelloni-v1-1-944c026137c8@marliere.net
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-03-08 12:05:10 +01:00
Laurent Pinchart
32a6be0858
dt-bindings: rtc: abx80x: Improve checks on trickle charger constraints
...
The abracon,tc-diode and abracon,tc-resistor DT properties are only
valid for the ABx0804 and ABx0805. Furthermore, they must both be
present, or neither of them must be specified. Add rules to check this.
The generic abracon,abx08x compatible string doesn't indicate which chip
variant is used, but performs auto-detection at runtime. It must this
also allow the two above properties.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Reviewed-by: Rob Herring <robh@kernel.org >
Link: https://lore.kernel.org/r/20240305080944.17991-1-laurent.pinchart@ideasonboard.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-03-08 12:03:18 +01:00
Lukas Bulwahn
1e60ac6b8b
MAINTAINERS: adjust file entry in ARM/Mediatek RTC DRIVER
...
Commit e8c0498505 ("dt-bindings: rtc: convert MT2717 RTC to the
json-schema") and commit aef3952ec1 ("dt-bindings: rtc: convert MT7622
RTC to the json-schema") convert rtc-mt{2712,7622}.txt to
mediatek,mt{2712,7622}-rtc.yaml, but misses to adjust the file entries in
MAINTAINERS.
Hence, ./scripts/get_maintainer.pl --self-test=patterns complains about a
broken reference.
Repair these file entries in ARM/Mediatek RTC DRIVER.
Signed-off-by: Lukas Bulwahn <lukas.bulwahn@gmail.com >
Link: https://lore.kernel.org/r/20240301145907.32732-1-lukas.bulwahn@gmail.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-03-08 12:02:49 +01:00
Alexandre Belloni
babfeb9cbe
rtc: nct3018y: fix possible NULL dereference
...
alarm_enable and alarm_flag are allowed to be NULL but will be dereferenced
later by the dev_dbg call.
Reported-by: kernel test robot <lkp@intel.com >
Reported-by: Dan Carpenter <error27@gmail.com >
Closes: https://lore.kernel.org/r/202305180042.DEzW1pSd-lkp@intel.com/
Link: https://lore.kernel.org/r/20240229222127.1878176-1-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-03-08 12:01:21 +01:00
Antoniu Miclaus
c12e67e076
rtc: max31335: fix interrupt status reg
...
Fix the register value comparison in the `max31335_volatile_reg`
function for the interrupt status register.
MAX31335_STATUS1 macro definition corresponds to the actual
interrupt status register.
Fixes: dedaf03b99 ("rtc: max31335: add driver support")
Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com >
Reviewed-by: Nuno Sa <nuno.sa@analog.com >
Link: https://lore.kernel.org/r/20240219091616.24480-1-antoniu.miclaus@analog.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:40:33 +01:00
Randy Dunlap
544c42f798
rtc: mt6397: select IRQ_DOMAIN instead of depending on it
...
IRQ_DOMAIN is a hidden (not user visible) symbol. Users cannot set
it directly thru "make *config", so drivers should select it instead
of depending on it if they need it.
Relying on it being set for a dependency is risky.
Consistently using "select" or "depends on" can also help reduce
Kconfig circular dependency issues.
Therefore, change the use of "depends on" for IRQ_DOMAIN to
"select" for RTC_DRV_MT6397.
Fixes: 04d3ba70a3 ("rtc: mt6397: add IRQ domain dependency")
Cc: Arnd Bergmann <arnd@arndb.de >
Cc: Eddie Huang <eddie.huang@mediatek.com >
Cc: Sean Wang <sean.wang@mediatek.com >
Cc: Matthias Brugger <matthias.bgg@gmail.com >
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-mediatek@lists.infradead.org
Cc: Alessandro Zummo <a.zummo@towertech.it >
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com >
Cc: linux-rtc@vger.kernel.org
Cc: Marc Zyngier <maz@kernel.org >
Cc: Philipp Zabel <p.zabel@pengutronix.de >
Cc: Peter Rosin <peda@axentia.se >
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com >
Signed-off-by: Randy Dunlap <rdunlap@infradead.org >
Link: https://lore.kernel.org/r/20240213050258.6167-1-rdunlap@infradead.org
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:37:58 +01:00
Josua Mayer
626e2b5464
dt-bindings: rtc: abx80x: convert to yaml
...
Convert the abracon abx80x rtc text bindings to dt-schema format.
In addition to the text description reference generic interrupts
properties and add an example.
Signed-off-by: Josua Mayer <josua@solid-run.com >
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org >
Link: https://lore.kernel.org/r/20240219-rtc-abracon-convert-bindings-v7-1-aca4fc3b8cec@solid-run.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:32:55 +01:00
Curtis Klein
3100fd1aa8
rtc: m41t80: Use the unified property API get the wakeup-source property
...
This allows both ACPI and Device Tree systems to specify the m41t80 as a
wakeup-source.
Signed-off-by: Curtis Klein <curtis.klein@hpe.com >
Link: https://lore.kernel.org/r/20240222011129.79241-1-curtis.klein@hpe.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:28:19 +01:00
Varshini Rajendran
16816e6a36
dt-bindings: at91rm9260-rtt: add sam9x7 compatible
...
Add compatible for SAM9X7 RTT.
Signed-off-by: Varshini Rajendran <varshini.rajendran@microchip.com >
Acked-by: Conor Dooley <conor.dooley@microchip.com >
Link: https://lore.kernel.org/r/20240223172552.672094-1-varshini.rajendran@microchip.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:25:51 +01:00
Rafał Miłecki
aef3952ec1
dt-bindings: rtc: convert MT7622 RTC to the json-schema
...
This helps validating DTS files. Introduced changes:
1. Reworded title
2. Dropper redundant properties descriptions
3. Added required #include-s and adjusted "reg" in example
Signed-off-by: Rafał Miłecki <rafal@milecki.pl >
Reviewed-by: Conor Dooley <conor.dooley@microchip.com >
Link: https://lore.kernel.org/r/20240123125043.27192-1-zajec5@gmail.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:21:16 +01:00
Rafał Miłecki
e8c0498505
dt-bindings: rtc: convert MT2717 RTC to the json-schema
...
This helps validating DTS files. Introduced changes:
1. Reworded title
2. Dropper redundant properties descriptions
3. Added required #include and adjusted "reg" in example
Signed-off-by: Rafał Miłecki <rafal@milecki.pl >
Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com >
Reviewed-by: Rob Herring <robh@kernel.org >
Link: https://lore.kernel.org/r/20240122124949.29577-1-zajec5@gmail.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:19:56 +01:00
Alexandre Belloni
787bcc982c
rtc: pcf8523: add suspend handlers for alarm IRQ
...
Ensure the RTC is able to wake up the system from suspend.
Link: https://lore.kernel.org/r/20240227211833.1820800-1-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:17:23 +01:00
Alexandre Belloni
50891bd19f
rtc: ds1511: set alarm offset limit
...
The ds1511 can only support alarms up to a month in the future (which we
currently limit to 28 days).
Link: https://lore.kernel.org/r/20240227231356.1840523-2-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:16:52 +01:00
Alexandre Belloni
e40512a4f5
rtc: ds1511: set range
...
The ds1511 leap year calculation fails in 2100.
Link: https://lore.kernel.org/r/20240227231356.1840523-1-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:16:52 +01:00
Alexandre Belloni
29c411f242
rtc: ds1511: drop inline/noinline hints
...
There is no reason to not let the compiler optimise those functions as it
wants.
Link: https://lore.kernel.org/r/20240227230431.1837717-12-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:47 +01:00
Alexandre Belloni
19922e8799
rtc: ds1511: rename pdata
...
pdata is not actually about patform_data, rename it to something local to
the driver.
Link: https://lore.kernel.org/r/20240227230431.1837717-11-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:47 +01:00
Alexandre Belloni
418501fd53
rtc: ds1511: implement ds1511_rtc_read_alarm properly
...
ds1511_rtc_read_alarm was useless as it is only called at boot time so
the alarm members of pdata have not yet been set. Read the actual registers
so there is a chance to get a meaningful value.
Then, drop the alarm related members of pdata as they are not used anymore.
Link: https://lore.kernel.org/r/20240227230431.1837717-10-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:47 +01:00
Alexandre Belloni
d949f040a0
rtc: ds1511: remove partial alarm support
...
The RTC core will always provide an alarm with all its members set, it is
not necessary to support partial alarms.
Link: https://lore.kernel.org/r/20240227230431.1837717-9-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:47 +01:00
Alexandre Belloni
f891570be5
rtc: ds1511: let the core know when alarm are not supported
...
Instead of failing function calls, let the core know alarms are not
supported so it can fail early and avoid unnecessary calls.
Link: https://lore.kernel.org/r/20240227230431.1837717-8-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:47 +01:00
Alexandre Belloni
434c9d03ea
rtc: ds1511: remove ds1511_rtc_update_alarm
...
ds1511_rtc_update_alarm is called twice but one of the call is overkill as
it only has to enable or disable the alarm instead of updating all the alarm
registers. Merge it in its main call site and introduce a new finction to
enable or disable the alarm.
Link: https://lore.kernel.org/r/20240227230431.1837717-7-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:47 +01:00
Alexandre Belloni
6529ab38c8
rtc: ds1511: remove incomplete UIE support
...
There is no way to enable UIE in the driver, drop RTC_UF support.
Link: https://lore.kernel.org/r/20240227230431.1837717-6-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:47 +01:00
Alexandre Belloni
22e1b2c7a4
rtc: ds1511: fix function definition
...
Use proper style for function definition.
Link: https://lore.kernel.org/r/20240227230431.1837717-5-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:47 +01:00
Alexandre Belloni
8f973799c3
rtc: ds1511: drop useless enum
...
Use regular defines for register offsets instead of the enum that doesn't
bring any benefit.
Link: https://lore.kernel.org/r/20240227230431.1837717-4-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:47 +01:00
Alexandre Belloni
3f31f1729d
rtc: ds1511: drop dead code
...
The watchdog part of the code is not reachable and should be reimplemented
properly as a watchdog driver.
Link: https://lore.kernel.org/r/20240227230431.1837717-3-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:46 +01:00
Alexandre Belloni
4e7a9e2ea2
rtc: ds1511: drop useless computation
...
All the callers of ds1511_rtc_set_time will use the same epoch for tm_year
which is defined as the number of years minus 1900 since POSIX.1-2001.
Link: https://lore.kernel.org/r/20240227230431.1837717-2-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:46 +01:00
Alexandre Belloni
f4282a4303
rtc: ds1511: drop useless checks
...
The RTC core will always pass a valid rtc_tm, it is unnecessary to check
the validity of its members, especially with an open coded version of
rtc_valid_tm().
Link: https://lore.kernel.org/r/20240227230431.1837717-1-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
2024-02-29 22:15:46 +01:00
Linus Torvalds
6613476e22
Linux 6.8-rc1
v6.8-rc1
2024-01-21 14:11:32 -08:00
Linus Torvalds
35a4474b5c
Merge tag 'bcachefs-2024-01-21' of https://evilpiepirate.org/git/bcachefs
...
Pull more bcachefs updates from Kent Overstreet:
"Some fixes, Some refactoring, some minor features:
- Assorted prep work for disk space accounting rewrite
- BTREE_TRIGGER_ATOMIC: after combining our trigger callbacks, this
makes our trigger context more explicit
- A few fixes to avoid excessive transaction restarts on
multithreaded workloads: fstests (in addition to ktest tests) are
now checking slowpath counters, and that's shaking out a few bugs
- Assorted tracepoint improvements
- Starting to break up bcachefs_format.h and move on disk types so
they're with the code they belong to; this will make room to start
documenting the on disk format better.
- A few minor fixes"
* tag 'bcachefs-2024-01-21' of https://evilpiepirate.org/git/bcachefs: (46 commits)
bcachefs: Improve inode_to_text()
bcachefs: logged_ops_format.h
bcachefs: reflink_format.h
bcachefs; extents_format.h
bcachefs: ec_format.h
bcachefs: subvolume_format.h
bcachefs: snapshot_format.h
bcachefs: alloc_background_format.h
bcachefs: xattr_format.h
bcachefs: dirent_format.h
bcachefs: inode_format.h
bcachefs; quota_format.h
bcachefs: sb-counters_format.h
bcachefs: counters.c -> sb-counters.c
bcachefs: comment bch_subvolume
bcachefs: bch_snapshot::btime
bcachefs: add missing __GFP_NOWARN
bcachefs: opts->compression can now also be applied in the background
bcachefs: Prep work for variable size btree node buffers
bcachefs: grab s_umount only if snapshotting
...
2024-01-21 14:01:12 -08:00
Linus Torvalds
4fbbed7872
Merge tag 'timers-core-2024-01-21' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
...
Pull timer updates from Thomas Gleixner:
"Updates for time and clocksources:
- A fix for the idle and iowait time accounting vs CPU hotplug.
The time is reset on CPU hotplug which makes the accumulated
systemwide time jump backwards.
- Assorted fixes and improvements for clocksource/event drivers"
* tag 'timers-core-2024-01-21' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
tick-sched: Fix idle and iowait sleeptime accounting vs CPU hotplug
clocksource/drivers/ep93xx: Fix error handling during probe
clocksource/drivers/cadence-ttc: Fix some kernel-doc warnings
clocksource/drivers/timer-ti-dm: Fix make W=n kerneldoc warnings
clocksource/timer-riscv: Add riscv_clock_shutdown callback
dt-bindings: timer: Add StarFive JH8100 clint
dt-bindings: timer: thead,c900-aclint-mtimer: separate mtime and mtimecmp regs
2024-01-21 11:14:40 -08:00
Linus Torvalds
7b297a5cc9
Merge tag 'powerpc-6.8-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
...
Pull powerpc fixes from Aneesh Kumar:
- Increase default stack size to 32KB for Book3S
Thanks to Michael Ellerman.
* tag 'powerpc-6.8-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
powerpc/64s: Increase default stack size to 32KB
2024-01-21 11:04:29 -08:00
Kent Overstreet
249f441f83
bcachefs: Improve inode_to_text()
...
Add line breaks - inode_to_text() is now much easier to read.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:11 -05:00
Kent Overstreet
d826cc57c5
bcachefs: logged_ops_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:11 -05:00
Kent Overstreet
8d52ba60c4
bcachefs: reflink_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:11 -05:00
Kent Overstreet
b2fa1b633b
bcachefs; extents_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:11 -05:00
Kent Overstreet
0560eb9abf
bcachefs: ec_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:11 -05:00
Kent Overstreet
c6c4ff6507
bcachefs: subvolume_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:11 -05:00
Kent Overstreet
8fed323b14
bcachefs: snapshot_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
d455179fce
bcachefs: alloc_background_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
72e0801049
bcachefs: xattr_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
7ffc4daa5f
bcachefs: dirent_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
b36425da71
bcachefs: inode_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
82de6207fb
bcachefs; quota_format.h
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
43314801a4
bcachefs: sb-counters_format.h
...
bcachefs_format.h has gotten too big; let's do some organizing.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
3a58dfbc46
bcachefs: counters.c -> sb-counters.c
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
12207f49ef
bcachefs: comment bch_subvolume
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
d32088f2f2
bcachefs: bch_snapshot::btime
...
Add a field to bch_snapshot for creation time; this will be important
when we start exposing the snapshot tree to userspace.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
7be0208fc9
bcachefs: add missing __GFP_NOWARN
...
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
d7e77f53e9
bcachefs: opts->compression can now also be applied in the background
...
The "apply this compression method in the background" paths now use the
compression option if background_compression is not set; this means that
setting or changing the compression option will cause existing data to
be compressed accordingly in the background.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Kent Overstreet
ec4edd7b9d
bcachefs: Prep work for variable size btree node buffers
...
bcachefs btree nodes are big - typically 256k - and btree roots are
pinned in memory. As we're now up to 18 btrees, we now have significant
memory overhead in mostly empty btree roots.
And in the future we're going to start enforcing that certain btree node
boundaries exist, to solve lock contention issues - analagous to XFS's
AGIs.
Thus, we need to start allocating smaller btree node buffers when we
can. This patch changes code that refers to the filesystem constant
c->opts.btree_node_size to refer to the btree node buffer size -
btree_buf_bytes() - where appropriate.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00
Su Yue
2acc59dd88
bcachefs: grab s_umount only if snapshotting
...
When I was testing mongodb over bcachefs with compression,
there is a lockdep warning when snapshotting mongodb data volume.
$ cat test.sh
prog=bcachefs
$prog subvolume create /mnt/data
$prog subvolume create /mnt/data/snapshots
while true;do
$prog subvolume snapshot /mnt/data /mnt/data/snapshots/$(date +%s)
sleep 1s
done
$ cat /etc/mongodb.conf
systemLog:
destination: file
logAppend: true
path: /mnt/data/mongod.log
storage:
dbPath: /mnt/data/
lockdep reports:
[ 3437.452330] ======================================================
[ 3437.452750] WARNING: possible circular locking dependency detected
[ 3437.453168] 6.7.0-rc7-custom+ #85 Tainted: G E
[ 3437.453562] ------------------------------------------------------
[ 3437.453981] bcachefs/35533 is trying to acquire lock:
[ 3437.454325] ffffa0a02b2b1418 (sb_writers#10){.+.+}-{0:0}, at: filename_create+0x62/0x190
[ 3437.454875]
but task is already holding lock:
[ 3437.455268] ffffa0a02b2b10e0 (&type->s_umount_key#48){.+.+}-{3:3}, at: bch2_fs_file_ioctl+0x232/0xc90 [bcachefs]
[ 3437.456009]
which lock already depends on the new lock.
[ 3437.456553]
the existing dependency chain (in reverse order) is:
[ 3437.457054]
-> #3 (&type->s_umount_key#48){.+.+}-{3:3}:
[ 3437.457507] down_read+0x3e/0x170
[ 3437.457772] bch2_fs_file_ioctl+0x232/0xc90 [bcachefs]
[ 3437.458206] __x64_sys_ioctl+0x93/0xd0
[ 3437.458498] do_syscall_64+0x42/0xf0
[ 3437.458779] entry_SYSCALL_64_after_hwframe+0x6e/0x76
[ 3437.459155]
-> #2 (&c->snapshot_create_lock){++++}-{3:3}:
[ 3437.459615] down_read+0x3e/0x170
[ 3437.459878] bch2_truncate+0x82/0x110 [bcachefs]
[ 3437.460276] bchfs_truncate+0x254/0x3c0 [bcachefs]
[ 3437.460686] notify_change+0x1f1/0x4a0
[ 3437.461283] do_truncate+0x7f/0xd0
[ 3437.461555] path_openat+0xa57/0xce0
[ 3437.461836] do_filp_open+0xb4/0x160
[ 3437.462116] do_sys_openat2+0x91/0xc0
[ 3437.462402] __x64_sys_openat+0x53/0xa0
[ 3437.462701] do_syscall_64+0x42/0xf0
[ 3437.462982] entry_SYSCALL_64_after_hwframe+0x6e/0x76
[ 3437.463359]
-> #1 (&sb->s_type->i_mutex_key#15){+.+.}-{3:3}:
[ 3437.463843] down_write+0x3b/0xc0
[ 3437.464223] bch2_write_iter+0x5b/0xcc0 [bcachefs]
[ 3437.464493] vfs_write+0x21b/0x4c0
[ 3437.464653] ksys_write+0x69/0xf0
[ 3437.464839] do_syscall_64+0x42/0xf0
[ 3437.465009] entry_SYSCALL_64_after_hwframe+0x6e/0x76
[ 3437.465231]
-> #0 (sb_writers#10){.+.+}-{0:0}:
[ 3437.465471] __lock_acquire+0x1455/0x21b0
[ 3437.465656] lock_acquire+0xc6/0x2b0
[ 3437.465822] mnt_want_write+0x46/0x1a0
[ 3437.465996] filename_create+0x62/0x190
[ 3437.466175] user_path_create+0x2d/0x50
[ 3437.466352] bch2_fs_file_ioctl+0x2ec/0xc90 [bcachefs]
[ 3437.466617] __x64_sys_ioctl+0x93/0xd0
[ 3437.466791] do_syscall_64+0x42/0xf0
[ 3437.466957] entry_SYSCALL_64_after_hwframe+0x6e/0x76
[ 3437.467180]
other info that might help us debug this:
[ 3437.469670] 2 locks held by bcachefs/35533:
other info that might help us debug this:
[ 3437.467507] Chain exists of:
sb_writers#10 --> &c->snapshot_create_lock --> &type->s_umount_key#48
[ 3437.467979] Possible unsafe locking scenario:
[ 3437.468223] CPU0 CPU1
[ 3437.468405] ---- ----
[ 3437.468585] rlock(&type->s_umount_key#48);
[ 3437.468758] lock(&c->snapshot_create_lock);
[ 3437.469030] lock(&type->s_umount_key#48);
[ 3437.469291] rlock(sb_writers#10);
[ 3437.469434]
*** DEADLOCK ***
[ 3437.469670] 2 locks held by bcachefs/35533:
[ 3437.469838] #0 : ffffa0a02ce00a88 (&c->snapshot_create_lock){++++}-{3:3}, at: bch2_fs_file_ioctl+0x1e3/0xc90 [bcachefs]
[ 3437.470294] #1 : ffffa0a02b2b10e0 (&type->s_umount_key#48){.+.+}-{3:3}, at: bch2_fs_file_ioctl+0x232/0xc90 [bcachefs]
[ 3437.470744]
stack backtrace:
[ 3437.470922] CPU: 7 PID: 35533 Comm: bcachefs Kdump: loaded Tainted: G E 6.7.0-rc7-custom+ #85
[ 3437.471313] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux 1.16.3-1-1 04/01/2014
[ 3437.471694] Call Trace:
[ 3437.471795] <TASK>
[ 3437.471884] dump_stack_lvl+0x57/0x90
[ 3437.472035] check_noncircular+0x132/0x150
[ 3437.472202] __lock_acquire+0x1455/0x21b0
[ 3437.472369] lock_acquire+0xc6/0x2b0
[ 3437.472518] ? filename_create+0x62/0x190
[ 3437.472683] ? lock_is_held_type+0x97/0x110
[ 3437.472856] mnt_want_write+0x46/0x1a0
[ 3437.473025] ? filename_create+0x62/0x190
[ 3437.473204] filename_create+0x62/0x190
[ 3437.473380] user_path_create+0x2d/0x50
[ 3437.473555] bch2_fs_file_ioctl+0x2ec/0xc90 [bcachefs]
[ 3437.473819] ? lock_acquire+0xc6/0x2b0
[ 3437.474002] ? __fget_files+0x2a/0x190
[ 3437.474195] ? __fget_files+0xbc/0x190
[ 3437.474380] ? lock_release+0xc5/0x270
[ 3437.474567] ? __x64_sys_ioctl+0x93/0xd0
[ 3437.474764] ? __pfx_bch2_fs_file_ioctl+0x10/0x10 [bcachefs]
[ 3437.475090] __x64_sys_ioctl+0x93/0xd0
[ 3437.475277] do_syscall_64+0x42/0xf0
[ 3437.475454] entry_SYSCALL_64_after_hwframe+0x6e/0x76
[ 3437.475691] RIP: 0033:0x7f2743c313af
======================================================
In __bch2_ioctl_subvolume_create(), we grab s_umount unconditionally
and unlock it at the end of the function. There is a comment
"why do we need this lock?" about the lock coming from
commit 42d237320e ("bcachefs: Snapshot creation, deletion")
The reason is that __bch2_ioctl_subvolume_create() calls
sync_inodes_sb() which enforce locked s_umount to writeback all dirty
nodes before doing snapshot works.
Fix it by read locking s_umount for snapshotting only and unlocking
s_umount after sync_inodes_sb().
Signed-off-by: Su Yue <glass.su@suse.com >
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev >
2024-01-21 13:27:10 -05:00