From mboxrd@z Thu Jan 1 00:00:00 1970 From: majianpeng Subject: [PATCH] ceph: fix sleeping function called from invalid context. Date: Tue, 18 Jun 2013 19:30:55 +0800 Message-ID: <201306181930448773810@gmail.com> Reply-To: majianpeng Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Return-path: Sender: linux-kernel-owner@vger.kernel.org To: sage Cc: ceph-devel , linux-kernel List-Id: ceph-devel.vger.kernel.org WyAxMTIxLjIzMTg4M10gQlVHOiBzbGVlcGluZyBmdW5jdGlvbiBjYWxsZWQgZnJvbSBpbnZhbGlk IGNvbnRleHQgYXQga2VybmVsL3J3c2VtLmM6MjANClsgMTEyMS4yMzE5MzVdIGluX2F0b21pYygp OiAxLCBpcnFzX2Rpc2FibGVkKCk6IDAsIHBpZDogOTgzMSwgbmFtZTogbXYNClsgMTEyMS4yMzE5 NzFdIDEgbG9jayBoZWxkIGJ5IG12Lzk4MzE6DQpbIDExMjEuMjMxOTczXSAgIzA6ICAoJigmY2kt PmlfY2VwaF9sb2NrKS0+cmxvY2speysuKy4uLn0sIGF0Ols8ZmZmZmZmZmZhMDJiYmQzOD5dIGNl cGhfZ2V0eGF0dHIrMHg1OC8weDFkMCBbY2VwaF0NClsgMTEyMS4yMzE5OThdIENQVTogMyBQSUQ6 IDk4MzEgQ29tbTogbXYgTm90IHRhaW50ZWQgMy4xMC4wLXJjNisgIzIxNQ0KWyAxMTIxLjIzMjAw MF0gSGFyZHdhcmUgbmFtZTogVG8gQmUgRmlsbGVkIEJ5IE8uRS5NLiBUbyBCZSBGaWxsZWQgQnkN Ck8uRS5NLi9UbyBiZSBmaWxsZWQgYnkgTy5FLk0uLCBCSU9TIDA4MDAxNSAgMTEvMDkvMjAxMQ0K WyAxMTIxLjIzMjAyN10gIGZmZmY4ODAwNmQzNTVhODAgZmZmZjg4MDA5MmY2OWNlMCBmZmZmZmZm ZjgxNjgzNDhjIGZmZmY4ODAwOTJmNjljZjgNClsgMTEyMS4yMzIwNDVdICBmZmZmZmZmZjgxMDcw NDM1IGZmZmY4ODAwNmQzNTVhMjAgZmZmZjg4MDA5MmY2OWQyMCBmZmZmZmZmZjgxNjg5OWJhDQpb IDExMjEuMjMyMDUyXSAgMDAwMDAwMDMwMDAwMDAwNCBmZmZmODgwMGI3NjkxMWQwIGZmZmY4ODAw NmQzNTVhMjAgZmZmZjg4MDA5MmY2OWQ2OA0KWyAxMTIxLjIzMjA1Nl0gQ2FsbCBUcmFjZToNClsg MTEyMS4yMzIwNjJdICBbPGZmZmZmZmZmODE2ODM0OGM+XSBkdW1wX3N0YWNrKzB4MTkvMHgxYg0K WyAxMTIxLjIzMjA2N10gIFs8ZmZmZmZmZmY4MTA3MDQzNT5dIF9fbWlnaHRfc2xlZXArMHhlNS8w eDExMA0KWyAxMTIxLjIzMjA3MV0gIFs8ZmZmZmZmZmY4MTY4OTliYT5dIGRvd25fcmVhZCsweDJh LzB4OTgNClsgMTEyMS4yMzIwODBdICBbPGZmZmZmZmZmYTAyYmFmNzA+XSBjZXBoX3Z4YXR0cmNi X2xheW91dCsweDYwLzB4ZjAgW2NlcGhdDQpbIDExMjEuMjMyMDg4XSAgWzxmZmZmZmZmZmEwMmJi ZDdmPl0gY2VwaF9nZXR4YXR0cisweDlmLzB4MWQwIFtjZXBoXQ0KWyAxMTIxLjIzMjA5M10gIFs8 ZmZmZmZmZmY4MTE4OGQyOD5dIHZmc19nZXR4YXR0cisweGE4LzB4ZDANClsgMTEyMS4yMzIwOTdd ICBbPGZmZmZmZmZmODExODkwMGI+XSBnZXR4YXR0cisweGFiLzB4MWMwDQpbIDExMjEuMjMyMTAw XSAgWzxmZmZmZmZmZjgxMTcwNGYyPl0gPyBmaW5hbF9wdXRuYW1lKzB4MjIvMHg1MA0KWyAxMTIx LjIzMjEwNF0gIFs8ZmZmZmZmZmY4MTE1NWY4MD5dID8ga21lbV9jYWNoZV9mcmVlKzB4YjAvMHgy NjANClsgMTEyMS4yMzIxMDddICBbPGZmZmZmZmZmODExNzA0ZjI+XSA/IGZpbmFsX3B1dG5hbWUr MHgyMi8weDUwDQpbIDExMjEuMjMyMTEwXSAgWzxmZmZmZmZmZjgxMDllNjNkPl0gPyB0cmFjZV9o YXJkaXJxc19vbisweGQvMHgxMA0KWyAxMTIxLjIzMjExNF0gIFs8ZmZmZmZmZmY4MTY5NTdhNz5d ID8gc3lzcmV0X2NoZWNrKzB4MWIvMHg1Ng0KWyAxMTIxLjIzMjEyMF0gIFs8ZmZmZmZmZmY4MTE4 OWM5Yz5dIFN5U19mZ2V0eGF0dHIrMHg2Yy8weGMwDQpbIDExMjEuMjMyMTI1XSAgWzxmZmZmZmZm ZjgxNjk1NzgyPl0gc3lzdGVtX2NhbGxfZmFzdHBhdGgrMHgxNi8weDFiDQpbIDExMjEuMjMyMTI5 XSBCVUc6IHNjaGVkdWxpbmcgd2hpbGUgYXRvbWljOiBtdi85ODMxLzB4MTAwMDAwMDINClsgMTEy MS4yMzIxNTRdIDEgbG9jayBoZWxkIGJ5IG12Lzk4MzE6DQpbIDExMjEuMjMyMTU2XSAgIzA6ICAo JigmY2ktPmlfY2VwaF9sb2NrKS0+cmxvY2speysuKy4uLn0sIGF0Og0KWzxmZmZmZmZmZmEwMmJi ZDM4Pl0gY2VwaF9nZXR4YXR0cisweDU4LzB4MWQwIFtjZXBoXQ0KDQpJIHRoaW5rIG1vdmUgdGhl IGNpLT5pX2NlcGhfbG9jayBkb3duIGlzIHNhZmUgYmVjYXVzZSB3ZSBjYW4ndCBmcmVlDQpjZXBo X2lub2RlX2luZm8gYXQgdGhlcmUuDQoNClNpZ25lZC1vZmYtYnk6IEppYW5wZW5nIE1hIDxtYWpp YW5wZW5nQGdtYWlsLmNvbT4NCi0tLQ0KIGZzL2NlcGgveGF0dHIuYyB8IDQgKystLQ0KIDEgZmls ZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQg YS9mcy9jZXBoL3hhdHRyLmMgYi9mcy9jZXBoL3hhdHRyLmMNCmluZGV4IDliNmIyYjYuLjRlZmRl MDYgMTAwNjQ0DQotLS0gYS9mcy9jZXBoL3hhdHRyLmMNCisrKyBiL2ZzL2NlcGgveGF0dHIuYw0K QEAgLTY3NSw3ICs2NzUsNiBAQCBzc2l6ZV90IGNlcGhfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAq ZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwNCiAgICAgICAgaWYgKCFjZXBo X2lzX3ZhbGlkX3hhdHRyKG5hbWUpKQ0KICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREFUQTsN CiANCi0gICAgICAgc3Bpbl9sb2NrKCZjaS0+aV9jZXBoX2xvY2spOw0KICAgICAgICBkb3V0KCJn ZXR4YXR0ciAlcCB2ZXI9JWxsZCBpbmRleF92ZXI9JWxsZFxuIiwgaW5vZGUsDQogICAgICAgICAg ICAgY2ktPmlfeGF0dHJzLnZlcnNpb24sIGNpLT5pX3hhdHRycy5pbmRleF92ZXJzaW9uKTsNCiAN CkBAIC02ODMsOSArNjgyLDEwIEBAIHNzaXplX3QgY2VwaF9nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5 ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLA0KICAgICAgICB2eGF0dHIg PSBjZXBoX21hdGNoX3Z4YXR0cihpbm9kZSwgbmFtZSk7DQogICAgICAgIGlmICh2eGF0dHIgJiYg ISh2eGF0dHItPmV4aXN0c19jYiAmJiAhdnhhdHRyLT5leGlzdHNfY2IoY2kpKSkgew0KICAgICAg ICAgICAgICAgIGVyciA9IHZ4YXR0ci0+Z2V0eGF0dHJfY2IoY2ksIHZhbHVlLCBzaXplKTsNCi0g ICAgICAgICAgICAgICBnb3RvIG91dDsNCisgICAgICAgICAgICAgICByZXR1cm4gZXJyOw0KICAg ICAgICB9DQogDQorICAgICAgIHNwaW5fbG9jaygmY2ktPmlfY2VwaF9sb2NrKTsNCiAgICAgICAg aWYgKF9fY2VwaF9jYXBzX2lzc3VlZF9tYXNrKGNpLCBDRVBIX0NBUF9YQVRUUl9TSEFSRUQsIDEp ICYmDQogICAgICAgICAgICAoY2ktPmlfeGF0dHJzLmluZGV4X3ZlcnNpb24gPj0gY2ktPmlfeGF0 dHJzLnZlcnNpb24pKSB7DQogICAgICAgICAgICAgICAgZ290byBnZXRfeGF0dHI7DQotLSANCjEu OC4zLnJjMS40NC5nYjM4N2M3Nw0K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755190Ab3FRLbL (ORCPT ); Tue, 18 Jun 2013 07:31:11 -0400 Received: from mail-pd0-f178.google.com ([209.85.192.178]:50779 "EHLO mail-pd0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751611Ab3FRLbI (ORCPT ); Tue, 18 Jun 2013 07:31:08 -0400 Date: Tue, 18 Jun 2013 19:30:55 +0800 From: majianpeng To: sage Cc: ceph-devel , linux-kernel Reply-To: majianpeng Subject: [PATCH] ceph: fix sleeping function called from invalid context. X-Priority: 3 X-GUID: 7878B98A-2ACD-47B8-9AA2-98F9C2B65AFB X-Has-Attach: no X-Mailer: Foxmail 7.0.1.90[en] Mime-Version: 1.0 Message-ID: <201306181930448773810@gmail.com> Content-Type: text/plain; charset="gb2312" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id r5IBVIJ8030783 [ 1121.231883] BUG: sleeping function called from invalid context at kernel/rwsem.c:20 [ 1121.231935] in_atomic(): 1, irqs_disabled(): 0, pid: 9831, name: mv [ 1121.231971] 1 lock held by mv/9831: [ 1121.231973] #0: (&(&ci->i_ceph_lock)->rlock){+.+...}, at:[] ceph_getxattr+0x58/0x1d0 [ceph] [ 1121.231998] CPU: 3 PID: 9831 Comm: mv Not tainted 3.10.0-rc6+ #215 [ 1121.232000] Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./To be filled by O.E.M., BIOS 080015 11/09/2011 [ 1121.232027] ffff88006d355a80 ffff880092f69ce0 ffffffff8168348c ffff880092f69cf8 [ 1121.232045] ffffffff81070435 ffff88006d355a20 ffff880092f69d20 ffffffff816899ba [ 1121.232052] 0000000300000004 ffff8800b76911d0 ffff88006d355a20 ffff880092f69d68 [ 1121.232056] Call Trace: [ 1121.232062] [] dump_stack+0x19/0x1b [ 1121.232067] [] __might_sleep+0xe5/0x110 [ 1121.232071] [] down_read+0x2a/0x98 [ 1121.232080] [] ceph_vxattrcb_layout+0x60/0xf0 [ceph] [ 1121.232088] [] ceph_getxattr+0x9f/0x1d0 [ceph] [ 1121.232093] [] vfs_getxattr+0xa8/0xd0 [ 1121.232097] [] getxattr+0xab/0x1c0 [ 1121.232100] [] ? final_putname+0x22/0x50 [ 1121.232104] [] ? kmem_cache_free+0xb0/0x260 [ 1121.232107] [] ? final_putname+0x22/0x50 [ 1121.232110] [] ? trace_hardirqs_on+0xd/0x10 [ 1121.232114] [] ? sysret_check+0x1b/0x56 [ 1121.232120] [] SyS_fgetxattr+0x6c/0xc0 [ 1121.232125] [] system_call_fastpath+0x16/0x1b [ 1121.232129] BUG: scheduling while atomic: mv/9831/0x10000002 [ 1121.232154] 1 lock held by mv/9831: [ 1121.232156] #0: (&(&ci->i_ceph_lock)->rlock){+.+...}, at: [] ceph_getxattr+0x58/0x1d0 [ceph] I think move the ci->i_ceph_lock down is safe because we can't free ceph_inode_info at there. Signed-off-by: Jianpeng Ma --- fs/ceph/xattr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index 9b6b2b6..4efde06 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c @@ -675,7 +675,6 @@ ssize_t ceph_getxattr(struct dentry *dentry, const char *name, void *value, if (!ceph_is_valid_xattr(name)) return -ENODATA; - spin_lock(&ci->i_ceph_lock); dout("getxattr %p ver=%lld index_ver=%lld\n", inode, ci->i_xattrs.version, ci->i_xattrs.index_version); @@ -683,9 +682,10 @@ ssize_t ceph_getxattr(struct dentry *dentry, const char *name, void *value, vxattr = ceph_match_vxattr(inode, name); if (vxattr && !(vxattr->exists_cb && !vxattr->exists_cb(ci))) { err = vxattr->getxattr_cb(ci, value, size); - goto out; + return err; } + spin_lock(&ci->i_ceph_lock); if (__ceph_caps_issued_mask(ci, CEPH_CAP_XATTR_SHARED, 1) && (ci->i_xattrs.index_version >= ci->i_xattrs.version)) { goto get_xattr; -- 1.8.3.rc1.44.gb387c77 {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I