[JFFS2] Quiet lockdep false positive.
Don't hold f->sem while calling into jffs2_do_create(). It makes lockdep unhappy, and we don't really need it -- the _reason_ it's a false positive is because nobody else can see this inode yet and so nobody will be trying to lock it anyway. Signed-off-by: David Woodhouse <dwmw2@infradead.org>
This commit is contained in:
@@ -208,6 +208,13 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode,
|
|||||||
f = JFFS2_INODE_INFO(inode);
|
f = JFFS2_INODE_INFO(inode);
|
||||||
dir_f = JFFS2_INODE_INFO(dir_i);
|
dir_f = JFFS2_INODE_INFO(dir_i);
|
||||||
|
|
||||||
|
/* jffs2_do_create() will want to lock it, _after_ reserving
|
||||||
|
space and taking c-alloc_sem. If we keep it locked here,
|
||||||
|
lockdep gets unhappy (although it's a false positive;
|
||||||
|
nothing else will be looking at this inode yet so there's
|
||||||
|
no chance of AB-BA deadlock involving its f->sem). */
|
||||||
|
mutex_unlock(&f->sem);
|
||||||
|
|
||||||
ret = jffs2_do_create(c, dir_f, f, ri,
|
ret = jffs2_do_create(c, dir_f, f, ri,
|
||||||
dentry->d_name.name, dentry->d_name.len);
|
dentry->d_name.name, dentry->d_name.len);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@@ -438,10 +438,10 @@ int jffs2_do_create(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, str
|
|||||||
ret = jffs2_reserve_space(c, sizeof(*ri), &alloclen, ALLOC_NORMAL,
|
ret = jffs2_reserve_space(c, sizeof(*ri), &alloclen, ALLOC_NORMAL,
|
||||||
JFFS2_SUMMARY_INODE_SIZE);
|
JFFS2_SUMMARY_INODE_SIZE);
|
||||||
D1(printk(KERN_DEBUG "jffs2_do_create(): reserved 0x%x bytes\n", alloclen));
|
D1(printk(KERN_DEBUG "jffs2_do_create(): reserved 0x%x bytes\n", alloclen));
|
||||||
if (ret) {
|
if (ret)
|
||||||
mutex_unlock(&f->sem);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
|
||||||
|
mutex_lock(&f->sem);
|
||||||
|
|
||||||
ri->data_crc = cpu_to_je32(0);
|
ri->data_crc = cpu_to_je32(0);
|
||||||
ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
|
ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
|
||||||
|
Reference in New Issue
Block a user