提交 50f689af 编写于 作者: Z Zhu Yanhai 提交者: Theodore Ts'o

jbd2: move bdget out of critical section

bdget() should not be called when we hold spinlocks since
it might sleep.
Reviewed-by: NJan Kara <jack@suse.cz>
Signed-off-by: NZhu Yanhai <gaoyang.zyh@taobao.com>
Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
上级 0ce790e7
......@@ -2413,10 +2413,12 @@ const char *jbd2_dev_to_name(dev_t device)
new_dev = kmalloc(sizeof(struct devname_cache), GFP_KERNEL);
if (!new_dev)
return "NODEV-ALLOCFAILURE"; /* Something non-NULL */
bd = bdget(device);
spin_lock(&devname_cache_lock);
if (devcache[i]) {
if (devcache[i]->device == device) {
kfree(new_dev);
bdput(bd);
ret = devcache[i]->devname;
spin_unlock(&devname_cache_lock);
return ret;
......@@ -2425,7 +2427,6 @@ const char *jbd2_dev_to_name(dev_t device)
}
devcache[i] = new_dev;
devcache[i]->device = device;
bd = bdget(device);
if (bd) {
bdevname(bd, devcache[i]->devname);
bdput(bd);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册