OSDN Git Service

f2fs: introduce read_inline_xattr
authorChao Yu <yuchao0@huawei.com>
Mon, 4 Sep 2017 10:58:02 +0000 (18:58 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 16 Nov 2017 05:48:42 +0000 (21:48 -0800)
Commit ba38c27eb93e ("f2fs: enhance lookup xattr") introduces
lookup_all_xattrs duplicating from read_all_xattrs, which leaves
lots of similar codes in between them, so introduce new help
read_inline_xattr to clean up redundant codes.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/xattr.c

index ab65841..bbdf995 100644 (file)
@@ -288,6 +288,29 @@ static struct f2fs_xattr_entry *__find_inline_xattr(void *base_addr,
        return entry;
 }
 
+static int read_inline_xattr(struct inode *inode, struct page *ipage,
+                                                       void *txattr_addr)
+{
+       struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+       unsigned int inline_size = inline_xattr_size(inode);
+       struct page *page = NULL;
+       void *inline_addr;
+
+       if (ipage) {
+               inline_addr = inline_xattr_addr(ipage);
+       } else {
+               page = get_node_page(sbi, inode->i_ino);
+               if (IS_ERR(page))
+                       return PTR_ERR(page);
+
+               inline_addr = inline_xattr_addr(page);
+       }
+       memcpy(txattr_addr, inline_addr, inline_size);
+       f2fs_put_page(page, 1);
+
+       return 0;
+}
+
 static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
                                unsigned int index, unsigned int len,
                                const char *name, struct f2fs_xattr_entry **xe,
@@ -310,21 +333,9 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
 
        /* read from inline xattr */
        if (inline_size) {
-               struct page *page = NULL;
-               void *inline_addr;
-
-               if (ipage) {
-                       inline_addr = inline_xattr_addr(ipage);
-               } else {
-                       page = get_node_page(sbi, inode->i_ino);
-                       if (IS_ERR(page)) {
-                               err = PTR_ERR(page);
-                               goto out;
-                       }
-                       inline_addr = inline_xattr_addr(page);
-               }
-               memcpy(txattr_addr, inline_addr, inline_size);
-               f2fs_put_page(page, 1);
+               err = read_inline_xattr(inode, ipage, txattr_addr);
+               if (err)
+                       goto out;
 
                *xe = __find_inline_xattr(txattr_addr, &last_addr,
                                                index, len, name);
@@ -386,21 +397,9 @@ static int read_all_xattrs(struct inode *inode, struct page *ipage,
 
        /* read from inline xattr */
        if (inline_size) {
-               struct page *page = NULL;
-               void *inline_addr;
-
-               if (ipage) {
-                       inline_addr = inline_xattr_addr(ipage);
-               } else {
-                       page = get_node_page(sbi, inode->i_ino);
-                       if (IS_ERR(page)) {
-                               err = PTR_ERR(page);
-                               goto fail;
-                       }
-                       inline_addr = inline_xattr_addr(page);
-               }
-               memcpy(txattr_addr, inline_addr, inline_size);
-               f2fs_put_page(page, 1);
+               err = read_inline_xattr(inode, ipage, txattr_addr);
+               if (err)
+                       goto fail;
        }
 
        /* read from xattr node block */