diff mbox series

mm/shmem.c: make shmem_mapping() inline

Message ID 20201113135427.GA167783@rlk (mailing list archive)
State New, archived
Headers show
Series mm/shmem.c: make shmem_mapping() inline | expand

Commit Message

Hui Su Nov. 13, 2020, 1:54 p.m. UTC
inline the shmem_mapping(), and use shmem_mapping()
instead of 'inode->i_mapping->a_ops == &shmem_aops'
in shmem_evict_inode().

Signed-off-by: Hui Su <sh_def@163.com>
---
 include/linux/shmem_fs.h | 2 +-
 mm/shmem.c               | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

Comments

Pankaj Gupta Nov. 13, 2020, 3:14 p.m. UTC | #1
> inline the shmem_mapping(), and use shmem_mapping()
> instead of 'inode->i_mapping->a_ops == &shmem_aops'
> in shmem_evict_inode().
>
> Signed-off-by: Hui Su <sh_def@163.com>
> ---
>  include/linux/shmem_fs.h | 2 +-
>  mm/shmem.c               | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
> index a5a5d1d4d7b1..154a16fe7fd5 100644
> --- a/include/linux/shmem_fs.h
> +++ b/include/linux/shmem_fs.h
> @@ -67,7 +67,7 @@ extern unsigned long shmem_get_unmapped_area(struct file *, unsigned long addr,
>                 unsigned long len, unsigned long pgoff, unsigned long flags);
>  extern int shmem_lock(struct file *file, int lock, struct user_struct *user);
>  #ifdef CONFIG_SHMEM
> -extern bool shmem_mapping(struct address_space *mapping);
> +extern inline bool shmem_mapping(struct address_space *mapping);
>  #else
>  static inline bool shmem_mapping(struct address_space *mapping)
>  {
> diff --git a/mm/shmem.c b/mm/shmem.c
> index 537c137698f8..7395d8e8226a 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1152,7 +1152,7 @@ static void shmem_evict_inode(struct inode *inode)
>         struct shmem_inode_info *info = SHMEM_I(inode);
>         struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
>
> -       if (inode->i_mapping->a_ops == &shmem_aops) {
> +       if (shmem_mapping(inode->i_mapping)) {
>                 shmem_unacct_size(info->flags, inode->i_size);
>                 inode->i_size = 0;
>                 shmem_truncate_range(inode, 0, (loff_t)-1);
> @@ -2352,7 +2352,7 @@ static struct inode *shmem_get_inode(struct super_block *sb, const struct inode
>         return inode;
>  }
>
> -bool shmem_mapping(struct address_space *mapping)
> +inline bool shmem_mapping(struct address_space *mapping)
>  {
>         return mapping->a_ops == &shmem_aops;
>  }

Reviewed-by: Pankaj Gupta <pankaj.gupta@cloud.ionos.com>
kernel test robot Nov. 13, 2020, 4:54 p.m. UTC | #2
Hi Hui,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on mmotm/master]

url:    https://github.com/0day-ci/linux/commits/Hui-Su/mm-shmem-c-make-shmem_mapping-inline/20201113-215549
base:   git://git.cmpxchg.org/linux-mmotm.git master
config: arm-randconfig-s032-20201113 (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-107-gaf3512a6-dirty
        # https://github.com/0day-ci/linux/commit/0434762d5523a3d702cd589a7f8e3771fee7b3b2
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Hui-Su/mm-shmem-c-make-shmem_mapping-inline/20201113-215549
        git checkout 0434762d5523a3d702cd589a7f8e3771fee7b3b2
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arm 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


"sparse warnings: (new ones prefixed by >>)"
   mm/filemap.c: note: in included file:
>> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
>> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
>> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
--
   mm/truncate.c: note: in included file:
>> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
>> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
>> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
--
   mm/memfd.c: note: in included file:
>> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition

vim +66 include/linux/shmem_fs.h

    48	
    49	/*
    50	 * Functions in mm/shmem.c called directly from elsewhere:
    51	 */
    52	extern const struct fs_parameter_description shmem_fs_parameters;
    53	extern int shmem_init(void);
    54	extern int shmem_init_fs_context(struct fs_context *fc);
    55	extern struct file *shmem_file_setup(const char *name,
    56						loff_t size, unsigned long flags);
    57	extern struct file *shmem_kernel_file_setup(const char *name, loff_t size,
    58						    unsigned long flags);
    59	extern struct file *shmem_file_setup_with_mnt(struct vfsmount *mnt,
    60			const char *name, loff_t size, unsigned long flags);
    61	extern int shmem_zero_setup(struct vm_area_struct *);
    62	extern unsigned long shmem_get_unmapped_area(struct file *, unsigned long addr,
    63			unsigned long len, unsigned long pgoff, unsigned long flags);
    64	extern int shmem_lock(struct file *file, int lock, struct user_struct *user);
    65	#ifdef CONFIG_SHMEM
  > 66	extern inline bool shmem_mapping(struct address_space *mapping);
    67	#else
    68	static inline bool shmem_mapping(struct address_space *mapping)
    69	{
    70		return false;
    71	}
    72	#endif /* CONFIG_SHMEM */
    73	extern void shmem_unlock_mapping(struct address_space *mapping);
    74	extern struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
    75						pgoff_t index, gfp_t gfp_mask);
    76	extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end);
    77	extern int shmem_unuse(unsigned int type, bool frontswap,
    78			       unsigned long *fs_pages_to_unuse);
    79	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hui Su Nov. 14, 2020, 5:47 a.m. UTC | #3
On Sat, Nov 14, 2020 at 12:54:47AM +0800, kernel test robot wrote:
> Hi Hui,
> 
> Thank you for the patch! Perhaps something to improve:
> 
> [auto build test WARNING on mmotm/master]
> 
> url:    https://github.com/0day-ci/linux/commits/Hui-Su/mm-shmem-c-make-shmem_mapping-inline/20201113-215549
> base:   git://git.cmpxchg.org/linux-mmotm.git master
> config: arm-randconfig-s032-20201113 (attached as .config)
> compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
> reproduce:
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # apt-get install sparse
>         # sparse version: v0.6.3-107-gaf3512a6-dirty
>         # https://github.com/0day-ci/linux/commit/0434762d5523a3d702cd589a7f8e3771fee7b3b2
>         git remote add linux-review https://github.com/0day-ci/linux
>         git fetch --no-tags linux-review Hui-Su/mm-shmem-c-make-shmem_mapping-inline/20201113-215549
>         git checkout 0434762d5523a3d702cd589a7f8e3771fee7b3b2
>         # save the attached .config to linux build tree
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arm 
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> 
> 
> "sparse warnings: (new ones prefixed by >>)"
>    mm/filemap.c: note: in included file:
> >> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
> >> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
> >> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
> --
>    mm/truncate.c: note: in included file:
> >> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
> >> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
> >> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
> --
>    mm/memfd.c: note: in included file:
> >> include/linux/shmem_fs.h:66:33: sparse: sparse: marked inline, but without a definition
> 
> vim +66 include/linux/shmem_fs.h
> 
>     48	
>     49	/*
>     50	 * Functions in mm/shmem.c called directly from elsewhere:
>     51	 */
>     52	extern const struct fs_parameter_description shmem_fs_parameters;
>     53	extern int shmem_init(void);
>     54	extern int shmem_init_fs_context(struct fs_context *fc);
>     55	extern struct file *shmem_file_setup(const char *name,
>     56						loff_t size, unsigned long flags);
>     57	extern struct file *shmem_kernel_file_setup(const char *name, loff_t size,
>     58						    unsigned long flags);
>     59	extern struct file *shmem_file_setup_with_mnt(struct vfsmount *mnt,
>     60			const char *name, loff_t size, unsigned long flags);
>     61	extern int shmem_zero_setup(struct vm_area_struct *);
>     62	extern unsigned long shmem_get_unmapped_area(struct file *, unsigned long addr,
>     63			unsigned long len, unsigned long pgoff, unsigned long flags);
>     64	extern int shmem_lock(struct file *file, int lock, struct user_struct *user);
>     65	#ifdef CONFIG_SHMEM
>   > 66	extern inline bool shmem_mapping(struct address_space *mapping);
>     67	#else
>     68	static inline bool shmem_mapping(struct address_space *mapping)
>     69	{
>     70		return false;
>     71	}
>     72	#endif /* CONFIG_SHMEM */
>     73	extern void shmem_unlock_mapping(struct address_space *mapping);
>     74	extern struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
>     75						pgoff_t index, gfp_t gfp_mask);
>     76	extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end);
>     77	extern int shmem_unuse(unsigned int type, bool frontswap,
>     78			       unsigned long *fs_pages_to_unuse);
>     79	
> 
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Thanks for your test.

I will resend a PATCH V2 later.
diff mbox series

Patch

diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
index a5a5d1d4d7b1..154a16fe7fd5 100644
--- a/include/linux/shmem_fs.h
+++ b/include/linux/shmem_fs.h
@@ -67,7 +67,7 @@  extern unsigned long shmem_get_unmapped_area(struct file *, unsigned long addr,
 		unsigned long len, unsigned long pgoff, unsigned long flags);
 extern int shmem_lock(struct file *file, int lock, struct user_struct *user);
 #ifdef CONFIG_SHMEM
-extern bool shmem_mapping(struct address_space *mapping);
+extern inline bool shmem_mapping(struct address_space *mapping);
 #else
 static inline bool shmem_mapping(struct address_space *mapping)
 {
diff --git a/mm/shmem.c b/mm/shmem.c
index 537c137698f8..7395d8e8226a 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1152,7 +1152,7 @@  static void shmem_evict_inode(struct inode *inode)
 	struct shmem_inode_info *info = SHMEM_I(inode);
 	struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
 
-	if (inode->i_mapping->a_ops == &shmem_aops) {
+	if (shmem_mapping(inode->i_mapping)) {
 		shmem_unacct_size(info->flags, inode->i_size);
 		inode->i_size = 0;
 		shmem_truncate_range(inode, 0, (loff_t)-1);
@@ -2352,7 +2352,7 @@  static struct inode *shmem_get_inode(struct super_block *sb, const struct inode
 	return inode;
 }
 
-bool shmem_mapping(struct address_space *mapping)
+inline bool shmem_mapping(struct address_space *mapping)
 {
 	return mapping->a_ops == &shmem_aops;
 }