All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kelvin Zhang via Linux-erofs <linux-erofs@lists.ozlabs.org>
To: Gao Xiang <xiang@kernel.org>
Cc: linux-erofs@lists.ozlabs.org
Subject: Re: [PATCH] erofs-utils: make liberofs more C++ friendly
Date: Wed, 1 Dec 2021 09:58:09 -0800	[thread overview]
Message-ID: <CAOSmRzgu8_mU8ysONL7G=fbg+Gc4901S6pBOVnq0_z9RryZtSA@mail.gmail.com> (raw)
In-Reply-To: <20211201135315.3732-1-xiang@kernel.org>

[-- Attachment #1: Type: text/plain, Size: 17328 bytes --]

This patch works for me, thanks!

On Wed, Dec 1, 2021 at 5:53 AM Gao Xiang <xiang@kernel.org> wrote:

> From: Kelvin Zhang <zhangkelvin@google.com>
>
> 1. Add extern "C" wrappers to headers, so that they can be included
>    from C++
> 2. Add const keywords to certain pointer type params
>
> Signed-off-by: Kelvin Zhang <zhangkelvin@google.com>
> Signed-off-by: Gao Xiang <xiang@kernel.org>
> ---
> v3:
> https://lore.kernel.org/r/20211130055604.2876828-2-zhangkelvin@google.com/
> Hi Kelvin,
>
> Please help check if this patch meets your requirement.
> And I've applied to experimental branch.
>
> Thanks,
> Gao Xiang
>
>  include/erofs/blobchunk.h      |  9 +++++++++
>  include/erofs/block_list.h     | 10 ++++++++++
>  include/erofs/cache.h          |  9 +++++++++
>  include/erofs/compress.h       |  9 +++++++++
>  include/erofs/compress_hints.h | 10 ++++++++++
>  include/erofs/config.h         | 20 +++++++++-----------
>  include/erofs/decompress.h     |  9 +++++++++
>  include/erofs/defs.h           | 17 ++++++++++++++++-
>  include/erofs/err.h            |  9 +++++++++
>  include/erofs/exclude.h        | 10 ++++++++++
>  include/erofs/flex-array.h     |  9 +++++++++
>  include/erofs/hashmap.h        |  9 +++++++++
>  include/erofs/hashtable.h      |  9 +++++++++
>  include/erofs/inode.h          |  9 +++++++++
>  include/erofs/internal.h       |  9 +++++++++
>  include/erofs/io.h             | 11 +++++++++++
>  include/erofs/list.h           | 10 ++++++++++
>  include/erofs/print.h          |  9 +++++++++
>  include/erofs/trace.h          |  9 +++++++++
>  include/erofs/xattr.h          |  9 +++++++++
>  lib/Makefile.am                |  3 ++-
>  lib/config.c                   |  1 +
>  lib/inode.c                    |  1 +
>  lib/liberofs_private.h         | 13 +++++++++++++
>  lib/xattr.c                    |  1 +
>  25 files changed, 211 insertions(+), 13 deletions(-)
>  create mode 100644 lib/liberofs_private.h
>
> diff --git a/include/erofs/blobchunk.h b/include/erofs/blobchunk.h
> index 59a47013017f..4e1ae79938d6 100644
> --- a/include/erofs/blobchunk.h
> +++ b/include/erofs/blobchunk.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_BLOBCHUNK_H
>  #define __EROFS_BLOBCHUNK_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "erofs/internal.h"
>
>  int erofs_blob_write_chunk_indexes(struct erofs_inode *inode, erofs_off_t
> off);
> @@ -16,4 +21,8 @@ void erofs_blob_exit(void);
>  int erofs_blob_init(const char *blobfile_path);
>  int erofs_generate_devtable(void);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/block_list.h b/include/erofs/block_list.h
> index 40df2282bf0c..ca8053ed28b7 100644
> --- a/include/erofs/block_list.h
> +++ b/include/erofs/block_list.h
> @@ -6,6 +6,11 @@
>  #ifndef __EROFS_BLOCK_LIST_H
>  #define __EROFS_BLOCK_LIST_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "internal.h"
>
>  #ifdef WITH_ANDROID
> @@ -29,4 +34,9 @@ erofs_droid_blocklist_write_extent(struct erofs_inode
> *inode,
>                                    erofs_blk_t blk_start, erofs_blk_t
> nblocks,
>                                    bool first_extent, bool last_extent) {}
>  #endif
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/cache.h b/include/erofs/cache.h
> index 87cd51d9473b..7957ee5d0b73 100644
> --- a/include/erofs/cache.h
> +++ b/include/erofs/cache.h
> @@ -8,6 +8,11 @@
>  #ifndef __EROFS_CACHE_H
>  #define __EROFS_CACHE_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "internal.h"
>
>  struct erofs_buffer_head;
> @@ -104,4 +109,8 @@ bool erofs_bflush(struct erofs_buffer_block *bb);
>
>  void erofs_bdrop(struct erofs_buffer_head *bh, bool tryrevoke);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/compress.h b/include/erofs/compress.h
> index 4434aaa75b54..fdbf5ff66558 100644
> --- a/include/erofs/compress.h
> +++ b/include/erofs/compress.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_COMPRESS_H
>  #define __EROFS_COMPRESS_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "internal.h"
>
>  /* workaround for an upstream lz4 compression issue, which can crash us */
> @@ -21,4 +26,8 @@ int z_erofs_compress_exit(void);
>
>  const char *z_erofs_list_available_compressors(unsigned int i);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/compress_hints.h
> b/include/erofs/compress_hints.h
> index a5772c72b1c4..43f80e117816 100644
> --- a/include/erofs/compress_hints.h
> +++ b/include/erofs/compress_hints.h
> @@ -6,6 +6,11 @@
>  #ifndef __EROFS_COMPRESS_HINTS_H
>  #define __EROFS_COMPRESS_HINTS_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "erofs/internal.h"
>  #include <sys/types.h>
>  #include <regex.h>
> @@ -20,4 +25,9 @@ struct erofs_compress_hints {
>  bool z_erofs_apply_compress_hints(struct erofs_inode *inode);
>  void erofs_cleanup_compress_hints(void);
>  int erofs_load_compress_hints(void);
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/config.h b/include/erofs/config.h
> index 2040dc6ff154..cb064b651835 100644
> --- a/include/erofs/config.h
> +++ b/include/erofs/config.h
> @@ -7,20 +7,14 @@
>  #ifndef __EROFS_CONFIG_H
>  #define __EROFS_CONFIG_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "defs.h"
>  #include "err.h"
>
> -#ifdef HAVE_LIBSELINUX
> -#include <selinux/selinux.h>
> -#include <selinux/label.h>
> -#endif
> -
> -#ifdef WITH_ANDROID
> -#include <selinux/android.h>
> -#include <private/android_filesystem_config.h>
> -#include <private/canned_fs_config.h>
> -#include <private/fs_config.h>
> -#endif
>
>  enum {
>         FORCE_INODE_COMPACT = 1,
> @@ -96,4 +90,8 @@ static inline int erofs_selabel_open(const char
> *file_contexts)
>  }
>  #endif
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/decompress.h b/include/erofs/decompress.h
> index 3d0d9633865d..e649c80cf3a7 100644
> --- a/include/erofs/decompress.h
> +++ b/include/erofs/decompress.h
> @@ -6,6 +6,11 @@
>  #ifndef __EROFS_DECOMPRESS_H
>  #define __EROFS_DECOMPRESS_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "internal.h"
>
>  struct z_erofs_decompress_req {
> @@ -25,4 +30,8 @@ struct z_erofs_decompress_req {
>
>  int z_erofs_decompress(struct z_erofs_decompress_req *rq);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/defs.h b/include/erofs/defs.h
> index 6398cbb2aa4d..4db237f4dfb0 100644
> --- a/include/erofs/defs.h
> +++ b/include/erofs/defs.h
> @@ -8,6 +8,11 @@
>  #ifndef __EROFS_DEFS_H
>  #define __EROFS_DEFS_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include <stddef.h>
>  #include <stdint.h>
>  #include <assert.h>
> @@ -82,7 +87,9 @@ typedef int64_t         s64;
>  #endif
>  #endif
>
> -#ifndef __OPTIMIZE__
> +#ifdef __cplusplus
> +#define BUILD_BUG_ON(condition) static_assert(!(condition))
> +#elif !defined(__OPTIMIZE__)
>  #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2 *
> !!(condition)]))
>  #else
>  #define BUILD_BUG_ON(condition) assert(!(condition))
> @@ -110,6 +117,8 @@ typedef int64_t         s64;
>  }                                                      \
>  )
>
> +/* Can easily conflict with C++'s std::min */
> +#ifndef __cplusplus
>  #define min(x, y) ({                           \
>         typeof(x) _min1 = (x);                  \
>         typeof(y) _min2 = (y);                  \
> @@ -121,6 +130,7 @@ typedef int64_t         s64;
>         typeof(y) _max2 = (y);                  \
>         (void) (&_max1 == &_max2);              \
>         _max1 > _max2 ? _max1 : _max2; })
> +#endif
>
>  /*
>   * ..and if you can't take the strict types, you can specify one yourself.
> @@ -308,4 +318,9 @@ unsigned long __roundup_pow_of_two(unsigned long n)
>  #define stat64         stat
>  #define lstat64                lstat
>  #endif
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/err.h b/include/erofs/err.h
> index a33bdd137879..18f152aa4608 100644
> --- a/include/erofs/err.h
> +++ b/include/erofs/err.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_ERR_H
>  #define __EROFS_ERR_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include <errno.h>
>
>  #define MAX_ERRNO (4095)
> @@ -28,4 +33,8 @@ static inline long PTR_ERR(const void *ptr)
>         return (long) ptr;
>  }
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/exclude.h b/include/erofs/exclude.h
> index 6930f2b43a47..599f01895807 100644
> --- a/include/erofs/exclude.h
> +++ b/include/erofs/exclude.h
> @@ -5,6 +5,11 @@
>  #ifndef __EROFS_EXCLUDE_H
>  #define __EROFS_EXCLUDE_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include <sys/types.h>
>  #include <regex.h>
>
> @@ -21,4 +26,9 @@ void erofs_cleanup_exclude_rules(void);
>  int erofs_parse_exclude_path(const char *args, bool is_regex);
>  struct erofs_exclude_rule *erofs_is_exclude_path(const char *dir,
>                                                  const char *name);
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/flex-array.h b/include/erofs/flex-array.h
> index 59168d05ee5a..9b1642f77740 100644
> --- a/include/erofs/flex-array.h
> +++ b/include/erofs/flex-array.h
> @@ -2,6 +2,11 @@
>  #ifndef __EROFS_FLEX_ARRAY_H
>  #define __EROFS_FLEX_ARRAY_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <limits.h>
> @@ -144,4 +149,8 @@ static inline size_t st_add(size_t a, size_t b)
>  #define FLEXPTR_ALLOC_STR(x, ptrname, str) \
>         FLEXPTR_ALLOC_MEM((x), ptrname, (str), strlen(str))
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/hashmap.h b/include/erofs/hashmap.h
> index 024a14e497d4..3d3857890077 100644
> --- a/include/erofs/hashmap.h
> +++ b/include/erofs/hashmap.h
> @@ -2,6 +2,11 @@
>  #ifndef __EROFS_HASHMAP_H
>  #define __EROFS_HASHMAP_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  /* Copied from https://github.com/git/git.git */
>  #include <stdio.h>
>  #include <stdlib.h>
> @@ -100,4 +105,8 @@ static inline const char *strintern(const char *string)
>         return memintern(string, strlen(string));
>  }
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/hashtable.h b/include/erofs/hashtable.h
> index 90eb84ee8598..3c4dfc128eaa 100644
> --- a/include/erofs/hashtable.h
> +++ b/include/erofs/hashtable.h
> @@ -5,6 +5,11 @@
>  #ifndef __EROFS_HASHTABLE_H
>  #define __EROFS_HASHTABLE_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  /*
>   * Fast hashing routine for ints,  longs and pointers.
>   * (C) 2002 Nadia Yvette Chambers, IBM
> @@ -380,4 +385,8 @@ static inline void hash_del(struct hlist_node *node)
>  #define hash_for_each_possible(name, obj, member, key)                 \
>         hlist_for_each_entry(obj, &name[hash_min(key, HASH_BITS(name))],
> member)
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/inode.h b/include/erofs/inode.h
> index d5343c242aee..e23d65f42249 100644
> --- a/include/erofs/inode.h
> +++ b/include/erofs/inode.h
> @@ -8,6 +8,11 @@
>  #ifndef __EROFS_INODE_H
>  #define __EROFS_INODE_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "erofs/internal.h"
>
>  unsigned char erofs_mode_to_ftype(umode_t mode);
> @@ -17,4 +22,8 @@ erofs_nid_t erofs_lookupnid(struct erofs_inode *inode);
>  struct erofs_inode *erofs_mkfs_build_tree_from_path(struct erofs_inode
> *parent,
>                                                     const char *path);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/internal.h b/include/erofs/internal.h
> index 666d1f2df466..a68de325da39 100644
> --- a/include/erofs/internal.h
> +++ b/include/erofs/internal.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_INTERNAL_H
>  #define __EROFS_INTERNAL_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "list.h"
>  #include "err.h"
>
> @@ -331,4 +336,8 @@ static inline u32 erofs_crc32c(u32 crc, const u8 *in,
> size_t len)
>         return crc;
>  }
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/io.h b/include/erofs/io.h
> index 10a3681882e1..6f51e06ee7c2 100644
> --- a/include/erofs/io.h
> +++ b/include/erofs/io.h
> @@ -7,7 +7,14 @@
>  #ifndef __EROFS_IO_H
>  #define __EROFS_IO_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
> +#ifndef _GNU_SOURCE
>  #define _GNU_SOURCE
> +#endif
>  #include <unistd.h>
>  #include "internal.h"
>
> @@ -47,4 +54,8 @@ static inline int blk_read(int device_id, void *buf,
>                          blknr_to_addr(nblocks));
>  }
>
> +#ifdef __cplusplus
> +}
>  #endif
> +
> +#endif // EROFS_IO_H_
> diff --git a/include/erofs/list.h b/include/erofs/list.h
> index d2bc704ae64b..fd5358d6bd19 100644
> --- a/include/erofs/list.h
> +++ b/include/erofs/list.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_LIST_HEAD_H
>  #define __EROFS_LIST_HEAD_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "defs.h"
>
>  struct list_head {
> @@ -105,4 +110,9 @@ static inline int list_empty(struct list_head *head)
>              &pos->member != (head);
>      \
>              pos = n, n = list_next_entry(n, member))
>
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/print.h b/include/erofs/print.h
> index 91f864bacd55..2213d1d58de5 100644
> --- a/include/erofs/print.h
> +++ b/include/erofs/print.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_PRINT_H
>  #define __EROFS_PRINT_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "config.h"
>  #include <stdio.h>
>
> @@ -72,4 +77,8 @@ enum {
>
>  #define erofs_dump(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/trace.h b/include/erofs/trace.h
> index d70d23674c1a..893e16c5d6c1 100644
> --- a/include/erofs/trace.h
> +++ b/include/erofs/trace.h
> @@ -5,7 +5,16 @@
>  #ifndef __EROFS_TRACE_H
>  #define __EROFS_TRACE_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #define trace_erofs_map_blocks_flatmode_enter(inode, map, flags) ((void)0)
>  #define trace_erofs_map_blocks_flatmode_exit(inode, map, flags, ret)
> ((void)0)
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/include/erofs/xattr.h b/include/erofs/xattr.h
> index f0c4c268fecc..8e6881247f42 100644
> --- a/include/erofs/xattr.h
> +++ b/include/erofs/xattr.h
> @@ -7,6 +7,11 @@
>  #ifndef __EROFS_XATTR_H
>  #define __EROFS_XATTR_H
>
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
>  #include "internal.h"
>
>  #define EROFS_INODE_XATTR_ICOUNT(_size)        ({\
> @@ -44,4 +49,8 @@ int erofs_prepare_xattr_ibody(struct erofs_inode *inode);
>  char *erofs_export_xattr_ibody(struct list_head *ixattrs, unsigned int
> size);
>  int erofs_build_shared_xattrs_from_path(const char *path);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif
> diff --git a/lib/Makefile.am b/lib/Makefile.am
> index 395c712811b8..67ba798672b9 100644
> --- a/lib/Makefile.am
> +++ b/lib/Makefile.am
> @@ -21,7 +21,8 @@ noinst_HEADERS = $(top_srcdir)/include/erofs_fs.h \
>        $(top_srcdir)/include/erofs/print.h \
>        $(top_srcdir)/include/erofs/trace.h \
>        $(top_srcdir)/include/erofs/xattr.h \
> -      $(top_srcdir)/include/erofs/compress_hints.h
> +      $(top_srcdir)/include/erofs/compress_hints.h \
> +      $(top_srcdir)/lib/liberofs_private.h
>
>  noinst_HEADERS += compressor.h
>  liberofs_la_SOURCES = config.c io.c cache.c super.c inode.c xattr.c
> exclude.c \
> diff --git a/lib/config.c b/lib/config.c
> index 363dcc5a0525..f1c8edfda2dc 100644
> --- a/lib/config.c
> +++ b/lib/config.c
> @@ -8,6 +8,7 @@
>  #include <stdlib.h>
>  #include "erofs/print.h"
>  #include "erofs/internal.h"
> +#include "liberofs_private.h"
>
>  struct erofs_configure cfg;
>  struct erofs_sb_info sbi;
> diff --git a/lib/inode.c b/lib/inode.c
> index 2fa74e2686c9..461c7978dbdf 100644
> --- a/lib/inode.c
> +++ b/lib/inode.c
> @@ -25,6 +25,7 @@
>  #include "erofs/block_list.h"
>  #include "erofs/compress_hints.h"
>  #include "erofs/blobchunk.h"
> +#include "liberofs_private.h"
>
>  #define S_SHIFT                 12
>  static unsigned char erofs_ftype_by_mode[S_IFMT >> S_SHIFT] = {
> diff --git a/lib/liberofs_private.h b/lib/liberofs_private.h
> new file mode 100644
> index 000000000000..c2312e8e7a31
> --- /dev/null
> +++ b/lib/liberofs_private.h
> @@ -0,0 +1,13 @@
> +/* SPDX-License-Identifier: GPL-2.0-only OR Apache-2.0 */
> +
> +#ifdef HAVE_LIBSELINUX
> +#include <selinux/selinux.h>
> +#include <selinux/label.h>
> +#endif
> +
> +#ifdef WITH_ANDROID
> +#include <selinux/android.h>
> +#include <private/android_filesystem_config.h>
> +#include <private/canned_fs_config.h>
> +#include <private/fs_config.h>
> +#endif
> diff --git a/lib/xattr.c b/lib/xattr.c
> index 196133a1a798..00fb963c68ef 100644
> --- a/lib/xattr.c
> +++ b/lib/xattr.c
> @@ -17,6 +17,7 @@
>  #include "erofs/xattr.h"
>  #include "erofs/cache.h"
>  #include "erofs/io.h"
> +#include "liberofs_private.h"
>
>  #define EA_HASHTABLE_BITS 16
>
> --
> 2.20.1
>
>

-- 
Sincerely,

Kelvin Zhang

[-- Attachment #2: Type: text/html, Size: 21527 bytes --]

      reply	other threads:[~2021-12-01 17:58 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-01 13:53 [PATCH] erofs-utils: make liberofs more C++ friendly Gao Xiang
2021-12-01 17:58 ` Kelvin Zhang via Linux-erofs [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAOSmRzgu8_mU8ysONL7G=fbg+Gc4901S6pBOVnq0_z9RryZtSA@mail.gmail.com' \
    --to=linux-erofs@lists.ozlabs.org \
    --cc=xiang@kernel.org \
    --cc=zhangkelvin@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.