f2fs: support fiemap() for directory inode
authorChao Yu <yuchao0@huawei.com>
Mon, 22 Jul 2019 10:03:50 +0000 (18:03 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Fri, 23 Aug 2019 14:57:11 +0000 (07:57 -0700)
Adjust f2fs_fiemap() to support fiemap() on directory inode.

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

index 5bce200..73ed4ff 100644 (file)
@@ -1539,7 +1539,7 @@ int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
                goto out;
        }
 
-       if (f2fs_has_inline_data(inode)) {
+       if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode)) {
                ret = f2fs_inline_data_fiemap(inode, fieinfo, start, len);
                if (ret != -EAGAIN)
                        goto out;
index 3613efc..8c07121 100644 (file)
@@ -704,7 +704,13 @@ int f2fs_inline_data_fiemap(struct inode *inode,
        if (IS_ERR(ipage))
                return PTR_ERR(ipage);
 
-       if (!f2fs_has_inline_data(inode)) {
+       if ((S_ISREG(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
+                               !f2fs_has_inline_data(inode)) {
+               err = -EAGAIN;
+               goto out;
+       }
+
+       if (S_ISDIR(inode->i_mode) && !f2fs_has_inline_dentry(inode)) {
                err = -EAGAIN;
                goto out;
        }
index c5b9904..612561c 100644 (file)
@@ -1250,6 +1250,7 @@ const struct inode_operations f2fs_dir_inode_operations = {
 #ifdef CONFIG_F2FS_FS_XATTR
        .listxattr      = f2fs_listxattr,
 #endif
+       .fiemap         = f2fs_fiemap,
 };
 
 const struct inode_operations f2fs_symlink_inode_operations = {