30 Dec, 2020

1 commit

  • [ Upstream commit d8b3df8b1048405e73558b88cba2adf29490d468 ]

    Surprisingly, `block' in sector_t indicates the number of
    i_blkbits-sized blocks rather than sectors for bmap.

    In addition, considering buffer_head limits mapped size to 32-bits,
    should avoid using generic_block_bmap.

    Link: https://lore.kernel.org/r/20201209115740.18802-1-huangjianan@oppo.com
    Fixes: 9da681e017a3 ("staging: erofs: support bmap")
    Reviewed-by: Chao Yu
    Reviewed-by: Gao Xiang
    Signed-off-by: Huang Jianan
    Signed-off-by: Guo Weichao
    [ Gao Xiang: slightly update the commit message description. ]
    Signed-off-by: Gao Xiang
    Signed-off-by: Sasha Levin

    Huang Jianan
     

19 Sep, 2020

1 commit


07 Aug, 2020

1 commit

  • Pull erofs updates from Gao Xiang:
    "This cycle mainly addresses an issue out of some extended inode with
    designated location, which are not generated by current mkfs but need
    to handled at runtime anyway. The others are quite trivial ones.

    - use HTTPS links instead of insecure HTTP ones;

    - fix crossing page boundary on specific extended inodes;

    - remove useless WQ_CPU_INTENSIVE flag for unbound wq;

    - minor cleanup"

    * tag 'erofs-for-5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs:
    erofs: remove WQ_CPU_INTENSIVE flag from unbound wq's
    erofs: fold in used-once helper erofs_workgroup_unfreeze_final()
    erofs: fix extended inode could cross boundary
    erofs: Replace HTTP links with HTTPS ones

    Linus Torvalds
     

03 Aug, 2020

1 commit

  • Rationale:
    Reduces attack surface on kernel devs opening the links for MITM
    as HTTPS traffic is much harder to manipulate.

    Deterministic algorithm:
    For each file:
    If not .svg:
    For each line:
    If doesn't contain `\bxmlns\b`:
    For each link, `\bhttp://[^# \t\r\n]*(?:\w|/)`:
    If neither `\bgnu\.org/license`, nor `\bmozilla\.org/MPL\b`:
    If both the HTTP and HTTPS versions
    return 200 OK and serve the same content:
    Replace HTTP with HTTPS.

    Reviewed-by: Gao Xiang
    Reviewed-by: Chao Yu
    Signed-off-by: Alexander A. Klimov
    Link: https://lore.kernel.org/r/20200713130944.34419-1-grandmaster@al2klimov.de
    Signed-off-by: Gao Xiang

    Alexander A. Klimov
     

17 Jul, 2020

1 commit

  • Using uninitialized_var() is dangerous as it papers over real bugs[1]
    (or can in the future), and suppresses unrelated compiler warnings
    (e.g. "unused variable"). If the compiler thinks it is uninitialized,
    either simply initialize the variable or make compiler changes.

    In preparation for removing[2] the[3] macro[4], remove all remaining
    needless uses with the following script:

    git grep '\buninitialized_var\b' | cut -d: -f1 | sort -u | \
    xargs perl -pi -e \
    's/\buninitialized_var\(([^\)]+)\)/\1/g;
    s:\s*/\* (GCC be quiet|to make compiler happy) \*/$::g;'

    drivers/video/fbdev/riva/riva_hw.c was manually tweaked to avoid
    pathological white-space.

    No outstanding warnings were found building allmodconfig with GCC 9.3.0
    for x86_64, i386, arm64, arm, powerpc, powerpc64le, s390x, mips, sparc64,
    alpha, and m68k.

    [1] https://lore.kernel.org/lkml/20200603174714.192027-1-glider@google.com/
    [2] https://lore.kernel.org/lkml/CA+55aFw+Vbj0i=1TGqCR5vQkCzWJ0QxK6CernOU6eedsudAixw@mail.gmail.com/
    [3] https://lore.kernel.org/lkml/CA+55aFwgbgqhbp1fkxvRKEpzyR5J8n1vKT1VZdz9knmPuXhOeg@mail.gmail.com/
    [4] https://lore.kernel.org/lkml/CA+55aFz2500WfbKXAx8s67wrm9=yVJu65TpLgN_ybYNv0VEOKA@mail.gmail.com/

    Reviewed-by: Leon Romanovsky # drivers/infiniband and mlx4/mlx5
    Acked-by: Jason Gunthorpe # IB
    Acked-by: Kalle Valo # wireless drivers
    Reviewed-by: Chao Yu # erofs
    Signed-off-by: Kees Cook

    Kees Cook
     

03 Jun, 2020

2 commits

  • Pull erofs updates from Gao Xiang:
    "The most interesting part is the new mount api conversion, which is
    actually a old patch already pending for several cycles. And the
    others are recent trivial cleanups here.

    Summary:

    - Convert to use the new mount apis

    - Some random cleanup patches"

    * tag 'erofs-for-5.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs:
    erofs: suppress false positive last_block warning
    erofs: convert to use the new mount fs_context api
    erofs: code cleanup by removing ifdef macro surrounding

    Linus Torvalds
     
  • Use the new readahead operation in erofs

    Signed-off-by: Matthew Wilcox (Oracle)
    Signed-off-by: Andrew Morton
    Reviewed-by: William Kucharski
    Reviewed-by: Chao Yu
    Acked-by: Gao Xiang
    Cc: Christoph Hellwig
    Cc: Cong Wang
    Cc: Darrick J. Wong
    Cc: Dave Chinner
    Cc: Eric Biggers
    Cc: Jaegeuk Kim
    Cc: John Hubbard
    Cc: Joseph Qi
    Cc: Junxiao Bi
    Cc: Michal Hocko
    Cc: Zi Yan
    Cc: Johannes Thumshirn
    Cc: Miklos Szeredi
    Link: http://lkml.kernel.org/r/20200414150233.24495-19-willy@infradead.org
    Signed-off-by: Linus Torvalds

    Matthew Wilcox (Oracle)
     

29 May, 2020

1 commit

  • As Andrew mentioned, some rare specific gcc versions could report
    last_block uninitialized warning. Actually last_block doesn't need
    to be uninitialized first from its implementation due to bio == NULL
    condition. After a bio is allocated, last_block will be assigned
    then.

    The detailed analysis is in this thread [1]. So let's silence those
    confusing gccs simply.

    [1] https://lore.kernel.org/r/20200421072839.GA13867@hsiangkao-HP-ZHAN-66-Pro-G1

    Cc: Andrew Morton
    Reviewed-by: Chao Yu
    Link: https://lore.kernel.org/r/20200528084844.23359-1-hsiangkao@redhat.com
    Signed-off-by: Gao Xiang

    Gao Xiang
     

01 Oct, 2019

1 commit

  • After doing more drop_caches stress test on
    our products, I found the mistake introduced by
    a very recent cleanup [1].

    The current rule is that "erofs_get_meta_page"
    should be returned with page locked (although
    it's mostly unnecessary for read-only fs after
    pages are PG_uptodate), but a fix should be
    done for this.

    [1] https://lore.kernel.org/r/20190904020912.63925-26-gaoxiang25@huawei.com
    Fixes: 618f40ea026b ("erofs: use read_cache_page_gfp for erofs_get_meta_page")
    Reviewed-by: Chao Yu
    Link: https://lore.kernel.org/r/20190921184355.149928-1-gaoxiang25@huawei.com
    Signed-off-by: Gao Xiang

    Gao Xiang
     

06 Sep, 2019

9 commits

  • As Christoph said [1], "I'd much prefer to just use
    read_cache_page_gfp, and live with the fact that this
    allocates bufferheads behind you for now. I'll try to
    speed up my attempts to get rid of the buffer heads on
    the block device mapping instead. "

    This simplifies the code a lot and a minor thing is
    "no REQ_META (e.g. for blktrace) on metadata at all..."

    [1] https://lore.kernel.org/r/20190903153704.GA2201@infradead.org/
    Reported-by: Christoph Hellwig
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190904020912.63925-26-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     
  • Add prefix "erofs_" to these functions and print
    sb->s_id as a prefix to erofs_{err, info} so that
    the user knows which file system is affected.

    Reported-by: Christoph Hellwig
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190904020912.63925-23-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     
  • As Christoph suggested [1], "Please just use plain kmalloc
    everywhere and let the normal kernel error injection code
    take care of injeting any errors."

    [1] https://lore.kernel.org/r/20190829102426.GE20598@infradead.org/
    Reported-by: Christoph Hellwig
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190904020912.63925-20-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     
  • Add erofs_ prefix to free_inode, alloc_inode, ...

    Reported-by: Christoph Hellwig
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190904020912.63925-19-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     
  • As Christoph pointed out [1], "
    Why is there __submit_bio which really just obsfucates
    what is going on? Also why is __submit_bio using
    bio_set_op_attrs instead of opencode it as the comment
    right next to it asks you to? "

    Let's use submit_bio directly instead.

    [1] https://lore.kernel.org/r/20190830162812.GA10694@infradead.org/
    Reported-by: Christoph Hellwig
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190904020912.63925-18-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     
  • 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.GA10694@infradead.org/
    Reported-by: Christoph Hellwig
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190904020912.63925-17-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     
  • As Christoph pointed out [1], "erofs_grab_bio tries to
    handle a bio_alloc failure, except that the function will
    not actually fail due the mempool backing it."

    Sorry about useless code, fix it now and
    localize erofs_grab_bio [2].

    [1] https://lore.kernel.org/r/20190830162812.GA10694@infradead.org/
    [2] https://lore.kernel.org/r/20190902122016.GL15931@infradead.org/
    Reported-by: Christoph Hellwig
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190904020912.63925-16-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     
  • As Christoph suggested [1], "Why is this called vnode instead
    of inode? That seems like a rather odd naming for a Linux
    file system."

    [1] https://lore.kernel.org/r/20190829101545.GC20598@infradead.org/
    Reported-by: Christoph Hellwig
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190904020912.63925-10-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     
  • updates inode naming
    - kill is_inode_layout_compression [1]
    - kill magic underscores [2] [3]
    - better naming for datamode & data_mapping_mode [3]
    - better naming erofs_inode_{compact, extended} [4]

    [1] https://lore.kernel.org/r/20190829102426.GE20598@infradead.org/
    [2] https://lore.kernel.org/r/20190829102426.GE20598@infradead.org/
    [3] https://lore.kernel.org/r/20190902122627.GN15931@infradead.org/
    [4] https://lore.kernel.org/r/20190902125438.GA17750@infradead.org/
    Reported-by: Christoph Hellwig
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190904020912.63925-8-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     

30 Aug, 2019

2 commits

  • As Joe Perches suggested [1],
    err = bio_add_page(bio, page, PAGE_SIZE, 0);
    - if (unlikely(err != PAGE_SIZE)) {
    + if (err != PAGE_SIZE) {
    err = -EFAULT;
    goto err_out;
    }

    The initial assignment to err is odd as it's not
    actually an error value -E but a int size
    from a unsigned int len.

    Here the return is either 0 or PAGE_SIZE.

    This would be more legible to me as:

    if (bio_add_page(bio, page, PAGE_SIZE, 0) != PAGE_SIZE) {
    err = -EFAULT;
    goto err_out;
    }

    [1] https://lore.kernel.org/r/74c4784319b40deabfbaea92468f7e3ef44f1c96.camel@perches.com/
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190829171741.225219-1-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     
  • As Dan Carpenter suggested [1], I have to remove
    all erofs likely/unlikely annotations.

    [1] https://lore.kernel.org/linux-fsdevel/20190829154346.GK23584@kadam/
    Reported-by: Dan Carpenter
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190829163827.203274-1-gaoxiang25@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang
     

24 Aug, 2019

1 commit

  • EROFS filesystem has been merged into linux-staging for a year.

    EROFS is designed to be a better solution of saving extra storage
    space with guaranteed end-to-end performance for read-only files
    with the help of reduced metadata, fixed-sized output compression
    and decompression inplace technologies.

    In the past year, EROFS was greatly improved by many people as
    a staging driver, self-tested, betaed by a large number of our
    internal users, successfully applied to almost all in-service
    HUAWEI smartphones as the part of EMUI 9.1 and proven to be stable
    enough to be moved out of staging.

    EROFS is a self-contained filesystem driver. Although there are
    still some TODOs to be more generic, we have a dedicated team
    actively keeping on working on EROFS in order to make it better
    with the evolution of Linux kernel as the other in-kernel filesystems.

    As Pavel suggested, it's better to do as one commit since git
    can do moves and all histories will be saved in this way.

    Let's promote it from staging and enhance it more actively as
    a "real" part of kernel for more wider scenarios!

    Cc: Greg Kroah-Hartman
    Cc: Alexander Viro
    Cc: Andrew Morton
    Cc: Stephen Rothwell
    Cc: Theodore Ts'o
    Cc: Pavel Machek
    Cc: David Sterba
    Cc: Amir Goldstein
    Cc: Christoph Hellwig
    Cc: Darrick J . Wong
    Cc: Dave Chinner
    Cc: Jaegeuk Kim
    Cc: Jan Kara
    Cc: Richard Weinberger
    Cc: Linus Torvalds
    Cc: Chao Yu
    Cc: Miao Xie
    Cc: Li Guifu
    Cc: Fang Wei
    Signed-off-by: Gao Xiang
    Link: https://lore.kernel.org/r/20190822213659.5501-1-hsiangkao@aol.com
    Signed-off-by: Greg Kroah-Hartman

    Gao Xiang