All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] staging: erofs: clean up erofs_map_blocks_iter
@ 2019-01-09  9:46 ` Chao Yu
  0 siblings, 0 replies; 9+ messages in thread
From: Chao Yu @ 2019-01-09  9:46 UTC (permalink / raw)
  To: linux-erofs, gaoxiang25; +Cc: linux-f2fs-devel, linux-kernel, chao, Chao Yu

This patch cleans up erofs_map_blocks* function and structure family,
just simply the code, no logic change.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
 drivers/staging/erofs/data.c      | 40 +++++++------------------------
 drivers/staging/erofs/internal.h  | 16 ++++++-------
 drivers/staging/erofs/unzip_vle.c | 30 +++++++++++------------
 3 files changed, 31 insertions(+), 55 deletions(-)

diff --git a/drivers/staging/erofs/data.c b/drivers/staging/erofs/data.c
index 5a55f0bfdfbb..1baa59cf11b5 100644
--- a/drivers/staging/erofs/data.c
+++ b/drivers/staging/erofs/data.c
@@ -165,43 +165,19 @@ static int erofs_map_blocks_flatmode(struct inode *inode,
 	return err;
 }
 
-#ifdef CONFIG_EROFS_FS_ZIP
-extern int z_erofs_map_blocks_iter(struct inode *,
-				   struct erofs_map_blocks *,
-				   struct page **, int);
-#endif
-
-int erofs_map_blocks_iter(struct inode *inode,
-			  struct erofs_map_blocks *map,
-			  struct page **mpage_ret, int flags)
-{
-	/* by default, reading raw data never use erofs_map_blocks_iter */
-	if (unlikely(!is_inode_layout_compression(inode))) {
-		if (*mpage_ret)
-			put_page(*mpage_ret);
-		*mpage_ret = NULL;
-
-		return erofs_map_blocks(inode, map, flags);
-	}
-
-#ifdef CONFIG_EROFS_FS_ZIP
-	return z_erofs_map_blocks_iter(inode, map, mpage_ret, flags);
-#else
-	/* data compression is not available */
-	return -ENOTSUPP;
-#endif
-}
-
 int erofs_map_blocks(struct inode *inode,
 		     struct erofs_map_blocks *map, int flags)
 {
 	if (unlikely(is_inode_layout_compression(inode))) {
-		struct page *mpage = NULL;
-		int err;
+		int err = -ENOTSUPP;
 
-		err = erofs_map_blocks_iter(inode, map, &mpage, flags);
-		if (mpage)
-			put_page(mpage);
+#ifdef CONFIG_EROFS_FS_ZIP
+		map->mpage = NULL;
+
+		err = z_erofs_map_blocks_iter(inode, map, flags);
+#endif
+		if (map->mpage)
+			put_page(map->mpage);
 		return err;
 	}
 	return erofs_map_blocks_flatmode(inode, map, flags);
diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
index e049d00c087a..740961fc565f 100644
--- a/drivers/staging/erofs/internal.h
+++ b/drivers/staging/erofs/internal.h
@@ -461,8 +461,16 @@ struct erofs_map_blocks {
 	u64 m_plen, m_llen;
 
 	unsigned int m_flags;
+
+	struct page *mpage;
 };
 
+#ifdef CONFIG_EROFS_FS_ZIP
+extern int z_erofs_map_blocks_iter(struct inode *,
+				   struct erofs_map_blocks *,
+				   int);
+#endif
+
 /* Flags used by erofs_map_blocks() */
 #define EROFS_GET_BLOCKS_RAW    0x0001
 
@@ -522,14 +530,6 @@ static inline struct page *erofs_get_meta_page_nofail(struct super_block *sb,
 }
 
 extern int erofs_map_blocks(struct inode *, struct erofs_map_blocks *, int);
-extern int erofs_map_blocks_iter(struct inode *, struct erofs_map_blocks *,
-	struct page **, int);
-
-struct erofs_map_blocks_iter {
-	struct erofs_map_blocks map;
-	struct page *mpage;
-};
-
 
 static inline struct page *
 erofs_get_inline_page(struct inode *inode,
diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
index 4ac1099a39c6..30340afaa504 100644
--- a/drivers/staging/erofs/unzip_vle.c
+++ b/drivers/staging/erofs/unzip_vle.c
@@ -636,7 +636,7 @@ struct z_erofs_vle_frontend {
 	struct inode *const inode;
 
 	struct z_erofs_vle_work_builder builder;
-	struct erofs_map_blocks_iter m_iter;
+	struct erofs_map_blocks map;
 
 	z_erofs_vle_owned_workgrp_t owned_head;
 
@@ -647,8 +647,9 @@ struct z_erofs_vle_frontend {
 
 #define VLE_FRONTEND_INIT(__i) { \
 	.inode = __i, \
-	.m_iter = { \
-		{ .m_llen = 0, .m_plen = 0 }, \
+	.map = { \
+		.m_llen = 0, \
+		.m_plen = 0, \
 		.mpage = NULL \
 	}, \
 	.builder = VLE_WORK_BUILDER_INIT(), \
@@ -681,8 +682,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
 {
 	struct super_block *const sb = fe->inode->i_sb;
 	struct erofs_sb_info *const sbi __maybe_unused = EROFS_SB(sb);
-	struct erofs_map_blocks_iter *const m = &fe->m_iter;
-	struct erofs_map_blocks *const map = &m->map;
+	struct erofs_map_blocks *const map = &fe->map;
 	struct z_erofs_vle_work_builder *const builder = &fe->builder;
 	const loff_t offset = page_offset(page);
 
@@ -715,7 +715,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
 
 	map->m_la = offset + cur;
 	map->m_llen = 0;
-	err = erofs_map_blocks_iter(fe->inode, map, &m->mpage, 0);
+	err = erofs_map_blocks(fe->inode, map, 0);
 	if (unlikely(err))
 		goto err_out;
 
@@ -1484,8 +1484,8 @@ static int z_erofs_vle_normalaccess_readpage(struct file *file,
 
 	z_erofs_submit_and_unzip(&f, &pagepool, true);
 out:
-	if (f.m_iter.mpage)
-		put_page(f.m_iter.mpage);
+	if (f.map.mpage)
+		put_page(f.map.mpage);
 
 	/* clean up the remaining free pages */
 	put_pages_list(&pagepool);
@@ -1555,8 +1555,8 @@ static int z_erofs_vle_normalaccess_readpages(struct file *filp,
 
 	z_erofs_submit_and_unzip(&f, &pagepool, sync);
 
-	if (f.m_iter.mpage)
-		put_page(f.m_iter.mpage);
+	if (f.map.mpage)
+		put_page(f.map.mpage);
 
 	/* clean up the remaining free pages */
 	put_pages_list(&pagepool);
@@ -1701,14 +1701,14 @@ vle_get_logical_extent_head(const struct vle_map_blocks_iter_ctx *ctx,
 
 int z_erofs_map_blocks_iter(struct inode *inode,
 	struct erofs_map_blocks *map,
-	struct page **mpage_ret, int flags)
+	int flags)
 {
 	void *kaddr;
 	const struct vle_map_blocks_iter_ctx ctx = {
 		.inode = inode,
 		.sb = inode->i_sb,
 		.clusterbits = EROFS_I_SB(inode)->clusterbits,
-		.mpage_ret = mpage_ret,
+		.mpage_ret = &map->mpage,
 		.kaddr_ret = &kaddr
 	};
 	const unsigned int clustersize = 1 << ctx.clusterbits;
@@ -1722,7 +1722,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 
 	/* initialize `pblk' to keep gcc from printing foolish warnings */
 	erofs_blk_t mblk, pblk = 0;
-	struct page *mpage = *mpage_ret;
+	struct page *mpage = map->mpage;
 	struct z_erofs_vle_decompressed_index *di;
 	unsigned int cluster_type, logical_cluster_ofs;
 	int err = 0;
@@ -1758,7 +1758,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 			err = PTR_ERR(mpage);
 			goto out;
 		}
-		*mpage_ret = mpage;
+		map->mpage = mpage;
 	} else {
 		lock_page(mpage);
 		DBG_BUGON(!PageUptodate(mpage));
@@ -1818,7 +1818,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 		/* get the correspoinding first chunk */
 		err = vle_get_logical_extent_head(&ctx, lcn, &ofs,
 						  &pblk, &map->m_flags);
-		mpage = *mpage_ret;
+		mpage = map->mpage;
 
 		if (unlikely(err)) {
 			if (mpage)
-- 
2.18.0.rc1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH] staging: erofs: clean up erofs_map_blocks_iter
@ 2019-01-09  9:46 ` Chao Yu
  0 siblings, 0 replies; 9+ messages in thread
From: Chao Yu @ 2019-01-09  9:46 UTC (permalink / raw)
  To: linux-erofs, gaoxiang25; +Cc: linux-f2fs-devel, linux-kernel, chao, Chao Yu

This patch cleans up erofs_map_blocks* function and structure family,
just simply the code, no logic change.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
---
 drivers/staging/erofs/data.c      | 40 +++++++------------------------
 drivers/staging/erofs/internal.h  | 16 ++++++-------
 drivers/staging/erofs/unzip_vle.c | 30 +++++++++++------------
 3 files changed, 31 insertions(+), 55 deletions(-)

diff --git a/drivers/staging/erofs/data.c b/drivers/staging/erofs/data.c
index 5a55f0bfdfbb..1baa59cf11b5 100644
--- a/drivers/staging/erofs/data.c
+++ b/drivers/staging/erofs/data.c
@@ -165,43 +165,19 @@ static int erofs_map_blocks_flatmode(struct inode *inode,
 	return err;
 }
 
-#ifdef CONFIG_EROFS_FS_ZIP
-extern int z_erofs_map_blocks_iter(struct inode *,
-				   struct erofs_map_blocks *,
-				   struct page **, int);
-#endif
-
-int erofs_map_blocks_iter(struct inode *inode,
-			  struct erofs_map_blocks *map,
-			  struct page **mpage_ret, int flags)
-{
-	/* by default, reading raw data never use erofs_map_blocks_iter */
-	if (unlikely(!is_inode_layout_compression(inode))) {
-		if (*mpage_ret)
-			put_page(*mpage_ret);
-		*mpage_ret = NULL;
-
-		return erofs_map_blocks(inode, map, flags);
-	}
-
-#ifdef CONFIG_EROFS_FS_ZIP
-	return z_erofs_map_blocks_iter(inode, map, mpage_ret, flags);
-#else
-	/* data compression is not available */
-	return -ENOTSUPP;
-#endif
-}
-
 int erofs_map_blocks(struct inode *inode,
 		     struct erofs_map_blocks *map, int flags)
 {
 	if (unlikely(is_inode_layout_compression(inode))) {
-		struct page *mpage = NULL;
-		int err;
+		int err = -ENOTSUPP;
 
-		err = erofs_map_blocks_iter(inode, map, &mpage, flags);
-		if (mpage)
-			put_page(mpage);
+#ifdef CONFIG_EROFS_FS_ZIP
+		map->mpage = NULL;
+
+		err = z_erofs_map_blocks_iter(inode, map, flags);
+#endif
+		if (map->mpage)
+			put_page(map->mpage);
 		return err;
 	}
 	return erofs_map_blocks_flatmode(inode, map, flags);
diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
index e049d00c087a..740961fc565f 100644
--- a/drivers/staging/erofs/internal.h
+++ b/drivers/staging/erofs/internal.h
@@ -461,8 +461,16 @@ struct erofs_map_blocks {
 	u64 m_plen, m_llen;
 
 	unsigned int m_flags;
+
+	struct page *mpage;
 };
 
+#ifdef CONFIG_EROFS_FS_ZIP
+extern int z_erofs_map_blocks_iter(struct inode *,
+				   struct erofs_map_blocks *,
+				   int);
+#endif
+
 /* Flags used by erofs_map_blocks() */
 #define EROFS_GET_BLOCKS_RAW    0x0001
 
@@ -522,14 +530,6 @@ static inline struct page *erofs_get_meta_page_nofail(struct super_block *sb,
 }
 
 extern int erofs_map_blocks(struct inode *, struct erofs_map_blocks *, int);
-extern int erofs_map_blocks_iter(struct inode *, struct erofs_map_blocks *,
-	struct page **, int);
-
-struct erofs_map_blocks_iter {
-	struct erofs_map_blocks map;
-	struct page *mpage;
-};
-
 
 static inline struct page *
 erofs_get_inline_page(struct inode *inode,
diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
index 4ac1099a39c6..30340afaa504 100644
--- a/drivers/staging/erofs/unzip_vle.c
+++ b/drivers/staging/erofs/unzip_vle.c
@@ -636,7 +636,7 @@ struct z_erofs_vle_frontend {
 	struct inode *const inode;
 
 	struct z_erofs_vle_work_builder builder;
-	struct erofs_map_blocks_iter m_iter;
+	struct erofs_map_blocks map;
 
 	z_erofs_vle_owned_workgrp_t owned_head;
 
@@ -647,8 +647,9 @@ struct z_erofs_vle_frontend {
 
 #define VLE_FRONTEND_INIT(__i) { \
 	.inode = __i, \
-	.m_iter = { \
-		{ .m_llen = 0, .m_plen = 0 }, \
+	.map = { \
+		.m_llen = 0, \
+		.m_plen = 0, \
 		.mpage = NULL \
 	}, \
 	.builder = VLE_WORK_BUILDER_INIT(), \
@@ -681,8 +682,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
 {
 	struct super_block *const sb = fe->inode->i_sb;
 	struct erofs_sb_info *const sbi __maybe_unused = EROFS_SB(sb);
-	struct erofs_map_blocks_iter *const m = &fe->m_iter;
-	struct erofs_map_blocks *const map = &m->map;
+	struct erofs_map_blocks *const map = &fe->map;
 	struct z_erofs_vle_work_builder *const builder = &fe->builder;
 	const loff_t offset = page_offset(page);
 
@@ -715,7 +715,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
 
 	map->m_la = offset + cur;
 	map->m_llen = 0;
-	err = erofs_map_blocks_iter(fe->inode, map, &m->mpage, 0);
+	err = erofs_map_blocks(fe->inode, map, 0);
 	if (unlikely(err))
 		goto err_out;
 
@@ -1484,8 +1484,8 @@ static int z_erofs_vle_normalaccess_readpage(struct file *file,
 
 	z_erofs_submit_and_unzip(&f, &pagepool, true);
 out:
-	if (f.m_iter.mpage)
-		put_page(f.m_iter.mpage);
+	if (f.map.mpage)
+		put_page(f.map.mpage);
 
 	/* clean up the remaining free pages */
 	put_pages_list(&pagepool);
@@ -1555,8 +1555,8 @@ static int z_erofs_vle_normalaccess_readpages(struct file *filp,
 
 	z_erofs_submit_and_unzip(&f, &pagepool, sync);
 
-	if (f.m_iter.mpage)
-		put_page(f.m_iter.mpage);
+	if (f.map.mpage)
+		put_page(f.map.mpage);
 
 	/* clean up the remaining free pages */
 	put_pages_list(&pagepool);
@@ -1701,14 +1701,14 @@ vle_get_logical_extent_head(const struct vle_map_blocks_iter_ctx *ctx,
 
 int z_erofs_map_blocks_iter(struct inode *inode,
 	struct erofs_map_blocks *map,
-	struct page **mpage_ret, int flags)
+	int flags)
 {
 	void *kaddr;
 	const struct vle_map_blocks_iter_ctx ctx = {
 		.inode = inode,
 		.sb = inode->i_sb,
 		.clusterbits = EROFS_I_SB(inode)->clusterbits,
-		.mpage_ret = mpage_ret,
+		.mpage_ret = &map->mpage,
 		.kaddr_ret = &kaddr
 	};
 	const unsigned int clustersize = 1 << ctx.clusterbits;
@@ -1722,7 +1722,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 
 	/* initialize `pblk' to keep gcc from printing foolish warnings */
 	erofs_blk_t mblk, pblk = 0;
-	struct page *mpage = *mpage_ret;
+	struct page *mpage = map->mpage;
 	struct z_erofs_vle_decompressed_index *di;
 	unsigned int cluster_type, logical_cluster_ofs;
 	int err = 0;
@@ -1758,7 +1758,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 			err = PTR_ERR(mpage);
 			goto out;
 		}
-		*mpage_ret = mpage;
+		map->mpage = mpage;
 	} else {
 		lock_page(mpage);
 		DBG_BUGON(!PageUptodate(mpage));
@@ -1818,7 +1818,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 		/* get the correspoinding first chunk */
 		err = vle_get_logical_extent_head(&ctx, lcn, &ofs,
 						  &pblk, &map->m_flags);
-		mpage = *mpage_ret;
+		mpage = map->mpage;
 
 		if (unlikely(err)) {
 			if (mpage)
-- 
2.18.0.rc1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH] staging: erofs: clean up erofs_map_blocks_iter
@ 2019-01-09  9:46 ` Chao Yu
  0 siblings, 0 replies; 9+ messages in thread
From: Chao Yu @ 2019-01-09  9:46 UTC (permalink / raw)


This patch cleans up erofs_map_blocks* function and structure family,
just simply the code, no logic change.

Signed-off-by: Chao Yu <yuchao0 at huawei.com>
---
 drivers/staging/erofs/data.c      | 40 +++++++------------------------
 drivers/staging/erofs/internal.h  | 16 ++++++-------
 drivers/staging/erofs/unzip_vle.c | 30 +++++++++++------------
 3 files changed, 31 insertions(+), 55 deletions(-)

diff --git a/drivers/staging/erofs/data.c b/drivers/staging/erofs/data.c
index 5a55f0bfdfbb..1baa59cf11b5 100644
--- a/drivers/staging/erofs/data.c
+++ b/drivers/staging/erofs/data.c
@@ -165,43 +165,19 @@ static int erofs_map_blocks_flatmode(struct inode *inode,
 	return err;
 }
 
-#ifdef CONFIG_EROFS_FS_ZIP
-extern int z_erofs_map_blocks_iter(struct inode *,
-				   struct erofs_map_blocks *,
-				   struct page **, int);
-#endif
-
-int erofs_map_blocks_iter(struct inode *inode,
-			  struct erofs_map_blocks *map,
-			  struct page **mpage_ret, int flags)
-{
-	/* by default, reading raw data never use erofs_map_blocks_iter */
-	if (unlikely(!is_inode_layout_compression(inode))) {
-		if (*mpage_ret)
-			put_page(*mpage_ret);
-		*mpage_ret = NULL;
-
-		return erofs_map_blocks(inode, map, flags);
-	}
-
-#ifdef CONFIG_EROFS_FS_ZIP
-	return z_erofs_map_blocks_iter(inode, map, mpage_ret, flags);
-#else
-	/* data compression is not available */
-	return -ENOTSUPP;
-#endif
-}
-
 int erofs_map_blocks(struct inode *inode,
 		     struct erofs_map_blocks *map, int flags)
 {
 	if (unlikely(is_inode_layout_compression(inode))) {
-		struct page *mpage = NULL;
-		int err;
+		int err = -ENOTSUPP;
 
-		err = erofs_map_blocks_iter(inode, map, &mpage, flags);
-		if (mpage)
-			put_page(mpage);
+#ifdef CONFIG_EROFS_FS_ZIP
+		map->mpage = NULL;
+
+		err = z_erofs_map_blocks_iter(inode, map, flags);
+#endif
+		if (map->mpage)
+			put_page(map->mpage);
 		return err;
 	}
 	return erofs_map_blocks_flatmode(inode, map, flags);
diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
index e049d00c087a..740961fc565f 100644
--- a/drivers/staging/erofs/internal.h
+++ b/drivers/staging/erofs/internal.h
@@ -461,8 +461,16 @@ struct erofs_map_blocks {
 	u64 m_plen, m_llen;
 
 	unsigned int m_flags;
+
+	struct page *mpage;
 };
 
+#ifdef CONFIG_EROFS_FS_ZIP
+extern int z_erofs_map_blocks_iter(struct inode *,
+				   struct erofs_map_blocks *,
+				   int);
+#endif
+
 /* Flags used by erofs_map_blocks() */
 #define EROFS_GET_BLOCKS_RAW    0x0001
 
@@ -522,14 +530,6 @@ static inline struct page *erofs_get_meta_page_nofail(struct super_block *sb,
 }
 
 extern int erofs_map_blocks(struct inode *, struct erofs_map_blocks *, int);
-extern int erofs_map_blocks_iter(struct inode *, struct erofs_map_blocks *,
-	struct page **, int);
-
-struct erofs_map_blocks_iter {
-	struct erofs_map_blocks map;
-	struct page *mpage;
-};
-
 
 static inline struct page *
 erofs_get_inline_page(struct inode *inode,
diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
index 4ac1099a39c6..30340afaa504 100644
--- a/drivers/staging/erofs/unzip_vle.c
+++ b/drivers/staging/erofs/unzip_vle.c
@@ -636,7 +636,7 @@ struct z_erofs_vle_frontend {
 	struct inode *const inode;
 
 	struct z_erofs_vle_work_builder builder;
-	struct erofs_map_blocks_iter m_iter;
+	struct erofs_map_blocks map;
 
 	z_erofs_vle_owned_workgrp_t owned_head;
 
@@ -647,8 +647,9 @@ struct z_erofs_vle_frontend {
 
 #define VLE_FRONTEND_INIT(__i) { \
 	.inode = __i, \
-	.m_iter = { \
-		{ .m_llen = 0, .m_plen = 0 }, \
+	.map = { \
+		.m_llen = 0, \
+		.m_plen = 0, \
 		.mpage = NULL \
 	}, \
 	.builder = VLE_WORK_BUILDER_INIT(), \
@@ -681,8 +682,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
 {
 	struct super_block *const sb = fe->inode->i_sb;
 	struct erofs_sb_info *const sbi __maybe_unused = EROFS_SB(sb);
-	struct erofs_map_blocks_iter *const m = &fe->m_iter;
-	struct erofs_map_blocks *const map = &m->map;
+	struct erofs_map_blocks *const map = &fe->map;
 	struct z_erofs_vle_work_builder *const builder = &fe->builder;
 	const loff_t offset = page_offset(page);
 
@@ -715,7 +715,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
 
 	map->m_la = offset + cur;
 	map->m_llen = 0;
-	err = erofs_map_blocks_iter(fe->inode, map, &m->mpage, 0);
+	err = erofs_map_blocks(fe->inode, map, 0);
 	if (unlikely(err))
 		goto err_out;
 
@@ -1484,8 +1484,8 @@ static int z_erofs_vle_normalaccess_readpage(struct file *file,
 
 	z_erofs_submit_and_unzip(&f, &pagepool, true);
 out:
-	if (f.m_iter.mpage)
-		put_page(f.m_iter.mpage);
+	if (f.map.mpage)
+		put_page(f.map.mpage);
 
 	/* clean up the remaining free pages */
 	put_pages_list(&pagepool);
@@ -1555,8 +1555,8 @@ static int z_erofs_vle_normalaccess_readpages(struct file *filp,
 
 	z_erofs_submit_and_unzip(&f, &pagepool, sync);
 
-	if (f.m_iter.mpage)
-		put_page(f.m_iter.mpage);
+	if (f.map.mpage)
+		put_page(f.map.mpage);
 
 	/* clean up the remaining free pages */
 	put_pages_list(&pagepool);
@@ -1701,14 +1701,14 @@ vle_get_logical_extent_head(const struct vle_map_blocks_iter_ctx *ctx,
 
 int z_erofs_map_blocks_iter(struct inode *inode,
 	struct erofs_map_blocks *map,
-	struct page **mpage_ret, int flags)
+	int flags)
 {
 	void *kaddr;
 	const struct vle_map_blocks_iter_ctx ctx = {
 		.inode = inode,
 		.sb = inode->i_sb,
 		.clusterbits = EROFS_I_SB(inode)->clusterbits,
-		.mpage_ret = mpage_ret,
+		.mpage_ret = &map->mpage,
 		.kaddr_ret = &kaddr
 	};
 	const unsigned int clustersize = 1 << ctx.clusterbits;
@@ -1722,7 +1722,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 
 	/* initialize `pblk' to keep gcc from printing foolish warnings */
 	erofs_blk_t mblk, pblk = 0;
-	struct page *mpage = *mpage_ret;
+	struct page *mpage = map->mpage;
 	struct z_erofs_vle_decompressed_index *di;
 	unsigned int cluster_type, logical_cluster_ofs;
 	int err = 0;
@@ -1758,7 +1758,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 			err = PTR_ERR(mpage);
 			goto out;
 		}
-		*mpage_ret = mpage;
+		map->mpage = mpage;
 	} else {
 		lock_page(mpage);
 		DBG_BUGON(!PageUptodate(mpage));
@@ -1818,7 +1818,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 		/* get the correspoinding first chunk */
 		err = vle_get_logical_extent_head(&ctx, lcn, &ofs,
 						  &pblk, &map->m_flags);
-		mpage = *mpage_ret;
+		mpage = map->mpage;
 
 		if (unlikely(err)) {
 			if (mpage)
-- 
2.18.0.rc1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] staging: erofs: clean up erofs_map_blocks_iter
  2019-01-09  9:46 ` Chao Yu
  (?)
  (?)
@ 2019-01-09  9:59 ` Chao Yu
  -1 siblings, 0 replies; 9+ messages in thread
From: Chao Yu @ 2019-01-09  9:59 UTC (permalink / raw)
  Cc: linux-f2fs-devel

So sorry for the noise, I didn't take care of my git-send-email script.

Please ignore this email. :(

On 2019/1/9 17:46, Chao Yu wrote:
> This patch cleans up erofs_map_blocks* function and structure family,
> just simply the code, no logic change.
> 
> Signed-off-by: Chao Yu <yuchao0@huawei.com>
> ---
>  drivers/staging/erofs/data.c      | 40 +++++++------------------------
>  drivers/staging/erofs/internal.h  | 16 ++++++-------
>  drivers/staging/erofs/unzip_vle.c | 30 +++++++++++------------
>  3 files changed, 31 insertions(+), 55 deletions(-)
> 
> diff --git a/drivers/staging/erofs/data.c b/drivers/staging/erofs/data.c
> index 5a55f0bfdfbb..1baa59cf11b5 100644
> --- a/drivers/staging/erofs/data.c
> +++ b/drivers/staging/erofs/data.c
> @@ -165,43 +165,19 @@ static int erofs_map_blocks_flatmode(struct inode *inode,
>  	return err;
>  }
>  
> -#ifdef CONFIG_EROFS_FS_ZIP
> -extern int z_erofs_map_blocks_iter(struct inode *,
> -				   struct erofs_map_blocks *,
> -				   struct page **, int);
> -#endif
> -
> -int erofs_map_blocks_iter(struct inode *inode,
> -			  struct erofs_map_blocks *map,
> -			  struct page **mpage_ret, int flags)
> -{
> -	/* by default, reading raw data never use erofs_map_blocks_iter */
> -	if (unlikely(!is_inode_layout_compression(inode))) {
> -		if (*mpage_ret)
> -			put_page(*mpage_ret);
> -		*mpage_ret = NULL;
> -
> -		return erofs_map_blocks(inode, map, flags);
> -	}
> -
> -#ifdef CONFIG_EROFS_FS_ZIP
> -	return z_erofs_map_blocks_iter(inode, map, mpage_ret, flags);
> -#else
> -	/* data compression is not available */
> -	return -ENOTSUPP;
> -#endif
> -}
> -
>  int erofs_map_blocks(struct inode *inode,
>  		     struct erofs_map_blocks *map, int flags)
>  {
>  	if (unlikely(is_inode_layout_compression(inode))) {
> -		struct page *mpage = NULL;
> -		int err;
> +		int err = -ENOTSUPP;
>  
> -		err = erofs_map_blocks_iter(inode, map, &mpage, flags);
> -		if (mpage)
> -			put_page(mpage);
> +#ifdef CONFIG_EROFS_FS_ZIP
> +		map->mpage = NULL;
> +
> +		err = z_erofs_map_blocks_iter(inode, map, flags);
> +#endif
> +		if (map->mpage)
> +			put_page(map->mpage);
>  		return err;
>  	}
>  	return erofs_map_blocks_flatmode(inode, map, flags);
> diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
> index e049d00c087a..740961fc565f 100644
> --- a/drivers/staging/erofs/internal.h
> +++ b/drivers/staging/erofs/internal.h
> @@ -461,8 +461,16 @@ struct erofs_map_blocks {
>  	u64 m_plen, m_llen;
>  
>  	unsigned int m_flags;
> +
> +	struct page *mpage;
>  };
>  
> +#ifdef CONFIG_EROFS_FS_ZIP
> +extern int z_erofs_map_blocks_iter(struct inode *,
> +				   struct erofs_map_blocks *,
> +				   int);
> +#endif
> +
>  /* Flags used by erofs_map_blocks() */
>  #define EROFS_GET_BLOCKS_RAW    0x0001
>  
> @@ -522,14 +530,6 @@ static inline struct page *erofs_get_meta_page_nofail(struct super_block *sb,
>  }
>  
>  extern int erofs_map_blocks(struct inode *, struct erofs_map_blocks *, int);
> -extern int erofs_map_blocks_iter(struct inode *, struct erofs_map_blocks *,
> -	struct page **, int);
> -
> -struct erofs_map_blocks_iter {
> -	struct erofs_map_blocks map;
> -	struct page *mpage;
> -};
> -
>  
>  static inline struct page *
>  erofs_get_inline_page(struct inode *inode,
> diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
> index 4ac1099a39c6..30340afaa504 100644
> --- a/drivers/staging/erofs/unzip_vle.c
> +++ b/drivers/staging/erofs/unzip_vle.c
> @@ -636,7 +636,7 @@ struct z_erofs_vle_frontend {
>  	struct inode *const inode;
>  
>  	struct z_erofs_vle_work_builder builder;
> -	struct erofs_map_blocks_iter m_iter;
> +	struct erofs_map_blocks map;
>  
>  	z_erofs_vle_owned_workgrp_t owned_head;
>  
> @@ -647,8 +647,9 @@ struct z_erofs_vle_frontend {
>  
>  #define VLE_FRONTEND_INIT(__i) { \
>  	.inode = __i, \
> -	.m_iter = { \
> -		{ .m_llen = 0, .m_plen = 0 }, \
> +	.map = { \
> +		.m_llen = 0, \
> +		.m_plen = 0, \
>  		.mpage = NULL \
>  	}, \
>  	.builder = VLE_WORK_BUILDER_INIT(), \
> @@ -681,8 +682,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>  {
>  	struct super_block *const sb = fe->inode->i_sb;
>  	struct erofs_sb_info *const sbi __maybe_unused = EROFS_SB(sb);
> -	struct erofs_map_blocks_iter *const m = &fe->m_iter;
> -	struct erofs_map_blocks *const map = &m->map;
> +	struct erofs_map_blocks *const map = &fe->map;
>  	struct z_erofs_vle_work_builder *const builder = &fe->builder;
>  	const loff_t offset = page_offset(page);
>  
> @@ -715,7 +715,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>  
>  	map->m_la = offset + cur;
>  	map->m_llen = 0;
> -	err = erofs_map_blocks_iter(fe->inode, map, &m->mpage, 0);
> +	err = erofs_map_blocks(fe->inode, map, 0);
>  	if (unlikely(err))
>  		goto err_out;
>  
> @@ -1484,8 +1484,8 @@ static int z_erofs_vle_normalaccess_readpage(struct file *file,
>  
>  	z_erofs_submit_and_unzip(&f, &pagepool, true);
>  out:
> -	if (f.m_iter.mpage)
> -		put_page(f.m_iter.mpage);
> +	if (f.map.mpage)
> +		put_page(f.map.mpage);
>  
>  	/* clean up the remaining free pages */
>  	put_pages_list(&pagepool);
> @@ -1555,8 +1555,8 @@ static int z_erofs_vle_normalaccess_readpages(struct file *filp,
>  
>  	z_erofs_submit_and_unzip(&f, &pagepool, sync);
>  
> -	if (f.m_iter.mpage)
> -		put_page(f.m_iter.mpage);
> +	if (f.map.mpage)
> +		put_page(f.map.mpage);
>  
>  	/* clean up the remaining free pages */
>  	put_pages_list(&pagepool);
> @@ -1701,14 +1701,14 @@ vle_get_logical_extent_head(const struct vle_map_blocks_iter_ctx *ctx,
>  
>  int z_erofs_map_blocks_iter(struct inode *inode,
>  	struct erofs_map_blocks *map,
> -	struct page **mpage_ret, int flags)
> +	int flags)
>  {
>  	void *kaddr;
>  	const struct vle_map_blocks_iter_ctx ctx = {
>  		.inode = inode,
>  		.sb = inode->i_sb,
>  		.clusterbits = EROFS_I_SB(inode)->clusterbits,
> -		.mpage_ret = mpage_ret,
> +		.mpage_ret = &map->mpage,
>  		.kaddr_ret = &kaddr
>  	};
>  	const unsigned int clustersize = 1 << ctx.clusterbits;
> @@ -1722,7 +1722,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  
>  	/* initialize `pblk' to keep gcc from printing foolish warnings */
>  	erofs_blk_t mblk, pblk = 0;
> -	struct page *mpage = *mpage_ret;
> +	struct page *mpage = map->mpage;
>  	struct z_erofs_vle_decompressed_index *di;
>  	unsigned int cluster_type, logical_cluster_ofs;
>  	int err = 0;
> @@ -1758,7 +1758,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  			err = PTR_ERR(mpage);
>  			goto out;
>  		}
> -		*mpage_ret = mpage;
> +		map->mpage = mpage;
>  	} else {
>  		lock_page(mpage);
>  		DBG_BUGON(!PageUptodate(mpage));
> @@ -1818,7 +1818,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  		/* get the correspoinding first chunk */
>  		err = vle_get_logical_extent_head(&ctx, lcn, &ofs,
>  						  &pblk, &map->m_flags);
> -		mpage = *mpage_ret;
> +		mpage = map->mpage;
>  
>  		if (unlikely(err)) {
>  			if (mpage)
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] staging: erofs: clean up erofs_map_blocks_iter
  2019-01-09  9:46 ` Chao Yu
@ 2019-01-09 11:54   ` Gao Xiang
  -1 siblings, 0 replies; 9+ messages in thread
From: Gao Xiang @ 2019-01-09 11:54 UTC (permalink / raw)
  To: Chao Yu, linux-erofs; +Cc: linux-kernel, chao, Miao Xie

Hi Chao,

On 2019/1/9 17:46, Chao Yu wrote:
> This patch cleans up erofs_map_blocks* function and structure family,
> just simply the code, no logic change.
> 
> Signed-off-by: Chao Yu <yuchao0@huawei.com>
> ---
>  drivers/staging/erofs/data.c      | 40 +++++++------------------------
>  drivers/staging/erofs/internal.h  | 16 ++++++-------
>  drivers/staging/erofs/unzip_vle.c | 30 +++++++++++------------
>  3 files changed, 31 insertions(+), 55 deletions(-)
> 
> diff --git a/drivers/staging/erofs/data.c b/drivers/staging/erofs/data.c
> index 5a55f0bfdfbb..1baa59cf11b5 100644
> --- a/drivers/staging/erofs/data.c
> +++ b/drivers/staging/erofs/data.c
> @@ -165,43 +165,19 @@ static int erofs_map_blocks_flatmode(struct inode *inode,
>  	return err;
>  }
>  
> -#ifdef CONFIG_EROFS_FS_ZIP
> -extern int z_erofs_map_blocks_iter(struct inode *,
> -				   struct erofs_map_blocks *,
> -				   struct page **, int);
> -#endif
> -
> -int erofs_map_blocks_iter(struct inode *inode,
> -			  struct erofs_map_blocks *map,
> -			  struct page **mpage_ret, int flags)
> -{
> -	/* by default, reading raw data never use erofs_map_blocks_iter */
> -	if (unlikely(!is_inode_layout_compression(inode))) {
> -		if (*mpage_ret)
> -			put_page(*mpage_ret);
> -		*mpage_ret = NULL;
> -
> -		return erofs_map_blocks(inode, map, flags);
> -	}
> -
> -#ifdef CONFIG_EROFS_FS_ZIP
> -	return z_erofs_map_blocks_iter(inode, map, mpage_ret, flags);
> -#else
> -	/* data compression is not available */
> -	return -ENOTSUPP;
> -#endif
> -}
> -
>  int erofs_map_blocks(struct inode *inode,
>  		     struct erofs_map_blocks *map, int flags)
>  {
>  	if (unlikely(is_inode_layout_compression(inode))) {
> -		struct page *mpage = NULL;
> -		int err;
> +		int err = -ENOTSUPP;
>  
> -		err = erofs_map_blocks_iter(inode, map, &mpage, flags);
> -		if (mpage)
> -			put_page(mpage);
> +#ifdef CONFIG_EROFS_FS_ZIP
> +		map->mpage = NULL;

remove this line? since z_erofs_map_blocks_iter will do put_page internally
if mpage != NULL.

> +
> +		err = z_erofs_map_blocks_iter(inode, map, flags);
> +#endif
> +		if (map->mpage)
> +			put_page(map->mpage);


		if (map->mpage) {
			put_page(map->mpage);
                        map->mpage = NULL;
		}


>  		return err;
>  	}
>  	return erofs_map_blocks_flatmode(inode, map, flags);
> diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
> index e049d00c087a..740961fc565f 100644
> --- a/drivers/staging/erofs/internal.h
> +++ b/drivers/staging/erofs/internal.h
> @@ -461,8 +461,16 @@ struct erofs_map_blocks {
>  	u64 m_plen, m_llen;
>  
>  	unsigned int m_flags;
> +
> +	struct page *mpage;
>  };
>  
> +#ifdef CONFIG_EROFS_FS_ZIP
> +extern int z_erofs_map_blocks_iter(struct inode *,
> +				   struct erofs_map_blocks *,
> +				   int);

#else

static inline z_erofs_map_blocks_iter(struct inode *, ...) { return -ENOTSUPP;}

 --- therefore redundant CONFIG_EROFS_FS_ZIPs could be removed.

#endif

> +#endif
> +
>  /* Flags used by erofs_map_blocks() */
>  #define EROFS_GET_BLOCKS_RAW    0x0001
>  
> @@ -522,14 +530,6 @@ static inline struct page *erofs_get_meta_page_nofail(struct super_block *sb,
>  }
>  
>  extern int erofs_map_blocks(struct inode *, struct erofs_map_blocks *, int);
> -extern int erofs_map_blocks_iter(struct inode *, struct erofs_map_blocks *,
> -	struct page **, int);
> -
> -struct erofs_map_blocks_iter {
> -	struct erofs_map_blocks map;
> -	struct page *mpage;
> -};
> -
>  
>  static inline struct page *
>  erofs_get_inline_page(struct inode *inode,
> diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
> index 4ac1099a39c6..30340afaa504 100644
> --- a/drivers/staging/erofs/unzip_vle.c
> +++ b/drivers/staging/erofs/unzip_vle.c
> @@ -636,7 +636,7 @@ struct z_erofs_vle_frontend {
>  	struct inode *const inode;
>  
>  	struct z_erofs_vle_work_builder builder;
> -	struct erofs_map_blocks_iter m_iter;
> +	struct erofs_map_blocks map;
>  
>  	z_erofs_vle_owned_workgrp_t owned_head;
>  
> @@ -647,8 +647,9 @@ struct z_erofs_vle_frontend {
>  
>  #define VLE_FRONTEND_INIT(__i) { \
>  	.inode = __i, \
> -	.m_iter = { \
> -		{ .m_llen = 0, .m_plen = 0 }, \
> +	.map = { \
> +		.m_llen = 0, \
> +		.m_plen = 0, \
>  		.mpage = NULL \
>  	}, \
>  	.builder = VLE_WORK_BUILDER_INIT(), \
> @@ -681,8 +682,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>  {
>  	struct super_block *const sb = fe->inode->i_sb;
>  	struct erofs_sb_info *const sbi __maybe_unused = EROFS_SB(sb);
> -	struct erofs_map_blocks_iter *const m = &fe->m_iter;
> -	struct erofs_map_blocks *const map = &m->map;
> +	struct erofs_map_blocks *const map = &fe->map;
>  	struct z_erofs_vle_work_builder *const builder = &fe->builder;
>  	const loff_t offset = page_offset(page);
>  
> @@ -715,7 +715,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>  
>  	map->m_la = offset + cur;
>  	map->m_llen = 0;
> -	err = erofs_map_blocks_iter(fe->inode, map, &m->mpage, 0);
> +	err = erofs_map_blocks(fe->inode, map, 0);

should use z_erofs_map_blocks_iter then rather than erofs_map_blocks

Thanks,
Gao Xiang

>  	if (unlikely(err))
>  		goto err_out;
>  
> @@ -1484,8 +1484,8 @@ static int z_erofs_vle_normalaccess_readpage(struct file *file,
>  
>  	z_erofs_submit_and_unzip(&f, &pagepool, true);
>  out:
> -	if (f.m_iter.mpage)
> -		put_page(f.m_iter.mpage);
> +	if (f.map.mpage)
> +		put_page(f.map.mpage);
>  
>  	/* clean up the remaining free pages */
>  	put_pages_list(&pagepool);
> @@ -1555,8 +1555,8 @@ static int z_erofs_vle_normalaccess_readpages(struct file *filp,
>  
>  	z_erofs_submit_and_unzip(&f, &pagepool, sync);
>  
> -	if (f.m_iter.mpage)
> -		put_page(f.m_iter.mpage);
> +	if (f.map.mpage)
> +		put_page(f.map.mpage);
>  
>  	/* clean up the remaining free pages */
>  	put_pages_list(&pagepool);
> @@ -1701,14 +1701,14 @@ vle_get_logical_extent_head(const struct vle_map_blocks_iter_ctx *ctx,
>  
>  int z_erofs_map_blocks_iter(struct inode *inode,
>  	struct erofs_map_blocks *map,
> -	struct page **mpage_ret, int flags)
> +	int flags)
>  {
>  	void *kaddr;
>  	const struct vle_map_blocks_iter_ctx ctx = {
>  		.inode = inode,
>  		.sb = inode->i_sb,
>  		.clusterbits = EROFS_I_SB(inode)->clusterbits,
> -		.mpage_ret = mpage_ret,
> +		.mpage_ret = &map->mpage,
>  		.kaddr_ret = &kaddr
>  	};
>  	const unsigned int clustersize = 1 << ctx.clusterbits;
> @@ -1722,7 +1722,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  
>  	/* initialize `pblk' to keep gcc from printing foolish warnings */
>  	erofs_blk_t mblk, pblk = 0;
> -	struct page *mpage = *mpage_ret;
> +	struct page *mpage = map->mpage;
>  	struct z_erofs_vle_decompressed_index *di;
>  	unsigned int cluster_type, logical_cluster_ofs;
>  	int err = 0;
> @@ -1758,7 +1758,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  			err = PTR_ERR(mpage);
>  			goto out;
>  		}
> -		*mpage_ret = mpage;
> +		map->mpage = mpage;
>  	} else {
>  		lock_page(mpage);
>  		DBG_BUGON(!PageUptodate(mpage));
> @@ -1818,7 +1818,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  		/* get the correspoinding first chunk */
>  		err = vle_get_logical_extent_head(&ctx, lcn, &ofs,
>  						  &pblk, &map->m_flags);
> -		mpage = *mpage_ret;
> +		mpage = map->mpage;
>  
>  		if (unlikely(err)) {
>  			if (mpage)
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH] staging: erofs: clean up erofs_map_blocks_iter
@ 2019-01-09 11:54   ` Gao Xiang
  0 siblings, 0 replies; 9+ messages in thread
From: Gao Xiang @ 2019-01-09 11:54 UTC (permalink / raw)


Hi Chao,

On 2019/1/9 17:46, Chao Yu wrote:
> This patch cleans up erofs_map_blocks* function and structure family,
> just simply the code, no logic change.
> 
> Signed-off-by: Chao Yu <yuchao0 at huawei.com>
> ---
>  drivers/staging/erofs/data.c      | 40 +++++++------------------------
>  drivers/staging/erofs/internal.h  | 16 ++++++-------
>  drivers/staging/erofs/unzip_vle.c | 30 +++++++++++------------
>  3 files changed, 31 insertions(+), 55 deletions(-)
> 
> diff --git a/drivers/staging/erofs/data.c b/drivers/staging/erofs/data.c
> index 5a55f0bfdfbb..1baa59cf11b5 100644
> --- a/drivers/staging/erofs/data.c
> +++ b/drivers/staging/erofs/data.c
> @@ -165,43 +165,19 @@ static int erofs_map_blocks_flatmode(struct inode *inode,
>  	return err;
>  }
>  
> -#ifdef CONFIG_EROFS_FS_ZIP
> -extern int z_erofs_map_blocks_iter(struct inode *,
> -				   struct erofs_map_blocks *,
> -				   struct page **, int);
> -#endif
> -
> -int erofs_map_blocks_iter(struct inode *inode,
> -			  struct erofs_map_blocks *map,
> -			  struct page **mpage_ret, int flags)
> -{
> -	/* by default, reading raw data never use erofs_map_blocks_iter */
> -	if (unlikely(!is_inode_layout_compression(inode))) {
> -		if (*mpage_ret)
> -			put_page(*mpage_ret);
> -		*mpage_ret = NULL;
> -
> -		return erofs_map_blocks(inode, map, flags);
> -	}
> -
> -#ifdef CONFIG_EROFS_FS_ZIP
> -	return z_erofs_map_blocks_iter(inode, map, mpage_ret, flags);
> -#else
> -	/* data compression is not available */
> -	return -ENOTSUPP;
> -#endif
> -}
> -
>  int erofs_map_blocks(struct inode *inode,
>  		     struct erofs_map_blocks *map, int flags)
>  {
>  	if (unlikely(is_inode_layout_compression(inode))) {
> -		struct page *mpage = NULL;
> -		int err;
> +		int err = -ENOTSUPP;
>  
> -		err = erofs_map_blocks_iter(inode, map, &mpage, flags);
> -		if (mpage)
> -			put_page(mpage);
> +#ifdef CONFIG_EROFS_FS_ZIP
> +		map->mpage = NULL;

remove this line? since z_erofs_map_blocks_iter will do put_page internally
if mpage != NULL.

> +
> +		err = z_erofs_map_blocks_iter(inode, map, flags);
> +#endif
> +		if (map->mpage)
> +			put_page(map->mpage);


		if (map->mpage) {
			put_page(map->mpage);
                        map->mpage = NULL;
		}


>  		return err;
>  	}
>  	return erofs_map_blocks_flatmode(inode, map, flags);
> diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
> index e049d00c087a..740961fc565f 100644
> --- a/drivers/staging/erofs/internal.h
> +++ b/drivers/staging/erofs/internal.h
> @@ -461,8 +461,16 @@ struct erofs_map_blocks {
>  	u64 m_plen, m_llen;
>  
>  	unsigned int m_flags;
> +
> +	struct page *mpage;
>  };
>  
> +#ifdef CONFIG_EROFS_FS_ZIP
> +extern int z_erofs_map_blocks_iter(struct inode *,
> +				   struct erofs_map_blocks *,
> +				   int);

#else

static inline z_erofs_map_blocks_iter(struct inode *, ...) { return -ENOTSUPP;}

 --- therefore redundant CONFIG_EROFS_FS_ZIPs could be removed.

#endif

> +#endif
> +
>  /* Flags used by erofs_map_blocks() */
>  #define EROFS_GET_BLOCKS_RAW    0x0001
>  
> @@ -522,14 +530,6 @@ static inline struct page *erofs_get_meta_page_nofail(struct super_block *sb,
>  }
>  
>  extern int erofs_map_blocks(struct inode *, struct erofs_map_blocks *, int);
> -extern int erofs_map_blocks_iter(struct inode *, struct erofs_map_blocks *,
> -	struct page **, int);
> -
> -struct erofs_map_blocks_iter {
> -	struct erofs_map_blocks map;
> -	struct page *mpage;
> -};
> -
>  
>  static inline struct page *
>  erofs_get_inline_page(struct inode *inode,
> diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
> index 4ac1099a39c6..30340afaa504 100644
> --- a/drivers/staging/erofs/unzip_vle.c
> +++ b/drivers/staging/erofs/unzip_vle.c
> @@ -636,7 +636,7 @@ struct z_erofs_vle_frontend {
>  	struct inode *const inode;
>  
>  	struct z_erofs_vle_work_builder builder;
> -	struct erofs_map_blocks_iter m_iter;
> +	struct erofs_map_blocks map;
>  
>  	z_erofs_vle_owned_workgrp_t owned_head;
>  
> @@ -647,8 +647,9 @@ struct z_erofs_vle_frontend {
>  
>  #define VLE_FRONTEND_INIT(__i) { \
>  	.inode = __i, \
> -	.m_iter = { \
> -		{ .m_llen = 0, .m_plen = 0 }, \
> +	.map = { \
> +		.m_llen = 0, \
> +		.m_plen = 0, \
>  		.mpage = NULL \
>  	}, \
>  	.builder = VLE_WORK_BUILDER_INIT(), \
> @@ -681,8 +682,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>  {
>  	struct super_block *const sb = fe->inode->i_sb;
>  	struct erofs_sb_info *const sbi __maybe_unused = EROFS_SB(sb);
> -	struct erofs_map_blocks_iter *const m = &fe->m_iter;
> -	struct erofs_map_blocks *const map = &m->map;
> +	struct erofs_map_blocks *const map = &fe->map;
>  	struct z_erofs_vle_work_builder *const builder = &fe->builder;
>  	const loff_t offset = page_offset(page);
>  
> @@ -715,7 +715,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>  
>  	map->m_la = offset + cur;
>  	map->m_llen = 0;
> -	err = erofs_map_blocks_iter(fe->inode, map, &m->mpage, 0);
> +	err = erofs_map_blocks(fe->inode, map, 0);

should use z_erofs_map_blocks_iter then rather than erofs_map_blocks

Thanks,
Gao Xiang

>  	if (unlikely(err))
>  		goto err_out;
>  
> @@ -1484,8 +1484,8 @@ static int z_erofs_vle_normalaccess_readpage(struct file *file,
>  
>  	z_erofs_submit_and_unzip(&f, &pagepool, true);
>  out:
> -	if (f.m_iter.mpage)
> -		put_page(f.m_iter.mpage);
> +	if (f.map.mpage)
> +		put_page(f.map.mpage);
>  
>  	/* clean up the remaining free pages */
>  	put_pages_list(&pagepool);
> @@ -1555,8 +1555,8 @@ static int z_erofs_vle_normalaccess_readpages(struct file *filp,
>  
>  	z_erofs_submit_and_unzip(&f, &pagepool, sync);
>  
> -	if (f.m_iter.mpage)
> -		put_page(f.m_iter.mpage);
> +	if (f.map.mpage)
> +		put_page(f.map.mpage);
>  
>  	/* clean up the remaining free pages */
>  	put_pages_list(&pagepool);
> @@ -1701,14 +1701,14 @@ vle_get_logical_extent_head(const struct vle_map_blocks_iter_ctx *ctx,
>  
>  int z_erofs_map_blocks_iter(struct inode *inode,
>  	struct erofs_map_blocks *map,
> -	struct page **mpage_ret, int flags)
> +	int flags)
>  {
>  	void *kaddr;
>  	const struct vle_map_blocks_iter_ctx ctx = {
>  		.inode = inode,
>  		.sb = inode->i_sb,
>  		.clusterbits = EROFS_I_SB(inode)->clusterbits,
> -		.mpage_ret = mpage_ret,
> +		.mpage_ret = &map->mpage,
>  		.kaddr_ret = &kaddr
>  	};
>  	const unsigned int clustersize = 1 << ctx.clusterbits;
> @@ -1722,7 +1722,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  
>  	/* initialize `pblk' to keep gcc from printing foolish warnings */
>  	erofs_blk_t mblk, pblk = 0;
> -	struct page *mpage = *mpage_ret;
> +	struct page *mpage = map->mpage;
>  	struct z_erofs_vle_decompressed_index *di;
>  	unsigned int cluster_type, logical_cluster_ofs;
>  	int err = 0;
> @@ -1758,7 +1758,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  			err = PTR_ERR(mpage);
>  			goto out;
>  		}
> -		*mpage_ret = mpage;
> +		map->mpage = mpage;
>  	} else {
>  		lock_page(mpage);
>  		DBG_BUGON(!PageUptodate(mpage));
> @@ -1818,7 +1818,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>  		/* get the correspoinding first chunk */
>  		err = vle_get_logical_extent_head(&ctx, lcn, &ofs,
>  						  &pblk, &map->m_flags);
> -		mpage = *mpage_ret;
> +		mpage = map->mpage;
>  
>  		if (unlikely(err)) {
>  			if (mpage)
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] staging: erofs: clean up erofs_map_blocks_iter
  2019-01-09 11:54   ` Gao Xiang
@ 2019-01-10  1:15     ` Chao Yu
  -1 siblings, 0 replies; 9+ messages in thread
From: Chao Yu @ 2019-01-10  1:15 UTC (permalink / raw)
  To: Gao Xiang, linux-erofs; +Cc: linux-kernel, chao, Miao Xie

Hi Xiang,

Thanks for the review, let me fix them all and send v2. :)

Thanks,

On 2019/1/9 19:54, Gao Xiang wrote:
> Hi Chao,
> 
> On 2019/1/9 17:46, Chao Yu wrote:
>> This patch cleans up erofs_map_blocks* function and structure family,
>> just simply the code, no logic change.
>>
>> Signed-off-by: Chao Yu <yuchao0@huawei.com>
>> ---
>>  drivers/staging/erofs/data.c      | 40 +++++++------------------------
>>  drivers/staging/erofs/internal.h  | 16 ++++++-------
>>  drivers/staging/erofs/unzip_vle.c | 30 +++++++++++------------
>>  3 files changed, 31 insertions(+), 55 deletions(-)
>>
>> diff --git a/drivers/staging/erofs/data.c b/drivers/staging/erofs/data.c
>> index 5a55f0bfdfbb..1baa59cf11b5 100644
>> --- a/drivers/staging/erofs/data.c
>> +++ b/drivers/staging/erofs/data.c
>> @@ -165,43 +165,19 @@ static int erofs_map_blocks_flatmode(struct inode *inode,
>>  	return err;
>>  }
>>  
>> -#ifdef CONFIG_EROFS_FS_ZIP
>> -extern int z_erofs_map_blocks_iter(struct inode *,
>> -				   struct erofs_map_blocks *,
>> -				   struct page **, int);
>> -#endif
>> -
>> -int erofs_map_blocks_iter(struct inode *inode,
>> -			  struct erofs_map_blocks *map,
>> -			  struct page **mpage_ret, int flags)
>> -{
>> -	/* by default, reading raw data never use erofs_map_blocks_iter */
>> -	if (unlikely(!is_inode_layout_compression(inode))) {
>> -		if (*mpage_ret)
>> -			put_page(*mpage_ret);
>> -		*mpage_ret = NULL;
>> -
>> -		return erofs_map_blocks(inode, map, flags);
>> -	}
>> -
>> -#ifdef CONFIG_EROFS_FS_ZIP
>> -	return z_erofs_map_blocks_iter(inode, map, mpage_ret, flags);
>> -#else
>> -	/* data compression is not available */
>> -	return -ENOTSUPP;
>> -#endif
>> -}
>> -
>>  int erofs_map_blocks(struct inode *inode,
>>  		     struct erofs_map_blocks *map, int flags)
>>  {
>>  	if (unlikely(is_inode_layout_compression(inode))) {
>> -		struct page *mpage = NULL;
>> -		int err;
>> +		int err = -ENOTSUPP;
>>  
>> -		err = erofs_map_blocks_iter(inode, map, &mpage, flags);
>> -		if (mpage)
>> -			put_page(mpage);
>> +#ifdef CONFIG_EROFS_FS_ZIP
>> +		map->mpage = NULL;
> 
> remove this line? since z_erofs_map_blocks_iter will do put_page internally
> if mpage != NULL.
> 
>> +
>> +		err = z_erofs_map_blocks_iter(inode, map, flags);
>> +#endif
>> +		if (map->mpage)
>> +			put_page(map->mpage);
> 
> 
> 		if (map->mpage) {
> 			put_page(map->mpage);
>                         map->mpage = NULL;
> 		}
> 
> 
>>  		return err;
>>  	}
>>  	return erofs_map_blocks_flatmode(inode, map, flags);
>> diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
>> index e049d00c087a..740961fc565f 100644
>> --- a/drivers/staging/erofs/internal.h
>> +++ b/drivers/staging/erofs/internal.h
>> @@ -461,8 +461,16 @@ struct erofs_map_blocks {
>>  	u64 m_plen, m_llen;
>>  
>>  	unsigned int m_flags;
>> +
>> +	struct page *mpage;
>>  };
>>  
>> +#ifdef CONFIG_EROFS_FS_ZIP
>> +extern int z_erofs_map_blocks_iter(struct inode *,
>> +				   struct erofs_map_blocks *,
>> +				   int);
> 
> #else
> 
> static inline z_erofs_map_blocks_iter(struct inode *, ...) { return -ENOTSUPP;}
> 
>  --- therefore redundant CONFIG_EROFS_FS_ZIPs could be removed.
> 
> #endif
> 
>> +#endif
>> +
>>  /* Flags used by erofs_map_blocks() */
>>  #define EROFS_GET_BLOCKS_RAW    0x0001
>>  
>> @@ -522,14 +530,6 @@ static inline struct page *erofs_get_meta_page_nofail(struct super_block *sb,
>>  }
>>  
>>  extern int erofs_map_blocks(struct inode *, struct erofs_map_blocks *, int);
>> -extern int erofs_map_blocks_iter(struct inode *, struct erofs_map_blocks *,
>> -	struct page **, int);
>> -
>> -struct erofs_map_blocks_iter {
>> -	struct erofs_map_blocks map;
>> -	struct page *mpage;
>> -};
>> -
>>  
>>  static inline struct page *
>>  erofs_get_inline_page(struct inode *inode,
>> diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
>> index 4ac1099a39c6..30340afaa504 100644
>> --- a/drivers/staging/erofs/unzip_vle.c
>> +++ b/drivers/staging/erofs/unzip_vle.c
>> @@ -636,7 +636,7 @@ struct z_erofs_vle_frontend {
>>  	struct inode *const inode;
>>  
>>  	struct z_erofs_vle_work_builder builder;
>> -	struct erofs_map_blocks_iter m_iter;
>> +	struct erofs_map_blocks map;
>>  
>>  	z_erofs_vle_owned_workgrp_t owned_head;
>>  
>> @@ -647,8 +647,9 @@ struct z_erofs_vle_frontend {
>>  
>>  #define VLE_FRONTEND_INIT(__i) { \
>>  	.inode = __i, \
>> -	.m_iter = { \
>> -		{ .m_llen = 0, .m_plen = 0 }, \
>> +	.map = { \
>> +		.m_llen = 0, \
>> +		.m_plen = 0, \
>>  		.mpage = NULL \
>>  	}, \
>>  	.builder = VLE_WORK_BUILDER_INIT(), \
>> @@ -681,8 +682,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>>  {
>>  	struct super_block *const sb = fe->inode->i_sb;
>>  	struct erofs_sb_info *const sbi __maybe_unused = EROFS_SB(sb);
>> -	struct erofs_map_blocks_iter *const m = &fe->m_iter;
>> -	struct erofs_map_blocks *const map = &m->map;
>> +	struct erofs_map_blocks *const map = &fe->map;
>>  	struct z_erofs_vle_work_builder *const builder = &fe->builder;
>>  	const loff_t offset = page_offset(page);
>>  
>> @@ -715,7 +715,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>>  
>>  	map->m_la = offset + cur;
>>  	map->m_llen = 0;
>> -	err = erofs_map_blocks_iter(fe->inode, map, &m->mpage, 0);
>> +	err = erofs_map_blocks(fe->inode, map, 0);
> 
> should use z_erofs_map_blocks_iter then rather than erofs_map_blocks
> 
> Thanks,
> Gao Xiang
> 
>>  	if (unlikely(err))
>>  		goto err_out;
>>  
>> @@ -1484,8 +1484,8 @@ static int z_erofs_vle_normalaccess_readpage(struct file *file,
>>  
>>  	z_erofs_submit_and_unzip(&f, &pagepool, true);
>>  out:
>> -	if (f.m_iter.mpage)
>> -		put_page(f.m_iter.mpage);
>> +	if (f.map.mpage)
>> +		put_page(f.map.mpage);
>>  
>>  	/* clean up the remaining free pages */
>>  	put_pages_list(&pagepool);
>> @@ -1555,8 +1555,8 @@ static int z_erofs_vle_normalaccess_readpages(struct file *filp,
>>  
>>  	z_erofs_submit_and_unzip(&f, &pagepool, sync);
>>  
>> -	if (f.m_iter.mpage)
>> -		put_page(f.m_iter.mpage);
>> +	if (f.map.mpage)
>> +		put_page(f.map.mpage);
>>  
>>  	/* clean up the remaining free pages */
>>  	put_pages_list(&pagepool);
>> @@ -1701,14 +1701,14 @@ vle_get_logical_extent_head(const struct vle_map_blocks_iter_ctx *ctx,
>>  
>>  int z_erofs_map_blocks_iter(struct inode *inode,
>>  	struct erofs_map_blocks *map,
>> -	struct page **mpage_ret, int flags)
>> +	int flags)
>>  {
>>  	void *kaddr;
>>  	const struct vle_map_blocks_iter_ctx ctx = {
>>  		.inode = inode,
>>  		.sb = inode->i_sb,
>>  		.clusterbits = EROFS_I_SB(inode)->clusterbits,
>> -		.mpage_ret = mpage_ret,
>> +		.mpage_ret = &map->mpage,
>>  		.kaddr_ret = &kaddr
>>  	};
>>  	const unsigned int clustersize = 1 << ctx.clusterbits;
>> @@ -1722,7 +1722,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>>  
>>  	/* initialize `pblk' to keep gcc from printing foolish warnings */
>>  	erofs_blk_t mblk, pblk = 0;
>> -	struct page *mpage = *mpage_ret;
>> +	struct page *mpage = map->mpage;
>>  	struct z_erofs_vle_decompressed_index *di;
>>  	unsigned int cluster_type, logical_cluster_ofs;
>>  	int err = 0;
>> @@ -1758,7 +1758,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>>  			err = PTR_ERR(mpage);
>>  			goto out;
>>  		}
>> -		*mpage_ret = mpage;
>> +		map->mpage = mpage;
>>  	} else {
>>  		lock_page(mpage);
>>  		DBG_BUGON(!PageUptodate(mpage));
>> @@ -1818,7 +1818,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>>  		/* get the correspoinding first chunk */
>>  		err = vle_get_logical_extent_head(&ctx, lcn, &ofs,
>>  						  &pblk, &map->m_flags);
>> -		mpage = *mpage_ret;
>> +		mpage = map->mpage;
>>  
>>  		if (unlikely(err)) {
>>  			if (mpage)
>>
> 
> .
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH] staging: erofs: clean up erofs_map_blocks_iter
@ 2019-01-10  1:15     ` Chao Yu
  0 siblings, 0 replies; 9+ messages in thread
From: Chao Yu @ 2019-01-10  1:15 UTC (permalink / raw)


Hi Xiang,

Thanks for the review, let me fix them all and send v2. :)

Thanks,

On 2019/1/9 19:54, Gao Xiang wrote:
> Hi Chao,
> 
> On 2019/1/9 17:46, Chao Yu wrote:
>> This patch cleans up erofs_map_blocks* function and structure family,
>> just simply the code, no logic change.
>>
>> Signed-off-by: Chao Yu <yuchao0 at huawei.com>
>> ---
>>  drivers/staging/erofs/data.c      | 40 +++++++------------------------
>>  drivers/staging/erofs/internal.h  | 16 ++++++-------
>>  drivers/staging/erofs/unzip_vle.c | 30 +++++++++++------------
>>  3 files changed, 31 insertions(+), 55 deletions(-)
>>
>> diff --git a/drivers/staging/erofs/data.c b/drivers/staging/erofs/data.c
>> index 5a55f0bfdfbb..1baa59cf11b5 100644
>> --- a/drivers/staging/erofs/data.c
>> +++ b/drivers/staging/erofs/data.c
>> @@ -165,43 +165,19 @@ static int erofs_map_blocks_flatmode(struct inode *inode,
>>  	return err;
>>  }
>>  
>> -#ifdef CONFIG_EROFS_FS_ZIP
>> -extern int z_erofs_map_blocks_iter(struct inode *,
>> -				   struct erofs_map_blocks *,
>> -				   struct page **, int);
>> -#endif
>> -
>> -int erofs_map_blocks_iter(struct inode *inode,
>> -			  struct erofs_map_blocks *map,
>> -			  struct page **mpage_ret, int flags)
>> -{
>> -	/* by default, reading raw data never use erofs_map_blocks_iter */
>> -	if (unlikely(!is_inode_layout_compression(inode))) {
>> -		if (*mpage_ret)
>> -			put_page(*mpage_ret);
>> -		*mpage_ret = NULL;
>> -
>> -		return erofs_map_blocks(inode, map, flags);
>> -	}
>> -
>> -#ifdef CONFIG_EROFS_FS_ZIP
>> -	return z_erofs_map_blocks_iter(inode, map, mpage_ret, flags);
>> -#else
>> -	/* data compression is not available */
>> -	return -ENOTSUPP;
>> -#endif
>> -}
>> -
>>  int erofs_map_blocks(struct inode *inode,
>>  		     struct erofs_map_blocks *map, int flags)
>>  {
>>  	if (unlikely(is_inode_layout_compression(inode))) {
>> -		struct page *mpage = NULL;
>> -		int err;
>> +		int err = -ENOTSUPP;
>>  
>> -		err = erofs_map_blocks_iter(inode, map, &mpage, flags);
>> -		if (mpage)
>> -			put_page(mpage);
>> +#ifdef CONFIG_EROFS_FS_ZIP
>> +		map->mpage = NULL;
> 
> remove this line? since z_erofs_map_blocks_iter will do put_page internally
> if mpage != NULL.
> 
>> +
>> +		err = z_erofs_map_blocks_iter(inode, map, flags);
>> +#endif
>> +		if (map->mpage)
>> +			put_page(map->mpage);
> 
> 
> 		if (map->mpage) {
> 			put_page(map->mpage);
>                         map->mpage = NULL;
> 		}
> 
> 
>>  		return err;
>>  	}
>>  	return erofs_map_blocks_flatmode(inode, map, flags);
>> diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
>> index e049d00c087a..740961fc565f 100644
>> --- a/drivers/staging/erofs/internal.h
>> +++ b/drivers/staging/erofs/internal.h
>> @@ -461,8 +461,16 @@ struct erofs_map_blocks {
>>  	u64 m_plen, m_llen;
>>  
>>  	unsigned int m_flags;
>> +
>> +	struct page *mpage;
>>  };
>>  
>> +#ifdef CONFIG_EROFS_FS_ZIP
>> +extern int z_erofs_map_blocks_iter(struct inode *,
>> +				   struct erofs_map_blocks *,
>> +				   int);
> 
> #else
> 
> static inline z_erofs_map_blocks_iter(struct inode *, ...) { return -ENOTSUPP;}
> 
>  --- therefore redundant CONFIG_EROFS_FS_ZIPs could be removed.
> 
> #endif
> 
>> +#endif
>> +
>>  /* Flags used by erofs_map_blocks() */
>>  #define EROFS_GET_BLOCKS_RAW    0x0001
>>  
>> @@ -522,14 +530,6 @@ static inline struct page *erofs_get_meta_page_nofail(struct super_block *sb,
>>  }
>>  
>>  extern int erofs_map_blocks(struct inode *, struct erofs_map_blocks *, int);
>> -extern int erofs_map_blocks_iter(struct inode *, struct erofs_map_blocks *,
>> -	struct page **, int);
>> -
>> -struct erofs_map_blocks_iter {
>> -	struct erofs_map_blocks map;
>> -	struct page *mpage;
>> -};
>> -
>>  
>>  static inline struct page *
>>  erofs_get_inline_page(struct inode *inode,
>> diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
>> index 4ac1099a39c6..30340afaa504 100644
>> --- a/drivers/staging/erofs/unzip_vle.c
>> +++ b/drivers/staging/erofs/unzip_vle.c
>> @@ -636,7 +636,7 @@ struct z_erofs_vle_frontend {
>>  	struct inode *const inode;
>>  
>>  	struct z_erofs_vle_work_builder builder;
>> -	struct erofs_map_blocks_iter m_iter;
>> +	struct erofs_map_blocks map;
>>  
>>  	z_erofs_vle_owned_workgrp_t owned_head;
>>  
>> @@ -647,8 +647,9 @@ struct z_erofs_vle_frontend {
>>  
>>  #define VLE_FRONTEND_INIT(__i) { \
>>  	.inode = __i, \
>> -	.m_iter = { \
>> -		{ .m_llen = 0, .m_plen = 0 }, \
>> +	.map = { \
>> +		.m_llen = 0, \
>> +		.m_plen = 0, \
>>  		.mpage = NULL \
>>  	}, \
>>  	.builder = VLE_WORK_BUILDER_INIT(), \
>> @@ -681,8 +682,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>>  {
>>  	struct super_block *const sb = fe->inode->i_sb;
>>  	struct erofs_sb_info *const sbi __maybe_unused = EROFS_SB(sb);
>> -	struct erofs_map_blocks_iter *const m = &fe->m_iter;
>> -	struct erofs_map_blocks *const map = &m->map;
>> +	struct erofs_map_blocks *const map = &fe->map;
>>  	struct z_erofs_vle_work_builder *const builder = &fe->builder;
>>  	const loff_t offset = page_offset(page);
>>  
>> @@ -715,7 +715,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
>>  
>>  	map->m_la = offset + cur;
>>  	map->m_llen = 0;
>> -	err = erofs_map_blocks_iter(fe->inode, map, &m->mpage, 0);
>> +	err = erofs_map_blocks(fe->inode, map, 0);
> 
> should use z_erofs_map_blocks_iter then rather than erofs_map_blocks
> 
> Thanks,
> Gao Xiang
> 
>>  	if (unlikely(err))
>>  		goto err_out;
>>  
>> @@ -1484,8 +1484,8 @@ static int z_erofs_vle_normalaccess_readpage(struct file *file,
>>  
>>  	z_erofs_submit_and_unzip(&f, &pagepool, true);
>>  out:
>> -	if (f.m_iter.mpage)
>> -		put_page(f.m_iter.mpage);
>> +	if (f.map.mpage)
>> +		put_page(f.map.mpage);
>>  
>>  	/* clean up the remaining free pages */
>>  	put_pages_list(&pagepool);
>> @@ -1555,8 +1555,8 @@ static int z_erofs_vle_normalaccess_readpages(struct file *filp,
>>  
>>  	z_erofs_submit_and_unzip(&f, &pagepool, sync);
>>  
>> -	if (f.m_iter.mpage)
>> -		put_page(f.m_iter.mpage);
>> +	if (f.map.mpage)
>> +		put_page(f.map.mpage);
>>  
>>  	/* clean up the remaining free pages */
>>  	put_pages_list(&pagepool);
>> @@ -1701,14 +1701,14 @@ vle_get_logical_extent_head(const struct vle_map_blocks_iter_ctx *ctx,
>>  
>>  int z_erofs_map_blocks_iter(struct inode *inode,
>>  	struct erofs_map_blocks *map,
>> -	struct page **mpage_ret, int flags)
>> +	int flags)
>>  {
>>  	void *kaddr;
>>  	const struct vle_map_blocks_iter_ctx ctx = {
>>  		.inode = inode,
>>  		.sb = inode->i_sb,
>>  		.clusterbits = EROFS_I_SB(inode)->clusterbits,
>> -		.mpage_ret = mpage_ret,
>> +		.mpage_ret = &map->mpage,
>>  		.kaddr_ret = &kaddr
>>  	};
>>  	const unsigned int clustersize = 1 << ctx.clusterbits;
>> @@ -1722,7 +1722,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>>  
>>  	/* initialize `pblk' to keep gcc from printing foolish warnings */
>>  	erofs_blk_t mblk, pblk = 0;
>> -	struct page *mpage = *mpage_ret;
>> +	struct page *mpage = map->mpage;
>>  	struct z_erofs_vle_decompressed_index *di;
>>  	unsigned int cluster_type, logical_cluster_ofs;
>>  	int err = 0;
>> @@ -1758,7 +1758,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>>  			err = PTR_ERR(mpage);
>>  			goto out;
>>  		}
>> -		*mpage_ret = mpage;
>> +		map->mpage = mpage;
>>  	} else {
>>  		lock_page(mpage);
>>  		DBG_BUGON(!PageUptodate(mpage));
>> @@ -1818,7 +1818,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
>>  		/* get the correspoinding first chunk */
>>  		err = vle_get_logical_extent_head(&ctx, lcn, &ofs,
>>  						  &pblk, &map->m_flags);
>> -		mpage = *mpage_ret;
>> +		mpage = map->mpage;
>>  
>>  		if (unlikely(err)) {
>>  			if (mpage)
>>
> 
> .
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH] staging: erofs: clean up erofs_map_blocks_iter
@ 2019-01-10  1:32 Chao Yu
  0 siblings, 0 replies; 9+ messages in thread
From: Chao Yu @ 2019-01-10  1:32 UTC (permalink / raw)


Signed-off-by: Chao Yu <yuchao0 at huawei.com>
---
v2:
- fix to handle map->mpage correctly in erofs_map_blocks
- fix to add definition if CONFIG_EROFS_FS_ZIP is not defined
- use inner function z_erofs_map_blocks_iter in unzip_vle.c
 drivers/staging/erofs/data.c      | 40 +++++++------------------------
 drivers/staging/erofs/internal.h  | 23 +++++++++++-------
 drivers/staging/erofs/unzip_vle.c | 30 +++++++++++------------
 3 files changed, 38 insertions(+), 55 deletions(-)

diff --git a/drivers/staging/erofs/data.c b/drivers/staging/erofs/data.c
index 5a55f0bfdfbb..e7d21a2d44f7 100644
--- a/drivers/staging/erofs/data.c
+++ b/drivers/staging/erofs/data.c
@@ -165,43 +165,19 @@ static int erofs_map_blocks_flatmode(struct inode *inode,
 	return err;
 }
 
-#ifdef CONFIG_EROFS_FS_ZIP
-extern int z_erofs_map_blocks_iter(struct inode *,
-				   struct erofs_map_blocks *,
-				   struct page **, int);
-#endif
-
-int erofs_map_blocks_iter(struct inode *inode,
-			  struct erofs_map_blocks *map,
-			  struct page **mpage_ret, int flags)
-{
-	/* by default, reading raw data never use erofs_map_blocks_iter */
-	if (unlikely(!is_inode_layout_compression(inode))) {
-		if (*mpage_ret)
-			put_page(*mpage_ret);
-		*mpage_ret = NULL;
-
-		return erofs_map_blocks(inode, map, flags);
-	}
-
-#ifdef CONFIG_EROFS_FS_ZIP
-	return z_erofs_map_blocks_iter(inode, map, mpage_ret, flags);
-#else
-	/* data compression is not available */
-	return -ENOTSUPP;
-#endif
-}
-
 int erofs_map_blocks(struct inode *inode,
 		     struct erofs_map_blocks *map, int flags)
 {
 	if (unlikely(is_inode_layout_compression(inode))) {
-		struct page *mpage = NULL;
-		int err;
+		int err = -ENOTSUPP;
 
-		err = erofs_map_blocks_iter(inode, map, &mpage, flags);
-		if (mpage)
-			put_page(mpage);
+#ifdef CONFIG_EROFS_FS_ZIP
+		err = z_erofs_map_blocks_iter(inode, map, flags);
+#endif
+		if (map->mpage) {
+			put_page(map->mpage);
+			map->mpage = NULL;
+		}
 		return err;
 	}
 	return erofs_map_blocks_flatmode(inode, map, flags);
diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
index e049d00c087a..a13629abaf94 100644
--- a/drivers/staging/erofs/internal.h
+++ b/drivers/staging/erofs/internal.h
@@ -461,8 +461,23 @@ struct erofs_map_blocks {
 	u64 m_plen, m_llen;
 
 	unsigned int m_flags;
+
+	struct page *mpage;
 };
 
+#ifdef CONFIG_EROFS_FS_ZIP
+extern int z_erofs_map_blocks_iter(struct inode *,
+				   struct erofs_map_blocks *,
+				   int);
+#else
+static inline z_erofs_map_blocks_iter(struct inode *,
+				   struct erofs_map_blocks *,
+				   int);
+{
+	return -ENOTSUPP;
+}
+#endif
+
 /* Flags used by erofs_map_blocks() */
 #define EROFS_GET_BLOCKS_RAW    0x0001
 
@@ -522,14 +537,6 @@ static inline struct page *erofs_get_meta_page_nofail(struct super_block *sb,
 }
 
 extern int erofs_map_blocks(struct inode *, struct erofs_map_blocks *, int);
-extern int erofs_map_blocks_iter(struct inode *, struct erofs_map_blocks *,
-	struct page **, int);
-
-struct erofs_map_blocks_iter {
-	struct erofs_map_blocks map;
-	struct page *mpage;
-};
-
 
 static inline struct page *
 erofs_get_inline_page(struct inode *inode,
diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
index 4ac1099a39c6..828caf27ab49 100644
--- a/drivers/staging/erofs/unzip_vle.c
+++ b/drivers/staging/erofs/unzip_vle.c
@@ -636,7 +636,7 @@ struct z_erofs_vle_frontend {
 	struct inode *const inode;
 
 	struct z_erofs_vle_work_builder builder;
-	struct erofs_map_blocks_iter m_iter;
+	struct erofs_map_blocks map;
 
 	z_erofs_vle_owned_workgrp_t owned_head;
 
@@ -647,8 +647,9 @@ struct z_erofs_vle_frontend {
 
 #define VLE_FRONTEND_INIT(__i) { \
 	.inode = __i, \
-	.m_iter = { \
-		{ .m_llen = 0, .m_plen = 0 }, \
+	.map = { \
+		.m_llen = 0, \
+		.m_plen = 0, \
 		.mpage = NULL \
 	}, \
 	.builder = VLE_WORK_BUILDER_INIT(), \
@@ -681,8 +682,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
 {
 	struct super_block *const sb = fe->inode->i_sb;
 	struct erofs_sb_info *const sbi __maybe_unused = EROFS_SB(sb);
-	struct erofs_map_blocks_iter *const m = &fe->m_iter;
-	struct erofs_map_blocks *const map = &m->map;
+	struct erofs_map_blocks *const map = &fe->map;
 	struct z_erofs_vle_work_builder *const builder = &fe->builder;
 	const loff_t offset = page_offset(page);
 
@@ -715,7 +715,7 @@ static int z_erofs_do_read_page(struct z_erofs_vle_frontend *fe,
 
 	map->m_la = offset + cur;
 	map->m_llen = 0;
-	err = erofs_map_blocks_iter(fe->inode, map, &m->mpage, 0);
+	err = z_erofs_map_blocks_iter(fe->inode, map, 0);
 	if (unlikely(err))
 		goto err_out;
 
@@ -1484,8 +1484,8 @@ static int z_erofs_vle_normalaccess_readpage(struct file *file,
 
 	z_erofs_submit_and_unzip(&f, &pagepool, true);
 out:
-	if (f.m_iter.mpage)
-		put_page(f.m_iter.mpage);
+	if (f.map.mpage)
+		put_page(f.map.mpage);
 
 	/* clean up the remaining free pages */
 	put_pages_list(&pagepool);
@@ -1555,8 +1555,8 @@ static int z_erofs_vle_normalaccess_readpages(struct file *filp,
 
 	z_erofs_submit_and_unzip(&f, &pagepool, sync);
 
-	if (f.m_iter.mpage)
-		put_page(f.m_iter.mpage);
+	if (f.map.mpage)
+		put_page(f.map.mpage);
 
 	/* clean up the remaining free pages */
 	put_pages_list(&pagepool);
@@ -1701,14 +1701,14 @@ vle_get_logical_extent_head(const struct vle_map_blocks_iter_ctx *ctx,
 
 int z_erofs_map_blocks_iter(struct inode *inode,
 	struct erofs_map_blocks *map,
-	struct page **mpage_ret, int flags)
+	int flags)
 {
 	void *kaddr;
 	const struct vle_map_blocks_iter_ctx ctx = {
 		.inode = inode,
 		.sb = inode->i_sb,
 		.clusterbits = EROFS_I_SB(inode)->clusterbits,
-		.mpage_ret = mpage_ret,
+		.mpage_ret = &map->mpage,
 		.kaddr_ret = &kaddr
 	};
 	const unsigned int clustersize = 1 << ctx.clusterbits;
@@ -1722,7 +1722,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 
 	/* initialize `pblk' to keep gcc from printing foolish warnings */
 	erofs_blk_t mblk, pblk = 0;
-	struct page *mpage = *mpage_ret;
+	struct page *mpage = map->mpage;
 	struct z_erofs_vle_decompressed_index *di;
 	unsigned int cluster_type, logical_cluster_ofs;
 	int err = 0;
@@ -1758,7 +1758,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 			err = PTR_ERR(mpage);
 			goto out;
 		}
-		*mpage_ret = mpage;
+		map->mpage = mpage;
 	} else {
 		lock_page(mpage);
 		DBG_BUGON(!PageUptodate(mpage));
@@ -1818,7 +1818,7 @@ int z_erofs_map_blocks_iter(struct inode *inode,
 		/* get the correspoinding first chunk */
 		err = vle_get_logical_extent_head(&ctx, lcn, &ofs,
 						  &pblk, &map->m_flags);
-		mpage = *mpage_ret;
+		mpage = map->mpage;
 
 		if (unlikely(err)) {
 			if (mpage)
-- 
2.18.0.rc1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-01-10  1:32 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-09  9:46 [PATCH] staging: erofs: clean up erofs_map_blocks_iter Chao Yu
2019-01-09  9:46 ` Chao Yu
2019-01-09  9:46 ` Chao Yu
2019-01-09  9:59 ` Chao Yu
2019-01-09 11:54 ` Gao Xiang
2019-01-09 11:54   ` Gao Xiang
2019-01-10  1:15   ` Chao Yu
2019-01-10  1:15     ` Chao Yu
2019-01-10  1:32 Chao Yu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.