]> Git Repo - linux.git/commitdiff
erofs: kill prio and nofail of erofs_get_meta_page()
authorGao Xiang <[email protected]>
Wed, 4 Sep 2019 02:09:03 +0000 (10:09 +0800)
committerGreg Kroah-Hartman <[email protected]>
Thu, 5 Sep 2019 18:10:08 +0000 (20:10 +0200)
As Christoph pointed out [1],
"Why is there __erofs_get_meta_page with the two weird
booleans instead of a single erofs_get_meta_page that
gets and gfp_t for additional flags and an unsigned int
for additional bio op flags."

And since all callers can handle errors, let's kill
prio and nofail and erofs_get_inline_page() now.

[1] https://lore.kernel.org/r/20190830162812[email protected]/
Reported-by: Christoph Hellwig <[email protected]>
Signed-off-by: Gao Xiang <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
fs/erofs/data.c
fs/erofs/inode.c
fs/erofs/internal.h
fs/erofs/xattr.c
fs/erofs/zmap.c

index 0136ea117934d3c478f86ebcf69836dc9c888c3d..28eda71bb1a9411094d6c4b4bdb657079d6545a1 100644 (file)
@@ -51,25 +51,19 @@ static struct bio *erofs_grab_raw_bio(struct super_block *sb,
        return bio;
 }
 
-/* prio -- true is used for dir */
-struct page *__erofs_get_meta_page(struct super_block *sb,
-                                  erofs_blk_t blkaddr, bool prio, bool nofail)
+struct page *erofs_get_meta_page(struct super_block *sb, erofs_blk_t blkaddr)
 {
        struct inode *const bd_inode = sb->s_bdev->bd_inode;
        struct address_space *const mapping = bd_inode->i_mapping;
-       /* prefer retrying in the allocator to blindly looping below */
-       const gfp_t gfp = mapping_gfp_constraint(mapping, ~__GFP_FS) |
-               (nofail ? __GFP_NOFAIL : 0);
-       unsigned int io_retries = nofail ? EROFS_IO_MAX_RETRIES_NOFAIL : 0;
+       const gfp_t gfp = mapping_gfp_constraint(mapping, ~__GFP_FS);
        struct page *page;
        int err;
 
 repeat:
        page = find_or_create_page(mapping, blkaddr, gfp);
-       if (!page) {
-               DBG_BUGON(nofail);
+       if (!page)
                return ERR_PTR(-ENOMEM);
-       }
+
        DBG_BUGON(!PageLocked(page));
 
        if (!PageUptodate(page)) {
@@ -82,14 +76,11 @@ repeat:
                        goto err_out;
                }
 
-               __submit_bio(bio, REQ_OP_READ,
-                            REQ_META | (prio ? REQ_PRIO : 0));
-
+               __submit_bio(bio, REQ_OP_READ, REQ_META);
                lock_page(page);
 
                /* this page has been truncated by others */
                if (page->mapping != mapping) {
-unlock_repeat:
                        unlock_page(page);
                        put_page(page);
                        goto repeat;
@@ -97,10 +88,6 @@ unlock_repeat:
 
                /* more likely a read error */
                if (!PageUptodate(page)) {
-                       if (io_retries) {
-                               --io_retries;
-                               goto unlock_repeat;
-                       }
                        err = -EIO;
                        goto err_out;
                }
@@ -251,7 +238,7 @@ submit_bio_retry:
 
                        DBG_BUGON(map.m_plen > PAGE_SIZE);
 
-                       ipage = erofs_get_meta_page(inode->i_sb, blknr, 0);
+                       ipage = erofs_get_meta_page(inode->i_sb, blknr);
 
                        if (IS_ERR(ipage)) {
                                err = PTR_ERR(ipage);
index 770f3259c862e4e68d7ee30492d9aad65b1fe278..8d496adbeaeace5d793e100a3e68225b5db0c5fd 100644 (file)
@@ -182,7 +182,7 @@ static int fill_inode(struct inode *inode, int isdir)
        debugln("%s, reading inode nid %llu at %u of blkaddr %u",
                __func__, vi->nid, ofs, blkaddr);
 
-       page = erofs_get_meta_page(inode->i_sb, blkaddr, isdir);
+       page = erofs_get_meta_page(inode->i_sb, blkaddr);
 
        if (IS_ERR(page)) {
                errln("failed to get inode (nid: %llu) page, err %ld",
index 000ea92b36a3c825592552b5bf8988d2971dc069..90c62fb5f80dd195f5809b2c633d5681dc88f211 100644 (file)
@@ -258,8 +258,6 @@ static inline int erofs_wait_on_workgroup_freezed(struct erofs_workgroup *grp)
 #error erofs cannot be used in this platform
 #endif
 
-#define EROFS_IO_MAX_RETRIES_NOFAIL     5
-
 #define ROOT_NID(sb)           ((sb)->root_nid)
 
 #define erofs_blknr(addr)       ((addr) / EROFS_BLKSIZ)
@@ -418,24 +416,10 @@ static inline void __submit_bio(struct bio *bio, unsigned int op,
        submit_bio(bio);
 }
 
-struct page *__erofs_get_meta_page(struct super_block *sb, erofs_blk_t blkaddr,
-                                  bool prio, bool nofail);
-
-static inline struct page *erofs_get_meta_page(struct super_block *sb,
-       erofs_blk_t blkaddr, bool prio)
-{
-       return __erofs_get_meta_page(sb, blkaddr, prio, false);
-}
+struct page *erofs_get_meta_page(struct super_block *sb, erofs_blk_t blkaddr);
 
 int erofs_map_blocks(struct inode *, struct erofs_map_blocks *, int);
 
-static inline struct page *erofs_get_inline_page(struct inode *inode,
-                                                erofs_blk_t blkaddr)
-{
-       return erofs_get_meta_page(inode->i_sb, blkaddr,
-                                  S_ISDIR(inode->i_mode));
-}
-
 /* inode.c */
 static inline unsigned long erofs_inode_hash(erofs_nid_t nid)
 {
index d5b7fe0bee45dd2f75c4fad33d2265987f8db1aa..dd445c81c41ffeb750b1903e0ae9296846371e14 100644 (file)
@@ -87,7 +87,7 @@ static int init_inode_xattrs(struct inode *inode)
        it.blkaddr = erofs_blknr(iloc(sbi, vi->nid) + vi->inode_isize);
        it.ofs = erofs_blkoff(iloc(sbi, vi->nid) + vi->inode_isize);
 
-       it.page = erofs_get_inline_page(inode, it.blkaddr);
+       it.page = erofs_get_meta_page(sb, it.blkaddr);
        if (IS_ERR(it.page)) {
                ret = PTR_ERR(it.page);
                goto out_unlock;
@@ -117,8 +117,7 @@ static int init_inode_xattrs(struct inode *inode)
                        DBG_BUGON(it.ofs != EROFS_BLKSIZ);
                        xattr_iter_end(&it, atomic_map);
 
-                       it.page = erofs_get_meta_page(sb, ++it.blkaddr,
-                                                     S_ISDIR(inode->i_mode));
+                       it.page = erofs_get_meta_page(sb, ++it.blkaddr);
                        if (IS_ERR(it.page)) {
                                kfree(vi->xattr_shared_xattrs);
                                vi->xattr_shared_xattrs = NULL;
@@ -168,7 +167,7 @@ static inline int xattr_iter_fixup(struct xattr_iter *it)
 
        it->blkaddr += erofs_blknr(it->ofs);
 
-       it->page = erofs_get_meta_page(it->sb, it->blkaddr, false);
+       it->page = erofs_get_meta_page(it->sb, it->blkaddr);
        if (IS_ERR(it->page)) {
                int err = PTR_ERR(it->page);
 
@@ -199,7 +198,7 @@ static int inline_xattr_iter_begin(struct xattr_iter *it,
        it->blkaddr = erofs_blknr(iloc(sbi, vi->nid) + inline_xattr_ofs);
        it->ofs = erofs_blkoff(iloc(sbi, vi->nid) + inline_xattr_ofs);
 
-       it->page = erofs_get_inline_page(inode, it->blkaddr);
+       it->page = erofs_get_meta_page(inode->i_sb, it->blkaddr);
        if (IS_ERR(it->page))
                return PTR_ERR(it->page);
 
@@ -401,7 +400,7 @@ static int shared_getxattr(struct inode *inode, struct getxattr_iter *it)
                        if (i)
                                xattr_iter_end(&it->it, true);
 
-                       it->it.page = erofs_get_meta_page(sb, blkaddr, false);
+                       it->it.page = erofs_get_meta_page(sb, blkaddr);
                        if (IS_ERR(it->it.page))
                                return PTR_ERR(it->it.page);
 
@@ -623,7 +622,7 @@ static int shared_listxattr(struct listxattr_iter *it)
                        if (i)
                                xattr_iter_end(&it->it, true);
 
-                       it->it.page = erofs_get_meta_page(sb, blkaddr, false);
+                       it->it.page = erofs_get_meta_page(sb, blkaddr);
                        if (IS_ERR(it->it.page))
                                return PTR_ERR(it->it.page);
 
index 30a5171637d7256358b7c0e378bfc83e15407a89..9c141f1455082bd8e861bd8eeb987f531f9831dd 100644 (file)
@@ -50,7 +50,7 @@ static int fill_inode_lazy(struct inode *inode)
 
        pos = ALIGN(iloc(EROFS_SB(sb), vi->nid) + vi->inode_isize +
                    vi->xattr_isize, 8);
-       page = erofs_get_meta_page(sb, erofs_blknr(pos), false);
+       page = erofs_get_meta_page(sb, erofs_blknr(pos));
        if (IS_ERR(page)) {
                err = PTR_ERR(page);
                goto out_unlock;
@@ -127,7 +127,7 @@ static int z_erofs_reload_indexes(struct z_erofs_maprecorder *m,
                put_page(mpage);
        }
 
-       mpage = erofs_get_meta_page(sb, eblk, false);
+       mpage = erofs_get_meta_page(sb, eblk);
        if (IS_ERR(mpage)) {
                map->mpage = NULL;
                return PTR_ERR(mpage);
This page took 0.05738 seconds and 4 git commands to generate.