[JFFS2][XATTR] Fix memory leak in POSIX-ACL support

jffs2_clear_acl() which releases acl caches allocated by kmalloc()
was defined but it was never called. Thus, we faced to the risk
of memory leaking.

This patch plugs jffs2_clear_acl() into jffs2_do_clear_inode().
It ensures to release acl cache when inode is cleared.

Signed-off-by: KaiGai Kohei <kaigai@ak.jp.nec.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>

authored by KaiGai Kohei and committed by David Woodhouse c7afb0f9 c05d52c7

+4 -5
+1 -3
fs/jffs2/acl.c
··· 345 return rc; 346 } 347 348 - void jffs2_clear_acl(struct inode *inode) 349 { 350 - struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); 351 - 352 if (f->i_acl_access && f->i_acl_access != JFFS2_ACL_NOT_CACHED) { 353 posix_acl_release(f->i_acl_access); 354 f->i_acl_access = JFFS2_ACL_NOT_CACHED;
··· 345 return rc; 346 } 347 348 + void jffs2_clear_acl(struct jffs2_inode_info *f) 349 { 350 if (f->i_acl_access && f->i_acl_access != JFFS2_ACL_NOT_CACHED) { 351 posix_acl_release(f->i_acl_access); 352 f->i_acl_access = JFFS2_ACL_NOT_CACHED;
+2 -2
fs/jffs2/acl.h
··· 30 extern int jffs2_permission(struct inode *, int, struct nameidata *); 31 extern int jffs2_acl_chmod(struct inode *); 32 extern int jffs2_init_acl(struct inode *, struct inode *); 33 - extern void jffs2_clear_acl(struct inode *); 34 35 extern struct xattr_handler jffs2_acl_access_xattr_handler; 36 extern struct xattr_handler jffs2_acl_default_xattr_handler; ··· 40 #define jffs2_permission NULL 41 #define jffs2_acl_chmod(inode) (0) 42 #define jffs2_init_acl(inode,dir) (0) 43 - #define jffs2_clear_acl(inode) 44 45 #endif /* CONFIG_JFFS2_FS_POSIX_ACL */
··· 30 extern int jffs2_permission(struct inode *, int, struct nameidata *); 31 extern int jffs2_acl_chmod(struct inode *); 32 extern int jffs2_init_acl(struct inode *, struct inode *); 33 + extern void jffs2_clear_acl(struct jffs2_inode_info *); 34 35 extern struct xattr_handler jffs2_acl_access_xattr_handler; 36 extern struct xattr_handler jffs2_acl_default_xattr_handler; ··· 40 #define jffs2_permission NULL 41 #define jffs2_acl_chmod(inode) (0) 42 #define jffs2_init_acl(inode,dir) (0) 43 + #define jffs2_clear_acl(f) 44 45 #endif /* CONFIG_JFFS2_FS_POSIX_ACL */
+1
fs/jffs2/readinode.c
··· 968 struct jffs2_full_dirent *fd, *fds; 969 int deleted; 970 971 jffs2_xattr_delete_inode(c, f->inocache); 972 down(&f->sem); 973 deleted = f->inocache && !f->inocache->nlink;
··· 968 struct jffs2_full_dirent *fd, *fds; 969 int deleted; 970 971 + jffs2_clear_acl(f); 972 jffs2_xattr_delete_inode(c, f->inocache); 973 down(&f->sem); 974 deleted = f->inocache && !f->inocache->nlink;