diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c index 8e53765a532c..5a6d3282fefb 100644 --- a/fs/erofs/inode.c +++ b/fs/erofs/inode.c @@ -193,42 +193,43 @@ static int erofs_fill_inode(struct inode *inode, int isdir) data = page_address(page); err = erofs_read_inode(inode, data + ofs); - if (!err) { - /* setup the new inode */ - switch (inode->i_mode & S_IFMT) { - case S_IFREG: - inode->i_op = &erofs_generic_iops; - inode->i_fop = &generic_ro_fops; - break; - case S_IFDIR: - inode->i_op = &erofs_dir_iops; - inode->i_fop = &erofs_dir_fops; - break; - case S_IFLNK: - err = erofs_fill_symlink(inode, data, ofs); - if (err) - goto out_unlock; - inode_nohighmem(inode); - break; - case S_IFCHR: - case S_IFBLK: - case S_IFIFO: - case S_IFSOCK: - inode->i_op = &erofs_generic_iops; - init_special_inode(inode, inode->i_mode, inode->i_rdev); - goto out_unlock; - default: - err = -EFSCORRUPTED; - goto out_unlock; - } + if (err) + goto out_unlock; - if (erofs_inode_is_data_compressed(vi->datalayout)) { - err = z_erofs_fill_inode(inode); + /* setup the new inode */ + switch (inode->i_mode & S_IFMT) { + case S_IFREG: + inode->i_op = &erofs_generic_iops; + inode->i_fop = &generic_ro_fops; + break; + case S_IFDIR: + inode->i_op = &erofs_dir_iops; + inode->i_fop = &erofs_dir_fops; + break; + case S_IFLNK: + err = erofs_fill_symlink(inode, data, ofs); + if (err) goto out_unlock; - } - inode->i_mapping->a_ops = &erofs_raw_access_aops; + inode_nohighmem(inode); + break; + case S_IFCHR: + case S_IFBLK: + case S_IFIFO: + case S_IFSOCK: + inode->i_op = &erofs_generic_iops; + init_special_inode(inode, inode->i_mode, inode->i_rdev); + goto out_unlock; + default: + err = -EFSCORRUPTED; + goto out_unlock; } + if (erofs_inode_is_data_compressed(vi->datalayout)) { + err = z_erofs_fill_inode(inode); + goto out_unlock; + } + inode->i_mapping->a_ops = &erofs_raw_access_aops; + out_unlock: unlock_page(page); put_page(page);