btrfs/acl: adjust logical path of btrfs_get_acl()
PATCH 1/7 btrfs/acl: adjust logical path of btrfs_get_acl()
From: Liu Bo <[email protected]>
- There exists a memory leak.
- More checks of returned "size" are needed.
According to ext3_get_acl()'s style, we do some adjustments here.
Signed-off-by Liu Bo <[email protected]>
Signed-off-by Miao Xie <[email protected]>
--- fs/btrfs/acl.c | 17 ++++++++--------- 1 files changed, 8 insertions(+), 9 deletions(-)
fs/btrfs/acl.c +8 -9
@@ -52,26 +52,25 @@ static struct posix_acl *btrfs_get_acl(struct inode *inode, int type)BUG (); } - size =__btrfs_getxattr (inode, name,"" ,0 ); + size =__btrfs_getxattr (inode, name,NULL ,0 );if (size >0 ) { value =kzalloc (size,GFP_NOFS );if (!value)return ERR_PTR (-ENOMEM ); size =__btrfs_getxattr (inode, name, value, size); -if (size >0 ) { - acl =posix_acl_from_xattr (value, size); -if (IS_ERR (acl)) -return acl; -set_cached_acl (inode, type, acl); - } -kfree (value); + } +if (size >0 ) { + acl =posix_acl_from_xattr (value, size); }else if (size == -ENOENT || size == -ENODATA || size ==0 ) {/* FIXME, who returns -ENOENT? I think nobody */ acl =NULL ; -set_cached_acl (inode, type, acl); }else { acl =ERR_PTR (-EIO ); } +kfree (value); + +if (!IS_ERR (acl)) +set_cached_acl (inode, type, acl);return acl; }
Signature · 1 line
1.7.0.1