The commit is pushed to "branch-rh7-3.10.0-1160.88.1.vz7.195.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-1160.88.1.vz7.195.3 ------> commit cdae454cdf895bc6e3bead1cb5f1c4bde32dd8e5 Author: Alexander Atanasov <alexander.atana...@virtuozzo.com> Date: Tue May 9 13:11:23 2023 +0300
ploop: sysfs: ignore discard_granularity lockdep false positive Lockdep reported a possible deadlock here: CPU0 CPU1 ---- ---- A lock(sb_writers#9); D lock(&plo->ctl_mutex); A lock(sb_writers#9); B lock(&p->lock); A - sendfile(src=any, of=ploopdelta) -> takes sb_writers B - seq_read takes m->lock /aka p->lock in lockdep/ in struct seq_file C - of->mutex struct kernfs_open_file *of D - plo->ctl_mutex kernfs_fop_write takes C and store_discard_granularity takes D &p->lock -> &plo>ctl_mutex --> sb_writers B->D->A There is a dependancy but it never goes to sb_writers except when opening top delta but then the seq_file lock is not held. It looks like a common issue when using sysfs, so at some point ignore_lockdep was added to struct attribute /used by sysfs files/ to silence such false positive reports. Create _A2_NO_LOCKDEP macro that sets ignore_lockdep to true and use it to declare discard_granularity sysfs file. https://jira.vzint.dev/browse/PSBM-146987 Signed-off-by: Alexander Atanasov <alexander.atana...@virtuozzo.com> --- drivers/block/ploop/sysfs.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/block/ploop/sysfs.c b/drivers/block/ploop/sysfs.c index e27860810e27..c3cc707ec323 100644 --- a/drivers/block/ploop/sysfs.c +++ b/drivers/block/ploop/sysfs.c @@ -644,6 +644,13 @@ struct pattr_sysfs_entry { #define _A2(_name) \ &((struct pattr_sysfs_entry){ .attr = { .name = __stringify(_name), .mode = S_IRUGO|S_IWUSR }, .show = show_##_name, .store = store_##_name, }).attr +#ifdef CONFIG_DEBUG_LOCK_ALLOC +#define _A2_NO_LOCKDEP(_name) \ +&((struct pattr_sysfs_entry){ .attr = { .name = __stringify(_name), .mode = S_IRUGO|S_IWUSR, .ignore_lockdep = true }, .show = show_##_name, .store = store_##_name, }).attr +#else +#define _A2_NO_LOCKDEP _A2 +#endif + #define _A3(_name) \ &((struct pattr_sysfs_entry){ .attr = { .name = __stringify(_name), .mode = S_IRUGO }, .print = print_##_name, }).attr @@ -696,7 +703,7 @@ static struct attribute *tune_attributes[] = { _A2(congestion_low_watermark), _A2(max_active_requests), _A2(push_backup_timeout), - _A2(discard_granularity), + _A2_NO_LOCKDEP(discard_granularity), _A(discard_alignment), _A2(discard_zeroes_data), _A2(trusted), _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel