Luis Henriques
1a545cb025
ceph: fix buffer free while holding i_ceph_lock in fill_inode()
[ Upstream commit af8a85a41734f37b67ba8ce69d56b685bee4ac48 ]
Calling ceph_buffer_put() in fill_inode() may result in freeing the
i_xattrs.blob buffer while holding the i_ceph_lock. This can be fixed by
postponing the call until later, when the lock is released.
The following backtrace was triggered by fstests generic/070.
BUG: sleeping function called from invalid context at mm/vmalloc.c:2283
in_atomic(): 1, irqs_disabled(): 0, pid: 3852, name: kworker/0:4
6 locks held by kworker/0:4/3852:
#0: 000000004270f6bb ((wq_completion)ceph-msgr){+.+.}, at: process_one_work+0x1b8/0x5f0
#1: 00000000eb420803 ((work_completion)(&(&con->work)->work)){+.+.}, at: process_one_work+0x1b8/0x5f0
#2: 00000000be1c53a4 (&s->s_mutex){+.+.}, at: dispatch+0x288/0x1476
#3: 00000000559cb958 (&mdsc->snap_rwsem){++++}, at: dispatch+0x2eb/0x1476
#4: 000000000d5ebbae (&req->r_fill_mutex){+.+.}, at: dispatch+0x2fc/0x1476
#5: 00000000a83d0514 (&(&ci->i_ceph_lock)->rlock){+.+.}, at: fill_inode.isra.0+0xf8/0xf70
CPU: 0 PID: 3852 Comm: kworker/0:4 Not tainted 5.2.0+ #441
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.1-0-ga5cab58-prebuilt.qemu.org 04/01/2014
Workqueue: ceph-msgr ceph_con_workfn
Call Trace:
dump_stack+0x67/0x90
___might_sleep.cold+0x9f/0xb1
vfree+0x4b/0x60
ceph_buffer_release+0x1b/0x60
fill_inode.isra.0+0xa9b/0xf70
ceph_fill_trace+0x13b/0xc70
? dispatch+0x2eb/0x1476
dispatch+0x320/0x1476
? __mutex_unlock_slowpath+0x4d/0x2a0
ceph_con_workfn+0xc97/0x2ec0
? process_one_work+0x1b8/0x5f0
process_one_work+0x244/0x5f0
worker_thread+0x4d/0x3e0
kthread+0x105/0x140
? process_one_work+0x5f0/0x5f0
? kthread_park+0x90/0x90
ret_from_fork+0x3a/0x50
Signed-off-by: Luis Henriques <lhenriques@suse.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-09-10 10:32:18 +01:00
..
2019-07-31 07:28:55 +02:00
2019-08-06 19:05:21 +02:00
2018-05-30 07:51:47 +02:00
2018-07-08 15:30:51 +02:00
2019-03-13 14:03:19 -07:00
2017-11-02 11:10:55 +01:00
2018-12-01 09:42:51 +01:00
2019-08-06 19:05:25 +02:00
2018-12-17 09:28:53 +01:00
2019-09-10 10:32:18 +01:00
2019-08-29 08:26:40 +02:00
2019-08-06 19:05:23 +02:00
2019-06-22 08:16:17 +02:00
2018-11-13 11:15:12 -08:00
2019-07-31 07:28:22 +02:00
2019-05-08 07:20:49 +02:00
2019-03-23 14:35:21 +01:00
2019-02-12 19:45:57 +01:00
2019-07-31 07:28:42 +02:00
2017-11-02 11:10:55 +01:00
2018-11-27 16:10:47 +01:00
2018-12-17 09:28:50 +01:00
2019-03-23 14:35:23 +01:00
2019-07-31 07:28:47 +02:00
2019-07-31 07:28:55 +02:00
2019-06-15 11:54:51 +02:00
2018-12-17 09:28:53 +01:00
2019-06-15 11:54:54 +02:00
2019-05-31 06:47:14 -07:00
2018-12-17 09:28:54 +01:00
2018-12-17 09:28:54 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2019-05-31 06:47:12 -07:00
2018-10-03 17:00:57 -07:00
2019-07-31 07:28:47 +02:00
2019-05-08 07:20:49 +02:00
2018-08-09 12:16:39 +02:00
2019-05-16 19:42:19 +02:00
2019-06-09 09:18:18 +02:00
2017-11-02 11:10:55 +01:00
2018-03-28 18:24:43 +02:00
2019-09-06 10:21:01 +02:00
2018-02-03 17:39:08 +01:00
2019-07-31 07:28:48 +02:00
2018-05-30 07:51:47 +02:00
2017-11-02 11:10:55 +01:00
2019-02-06 17:31:37 +01:00
2017-11-02 11:10:55 +01:00
2019-08-25 10:50:17 +02:00
2017-11-02 11:10:55 +01:00
2018-06-26 08:06:33 +08:00
2018-11-21 09:24:17 +01:00
2019-07-31 07:28:38 +02:00
2019-06-11 12:21:48 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2019-07-21 09:04:28 +02:00
2017-09-06 17:27:26 -07:00
2018-11-27 16:10:46 +01:00
2017-11-02 11:10:55 +01:00
2018-09-05 09:26:32 +02:00
2018-09-05 09:26:41 +02:00
2018-12-17 09:28:48 +01:00
2018-12-29 13:39:11 +01:00
2019-07-21 09:04:30 +02:00
2019-05-25 18:25:36 +02:00
2019-08-29 08:26:45 +02:00
2018-12-21 14:13:04 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-09-04 19:05:15 -04:00
2017-09-14 18:13:32 -07:00
2018-09-26 08:38:09 +02:00
2019-07-03 13:15:59 +02:00
2018-06-26 08:06:33 +08:00
2019-02-15 09:08:56 +01:00
2019-04-17 08:37:53 +02:00
2019-04-05 22:31:28 +02:00
2019-05-31 06:47:31 -07:00
2019-08-09 17:53:35 +02:00
2017-11-02 11:10:55 +01:00
2018-04-26 11:02:14 +02:00
2019-02-06 17:31:34 +01:00
2019-04-27 09:35:41 +02:00
2019-03-13 14:03:18 -07:00
2019-02-12 19:46:10 +01:00
2019-08-04 09:32:03 +02:00
2017-12-17 15:07:59 +01:00
2017-11-02 11:10:55 +01:00
2017-08-28 00:50:23 -04:00
2019-04-05 22:31:28 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2019-07-31 07:28:25 +02:00
2019-06-22 08:16:19 +02:00
2017-09-13 09:11:44 -07:00
2018-11-10 07:48:33 -08:00
2019-04-27 09:35:41 +02:00
2018-10-03 17:00:53 -07:00
2017-11-02 11:10:55 +01:00
2018-02-22 15:42:25 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-12-01 09:42:59 +01:00
2018-11-21 09:24:14 +01:00
2017-11-02 11:10:55 +01:00
2019-07-31 07:28:58 +02:00
2019-05-04 09:15:18 +02:00
2017-11-02 11:10:55 +01:00
2019-09-10 10:32:15 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-02-22 15:42:28 +01:00
2017-11-02 11:10:55 +01:00
2019-05-04 09:15:18 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-05-30 07:51:47 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2019-08-29 08:26:43 +02:00
2017-11-02 11:10:55 +01:00
2018-10-10 08:54:27 +02:00