Re: [PATCH v10 1/9] dax: Introduce holder for dax_device

2022-02-02 Thread Christoph Hellwig
On Thu, Jan 27, 2022 at 08:40:50PM +0800, Shiyang Ruan wrote:
> +void dax_register_holder(struct dax_device *dax_dev, void *holder,
> + const struct dax_holder_operations *ops)
> +{
> + if (!dax_alive(dax_dev))
> + return;
> +
> + dax_dev->holder_data = holder;
> + dax_dev->holder_ops = ops;

This needs to return an error if there is another holder already.  And
some kind of locking to prevent concurrent registrations.

Also please add kerneldoc comments for the new exported functions.

> +void *dax_get_holder(struct dax_device *dax_dev)
> +{
> + if (!dax_alive(dax_dev))
> + return NULL;
> +
> + return dax_dev->holder_data;
> +}
> +EXPORT_SYMBOL_GPL(dax_get_holder);

get tends to imply getting a reference.  Maybe just dax_holder()?
That being said I can't see where we'd even want to use the holder
outside of this file.



Re: [PATCH v10 1/9] dax: Introduce holder for dax_device

2022-01-27 Thread kernel test robot
Hi Shiyang,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linux/master]
[also build test WARNING on linus/master v5.17-rc1 next-20220127]
[cannot apply to xfs-linux/for-next hnaz-mm/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:
https://github.com/0day-ci/linux/commits/Shiyang-Ruan/fsdax-introduce-fs-query-to-support-reflink/20220127-204239
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
2c271fe77d52a0555161926c232cd5bc07178b39
config: powerpc-allnoconfig 
(https://download.01.org/0day-ci/archive/20220128/[email protected]/config)
compiler: powerpc-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# 
https://github.com/0day-ci/linux/commit/57669ed05e93b37d995c5247eebe218ab2058c9a
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review 
Shiyang-Ruan/fsdax-introduce-fs-query-to-support-reflink/20220127-204239
git checkout 57669ed05e93b37d995c5247eebe218ab2058c9a
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross 
O=build_dir ARCH=powerpc SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot 

All warnings (new ones prefixed by >>):

   In file included from mm/filemap.c:15:
>> include/linux/dax.h:73:30: warning: 'struct dax_holder_operations' declared 
>> inside parameter list will not be visible outside of this definition or 
>> declaration
  73 | const struct dax_holder_operations *ops)
 |  ^


vim +73 include/linux/dax.h

48  
49  void dax_register_holder(struct dax_device *dax_dev, void *holder,
50  const struct dax_holder_operations *ops);
51  void dax_unregister_holder(struct dax_device *dax_dev);
52  void *dax_get_holder(struct dax_device *dax_dev);
53  void put_dax(struct dax_device *dax_dev);
54  void kill_dax(struct dax_device *dax_dev);
55  void dax_write_cache(struct dax_device *dax_dev, bool wc);
56  bool dax_write_cache_enabled(struct dax_device *dax_dev);
57  bool dax_synchronous(struct dax_device *dax_dev);
58  void set_dax_synchronous(struct dax_device *dax_dev);
59  /*
60   * Check if given mapping is supported by the file / underlying device.
61   */
62  static inline bool daxdev_mapping_supported(struct vm_area_struct *vma,
63   struct dax_device *dax_dev)
64  {
65  if (!(vma->vm_flags & VM_SYNC))
66  return true;
67  if (!IS_DAX(file_inode(vma->vm_file)))
68  return false;
69  return dax_synchronous(dax_dev);
70  }
71  #else
72  static inline void dax_register_holder(struct dax_device *dax_dev, void 
*holder,
  > 73  const struct dax_holder_operations *ops)
74  {
75  }
76  static inline void dax_unregister_holder(struct dax_device *dax_dev)
77  {
78  }
79  static inline void *dax_get_holder(struct dax_device *dax_dev)
80  {
81  return NULL;
82  }
83  static inline struct dax_device *alloc_dax(void *private,
84  const struct dax_operations *ops)
85  {
86  /*
87   * Callers should check IS_ENABLED(CONFIG_DAX) to know if this
88   * NULL is an error or expected.
89   */
90  return NULL;
91  }
92  static inline void put_dax(struct dax_device *dax_dev)
93  {
94  }
95  static inline void kill_dax(struct dax_device *dax_dev)
96  {
97  }
98  static inline void dax_write_cache(struct dax_device *dax_dev, bool wc)
99  {
   100  }
   101  static inline bool dax_write_cache_enabled(struct dax_device *dax_dev)
   102  {
   103  return false;
   104  }
   105  static inline bool dax_synchronous(struct dax_device *dax_dev)
   106  {
   107  return true;
   108  }
   109  static inline void set_dax_synchronous(struct dax_device *dax_dev)
   110  {
   111  }
   112  static inline bool daxdev_mapping_supported(struct vm_area_struct *vma,
   113  struct dax_device *dax_dev)
   114  {
   115  return !(vma->vm_flags & VM_SYNC);
   116  }
   117  #endif
   118  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]



Re: [PATCH v10 1/9] dax: Introduce holder for dax_device

2022-01-27 Thread kernel test robot
Hi Shiyang,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linux/master]
[also build test WARNING on linus/master v5.17-rc1 next-20220127]
[cannot apply to xfs-linux/for-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:
https://github.com/0day-ci/linux/commits/Shiyang-Ruan/fsdax-introduce-fs-query-to-support-reflink/20220127-204239
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
2c271fe77d52a0555161926c232cd5bc07178b39
config: arm-imx_v4_v5_defconfig 
(https://download.01.org/0day-ci/archive/20220128/[email protected]/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
f32dccb9a43b02ce4e540d6ba5dbbdb188f2dc7d)
reproduce (this is a W=1 build):
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# 
https://github.com/0day-ci/linux/commit/57669ed05e93b37d995c5247eebe218ab2058c9a
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review 
Shiyang-Ruan/fsdax-introduce-fs-query-to-support-reflink/20220127-204239
git checkout 57669ed05e93b37d995c5247eebe218ab2058c9a
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 
O=build_dir ARCH=arm SHELL=/bin/bash fs/iomap/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot 

All warnings (new ones prefixed by >>):

   In file included from fs/iomap/buffered-io.c:13:
>> include/linux/dax.h:73:16: warning: declaration of 'struct 
>> dax_holder_operations' will not be visible outside of this function 
>> [-Wvisibility]
   const struct dax_holder_operations *ops)
^
   1 warning generated.


vim +73 include/linux/dax.h

48  
49  void dax_register_holder(struct dax_device *dax_dev, void *holder,
50  const struct dax_holder_operations *ops);
51  void dax_unregister_holder(struct dax_device *dax_dev);
52  void *dax_get_holder(struct dax_device *dax_dev);
53  void put_dax(struct dax_device *dax_dev);
54  void kill_dax(struct dax_device *dax_dev);
55  void dax_write_cache(struct dax_device *dax_dev, bool wc);
56  bool dax_write_cache_enabled(struct dax_device *dax_dev);
57  bool dax_synchronous(struct dax_device *dax_dev);
58  void set_dax_synchronous(struct dax_device *dax_dev);
59  /*
60   * Check if given mapping is supported by the file / underlying device.
61   */
62  static inline bool daxdev_mapping_supported(struct vm_area_struct *vma,
63   struct dax_device *dax_dev)
64  {
65  if (!(vma->vm_flags & VM_SYNC))
66  return true;
67  if (!IS_DAX(file_inode(vma->vm_file)))
68  return false;
69  return dax_synchronous(dax_dev);
70  }
71  #else
72  static inline void dax_register_holder(struct dax_device *dax_dev, void 
*holder,
  > 73  const struct dax_holder_operations *ops)
74  {
75  }
76  static inline void dax_unregister_holder(struct dax_device *dax_dev)
77  {
78  }
79  static inline void *dax_get_holder(struct dax_device *dax_dev)
80  {
81  return NULL;
82  }
83  static inline struct dax_device *alloc_dax(void *private,
84  const struct dax_operations *ops)
85  {
86  /*
87   * Callers should check IS_ENABLED(CONFIG_DAX) to know if this
88   * NULL is an error or expected.
89   */
90  return NULL;
91  }
92  static inline void put_dax(struct dax_device *dax_dev)
93  {
94  }
95  static inline void kill_dax(struct dax_device *dax_dev)
96  {
97  }
98  static inline void dax_write_cache(struct dax_device *dax_dev, bool wc)
99  {
   100  }
   101  static inline bool dax_write_cache_enabled(struct dax_device *dax_dev)
   102  {
   103  return false;
   104  }
   105  static inline bool dax_synchronous(struct dax_device *dax_dev)
   106  {
   107  return true;
   108  }
   109  static inline void set_dax_synchronous(struct dax_device *dax_dev)
   110  {
   111  }
   112  static inline bool daxdev_mapping_supported(struct vm_area_struct *vma,
   113  struct dax_device *dax_dev)
   114  {
   115  return !(vma->vm_flags & VM_SYNC);
   116  }
   117  #endif
   118  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.or