diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c index 8aa7afde4549f74b777d4cce932a5df49b3bb52f..942aaa3deca92cec3140346783cb1a7a5ba8e3c1 100644 --- a/fs/jffs2/fs.c +++ b/fs/jffs2/fs.c @@ -95,6 +95,9 @@ int jffs2_setattr (struct jffs2_inode *inode, struct IATTR *attr) if (ivalid & CHG_ATIME) { if ((c_uid != inode->i_uid) || (attr->attr_chg_uid != inode->i_uid)) { + jffs2_complete_reservation(c); + jffs2_free_raw_inode(ri); + mutex_unlock(&f->sem); return -EPERM; } else { ri->atime = cpu_to_je32(attr->attr_chg_atime); @@ -105,6 +108,9 @@ int jffs2_setattr (struct jffs2_inode *inode, struct IATTR *attr) if (ivalid & CHG_MTIME) { if ((c_uid != inode->i_uid) || (attr->attr_chg_uid != inode->i_uid)) { + jffs2_complete_reservation(c); + jffs2_free_raw_inode(ri); + mutex_unlock(&f->sem); return -EPERM; } else { ri->mtime = cpu_to_je32(attr->attr_chg_mtime);