All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kees Cook <keescook@chromium.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Tony Luck <tony.luck@intel.com>,
	Anton Vorontsov <anton@enomsg.org>,
	linux-kernel@vger.kernel.org,
	WeiXiong Liao <liaoweixiong@allwinnertech.com>,
	linux-mtd@lists.infradead.org, Colin Cross <ccross@android.com>
Subject: Re: [PATCH 3/9] pstore/blk: remove {un,}register_pstore_blk
Date: Tue, 1 Dec 2020 11:29:20 -0800	[thread overview]
Message-ID: <202012011128.CF6461B88@keescook> (raw)
In-Reply-To: <20201016132047.3068029-4-hch@lst.de>

On Fri, Oct 16, 2020 at 03:20:41PM +0200, Christoph Hellwig wrote:
> This interface is entirely unused, so remove them and various bits of
> unreachable code.

Yeah, this is fair to remove -- there are no users. I'm not a fan of
dropping it, but it can come back if anyone wants to provide a full
generic block device implementation.

Reviewed-by: Kees Cook <keescook@chromium.org>


> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  Documentation/admin-guide/pstore-blk.rst |  8 +--
>  fs/pstore/blk.c                          | 79 ++----------------------
>  include/linux/pstore_blk.h               | 42 -------------
>  3 files changed, 7 insertions(+), 122 deletions(-)
> 
> diff --git a/Documentation/admin-guide/pstore-blk.rst b/Documentation/admin-guide/pstore-blk.rst
> index d9ec8b0572d3b2..84477621384d85 100644
> --- a/Documentation/admin-guide/pstore-blk.rst
> +++ b/Documentation/admin-guide/pstore-blk.rst
> @@ -151,13 +151,7 @@ otherwise KMSG_DUMP_MAX.
>  Configurations for driver
>  -------------------------
>  
> -Only a block device driver cares about these configurations. A block device
> -driver uses ``register_pstore_blk`` to register to pstore/blk.
> -
> -.. kernel-doc:: fs/pstore/blk.c
> -   :identifiers: register_pstore_blk
> -
> -A non-block device driver uses ``register_pstore_device`` with
> +A device driver uses ``register_pstore_device`` with
>  ``struct pstore_device_info`` to register to pstore/blk.
>  
>  .. kernel-doc:: fs/pstore/blk.c
> diff --git a/fs/pstore/blk.c b/fs/pstore/blk.c
> index fcd5563dde063c..7f8368e94b3604 100644
> --- a/fs/pstore/blk.c
> +++ b/fs/pstore/blk.c
> @@ -90,7 +90,6 @@ MODULE_PARM_DESC(blkdev, "block device for pstore storage");
>  static DEFINE_MUTEX(pstore_blk_lock);
>  static struct block_device *psblk_bdev;
>  static struct pstore_zone_info *pstore_zone_info;
> -static pstore_blk_panic_write_op blkdev_panic_write;
>  
>  struct bdev_info {
>  	dev_t devt;
> @@ -341,24 +340,7 @@ static ssize_t psblk_generic_blk_write(const char *buf, size_t bytes,
>  	return ret;
>  }
>  
> -static ssize_t psblk_blk_panic_write(const char *buf, size_t size,
> -		loff_t off)
> -{
> -	int ret;
> -
> -	if (!blkdev_panic_write)
> -		return -EOPNOTSUPP;
> -
> -	/* size and off must align to SECTOR_SIZE for block device */
> -	ret = blkdev_panic_write(buf, off >> SECTOR_SHIFT,
> -			size >> SECTOR_SHIFT);
> -	/* try next zone */
> -	if (ret == -ENOMSG)
> -		return ret;
> -	return ret ? -EIO : size;
> -}
> -
> -static int __register_pstore_blk(struct pstore_blk_info *info)
> +static int __register_pstore_blk(void)
>  {
>  	char bdev_name[BDEVNAME_SIZE];
>  	struct block_device *bdev;
> @@ -378,68 +360,34 @@ static int __register_pstore_blk(struct pstore_blk_info *info)
>  	}
>  
>  	/* only allow driver matching the @blkdev */
> -	if (!binfo.devt || (!best_effort &&
> -			    MAJOR(binfo.devt) != info->major)) {
> -		pr_debug("invalid major %u (expect %u)\n",
> -				info->major, MAJOR(binfo.devt));
> +	if (!binfo.devt) {
> +		pr_debug("no major\n");
>  		ret = -ENODEV;
>  		goto err_put_bdev;
>  	}
>  
>  	/* psblk_bdev must be assigned before register to pstore/blk */
>  	psblk_bdev = bdev;
> -	blkdev_panic_write = info->panic_write;
> -
> -	/* Copy back block device details. */
> -	info->devt = binfo.devt;
> -	info->nr_sects = binfo.nr_sects;
> -	info->start_sect = binfo.start_sect;
>  
>  	memset(&dev, 0, sizeof(dev));
> -	dev.total_size = info->nr_sects << SECTOR_SHIFT;
> -	dev.flags = info->flags;
> +	dev.total_size = binfo.nr_sects << SECTOR_SHIFT;
>  	dev.read = psblk_generic_blk_read;
>  	dev.write = psblk_generic_blk_write;
> -	dev.erase = NULL;
> -	dev.panic_write = info->panic_write ? psblk_blk_panic_write : NULL;
>  
>  	ret = __register_pstore_device(&dev);
>  	if (ret)
>  		goto err_put_bdev;
>  
>  	bdevname(bdev, bdev_name);
> -	pr_info("attached %s%s\n", bdev_name,
> -		info->panic_write ? "" : " (no dedicated panic_write!)");
> +	pr_info("attached %s (no dedicated panic_write!)\n", bdev_name);
>  	return 0;
>  
>  err_put_bdev:
>  	psblk_bdev = NULL;
> -	blkdev_panic_write = NULL;
>  	psblk_put_bdev(bdev, holder);
>  	return ret;
>  }
>  
> -/**
> - * register_pstore_blk() - register block device to pstore/blk
> - *
> - * @info: details on the desired block device interface
> - *
> - * Return:
> - * * 0		- OK
> - * * Others	- something error.
> - */
> -int register_pstore_blk(struct pstore_blk_info *info)
> -{
> -	int ret;
> -
> -	mutex_lock(&pstore_blk_lock);
> -	ret = __register_pstore_blk(info);
> -	mutex_unlock(&pstore_blk_lock);
> -
> -	return ret;
> -}
> -EXPORT_SYMBOL_GPL(register_pstore_blk);
> -
>  static void __unregister_pstore_blk(unsigned int major)
>  {
>  	struct pstore_device_info dev = { .read = psblk_generic_blk_read };
> @@ -449,24 +397,10 @@ static void __unregister_pstore_blk(unsigned int major)
>  	if (psblk_bdev && MAJOR(psblk_bdev->bd_dev) == major) {
>  		__unregister_pstore_device(&dev);
>  		psblk_put_bdev(psblk_bdev, holder);
> -		blkdev_panic_write = NULL;
>  		psblk_bdev = NULL;
>  	}
>  }
>  
> -/**
> - * unregister_pstore_blk() - unregister block device from pstore/blk
> - *
> - * @major: the major device number of device
> - */
> -void unregister_pstore_blk(unsigned int major)
> -{
> -	mutex_lock(&pstore_blk_lock);
> -	__unregister_pstore_blk(major);
> -	mutex_unlock(&pstore_blk_lock);
> -}
> -EXPORT_SYMBOL_GPL(unregister_pstore_blk);
> -
>  /* get information of pstore/blk */
>  int pstore_blk_get_config(struct pstore_blk_config *info)
>  {
> @@ -483,12 +417,11 @@ EXPORT_SYMBOL_GPL(pstore_blk_get_config);
>  
>  static int __init pstore_blk_init(void)
>  {
> -	struct pstore_blk_info info = { };
>  	int ret = 0;
>  
>  	mutex_lock(&pstore_blk_lock);
>  	if (!pstore_zone_info && best_effort && blkdev[0])
> -		ret = __register_pstore_blk(&info);
> +		ret = __register_pstore_blk();
>  	mutex_unlock(&pstore_blk_lock);
>  
>  	return ret;
> diff --git a/include/linux/pstore_blk.h b/include/linux/pstore_blk.h
> index 61e914522b0193..99564f93d77488 100644
> --- a/include/linux/pstore_blk.h
> +++ b/include/linux/pstore_blk.h
> @@ -7,48 +7,6 @@
>  #include <linux/pstore.h>
>  #include <linux/pstore_zone.h>
>  
> -/**
> - * typedef pstore_blk_panic_write_op - panic write operation to block device
> - *
> - * @buf: the data to write
> - * @start_sect: start sector to block device
> - * @sects: sectors count on buf
> - *
> - * Return: On success, zero should be returned. Others excluding -ENOMSG
> - * mean error. -ENOMSG means to try next zone.
> - *
> - * Panic write to block device must be aligned to SECTOR_SIZE.
> - */
> -typedef int (*pstore_blk_panic_write_op)(const char *buf, sector_t start_sect,
> -		sector_t sects);
> -
> -/**
> - * struct pstore_blk_info - pstore/blk registration details
> - *
> - * @major:	Which major device number to support with pstore/blk
> - * @flags:	The supported PSTORE_FLAGS_* from linux/pstore.h.
> - * @panic_write:The write operation only used for the panic case.
> - *		This can be NULL, but is recommended to avoid losing
> - *		crash data if the kernel's IO path or work queues are
> - *		broken during a panic.
> - * @devt:	The dev_t that pstore/blk has attached to.
> - * @nr_sects:	Number of sectors on @devt.
> - * @start_sect:	Starting sector on @devt.
> - */
> -struct pstore_blk_info {
> -	unsigned int major;
> -	unsigned int flags;
> -	pstore_blk_panic_write_op panic_write;
> -
> -	/* Filled in by pstore/blk after registration. */
> -	dev_t devt;
> -	sector_t nr_sects;
> -	sector_t start_sect;
> -};
> -
> -int  register_pstore_blk(struct pstore_blk_info *info);
> -void unregister_pstore_blk(unsigned int major);
> -
>  /**
>   * struct pstore_device_info - back-end pstore/blk driver structure.
>   *
> -- 
> 2.28.0
> 

-- 
Kees Cook

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

WARNING: multiple messages have this Message-ID (diff)
From: Kees Cook <keescook@chromium.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Anton Vorontsov <anton@enomsg.org>,
	Colin Cross <ccross@android.com>, Tony Luck <tony.luck@intel.com>,
	WeiXiong Liao <liaoweixiong@allwinnertech.com>,
	linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/9] pstore/blk: remove {un,}register_pstore_blk
Date: Tue, 1 Dec 2020 11:29:20 -0800	[thread overview]
Message-ID: <202012011128.CF6461B88@keescook> (raw)
In-Reply-To: <20201016132047.3068029-4-hch@lst.de>

On Fri, Oct 16, 2020 at 03:20:41PM +0200, Christoph Hellwig wrote:
> This interface is entirely unused, so remove them and various bits of
> unreachable code.

Yeah, this is fair to remove -- there are no users. I'm not a fan of
dropping it, but it can come back if anyone wants to provide a full
generic block device implementation.

Reviewed-by: Kees Cook <keescook@chromium.org>


> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  Documentation/admin-guide/pstore-blk.rst |  8 +--
>  fs/pstore/blk.c                          | 79 ++----------------------
>  include/linux/pstore_blk.h               | 42 -------------
>  3 files changed, 7 insertions(+), 122 deletions(-)
> 
> diff --git a/Documentation/admin-guide/pstore-blk.rst b/Documentation/admin-guide/pstore-blk.rst
> index d9ec8b0572d3b2..84477621384d85 100644
> --- a/Documentation/admin-guide/pstore-blk.rst
> +++ b/Documentation/admin-guide/pstore-blk.rst
> @@ -151,13 +151,7 @@ otherwise KMSG_DUMP_MAX.
>  Configurations for driver
>  -------------------------
>  
> -Only a block device driver cares about these configurations. A block device
> -driver uses ``register_pstore_blk`` to register to pstore/blk.
> -
> -.. kernel-doc:: fs/pstore/blk.c
> -   :identifiers: register_pstore_blk
> -
> -A non-block device driver uses ``register_pstore_device`` with
> +A device driver uses ``register_pstore_device`` with
>  ``struct pstore_device_info`` to register to pstore/blk.
>  
>  .. kernel-doc:: fs/pstore/blk.c
> diff --git a/fs/pstore/blk.c b/fs/pstore/blk.c
> index fcd5563dde063c..7f8368e94b3604 100644
> --- a/fs/pstore/blk.c
> +++ b/fs/pstore/blk.c
> @@ -90,7 +90,6 @@ MODULE_PARM_DESC(blkdev, "block device for pstore storage");
>  static DEFINE_MUTEX(pstore_blk_lock);
>  static struct block_device *psblk_bdev;
>  static struct pstore_zone_info *pstore_zone_info;
> -static pstore_blk_panic_write_op blkdev_panic_write;
>  
>  struct bdev_info {
>  	dev_t devt;
> @@ -341,24 +340,7 @@ static ssize_t psblk_generic_blk_write(const char *buf, size_t bytes,
>  	return ret;
>  }
>  
> -static ssize_t psblk_blk_panic_write(const char *buf, size_t size,
> -		loff_t off)
> -{
> -	int ret;
> -
> -	if (!blkdev_panic_write)
> -		return -EOPNOTSUPP;
> -
> -	/* size and off must align to SECTOR_SIZE for block device */
> -	ret = blkdev_panic_write(buf, off >> SECTOR_SHIFT,
> -			size >> SECTOR_SHIFT);
> -	/* try next zone */
> -	if (ret == -ENOMSG)
> -		return ret;
> -	return ret ? -EIO : size;
> -}
> -
> -static int __register_pstore_blk(struct pstore_blk_info *info)
> +static int __register_pstore_blk(void)
>  {
>  	char bdev_name[BDEVNAME_SIZE];
>  	struct block_device *bdev;
> @@ -378,68 +360,34 @@ static int __register_pstore_blk(struct pstore_blk_info *info)
>  	}
>  
>  	/* only allow driver matching the @blkdev */
> -	if (!binfo.devt || (!best_effort &&
> -			    MAJOR(binfo.devt) != info->major)) {
> -		pr_debug("invalid major %u (expect %u)\n",
> -				info->major, MAJOR(binfo.devt));
> +	if (!binfo.devt) {
> +		pr_debug("no major\n");
>  		ret = -ENODEV;
>  		goto err_put_bdev;
>  	}
>  
>  	/* psblk_bdev must be assigned before register to pstore/blk */
>  	psblk_bdev = bdev;
> -	blkdev_panic_write = info->panic_write;
> -
> -	/* Copy back block device details. */
> -	info->devt = binfo.devt;
> -	info->nr_sects = binfo.nr_sects;
> -	info->start_sect = binfo.start_sect;
>  
>  	memset(&dev, 0, sizeof(dev));
> -	dev.total_size = info->nr_sects << SECTOR_SHIFT;
> -	dev.flags = info->flags;
> +	dev.total_size = binfo.nr_sects << SECTOR_SHIFT;
>  	dev.read = psblk_generic_blk_read;
>  	dev.write = psblk_generic_blk_write;
> -	dev.erase = NULL;
> -	dev.panic_write = info->panic_write ? psblk_blk_panic_write : NULL;
>  
>  	ret = __register_pstore_device(&dev);
>  	if (ret)
>  		goto err_put_bdev;
>  
>  	bdevname(bdev, bdev_name);
> -	pr_info("attached %s%s\n", bdev_name,
> -		info->panic_write ? "" : " (no dedicated panic_write!)");
> +	pr_info("attached %s (no dedicated panic_write!)\n", bdev_name);
>  	return 0;
>  
>  err_put_bdev:
>  	psblk_bdev = NULL;
> -	blkdev_panic_write = NULL;
>  	psblk_put_bdev(bdev, holder);
>  	return ret;
>  }
>  
> -/**
> - * register_pstore_blk() - register block device to pstore/blk
> - *
> - * @info: details on the desired block device interface
> - *
> - * Return:
> - * * 0		- OK
> - * * Others	- something error.
> - */
> -int register_pstore_blk(struct pstore_blk_info *info)
> -{
> -	int ret;
> -
> -	mutex_lock(&pstore_blk_lock);
> -	ret = __register_pstore_blk(info);
> -	mutex_unlock(&pstore_blk_lock);
> -
> -	return ret;
> -}
> -EXPORT_SYMBOL_GPL(register_pstore_blk);
> -
>  static void __unregister_pstore_blk(unsigned int major)
>  {
>  	struct pstore_device_info dev = { .read = psblk_generic_blk_read };
> @@ -449,24 +397,10 @@ static void __unregister_pstore_blk(unsigned int major)
>  	if (psblk_bdev && MAJOR(psblk_bdev->bd_dev) == major) {
>  		__unregister_pstore_device(&dev);
>  		psblk_put_bdev(psblk_bdev, holder);
> -		blkdev_panic_write = NULL;
>  		psblk_bdev = NULL;
>  	}
>  }
>  
> -/**
> - * unregister_pstore_blk() - unregister block device from pstore/blk
> - *
> - * @major: the major device number of device
> - */
> -void unregister_pstore_blk(unsigned int major)
> -{
> -	mutex_lock(&pstore_blk_lock);
> -	__unregister_pstore_blk(major);
> -	mutex_unlock(&pstore_blk_lock);
> -}
> -EXPORT_SYMBOL_GPL(unregister_pstore_blk);
> -
>  /* get information of pstore/blk */
>  int pstore_blk_get_config(struct pstore_blk_config *info)
>  {
> @@ -483,12 +417,11 @@ EXPORT_SYMBOL_GPL(pstore_blk_get_config);
>  
>  static int __init pstore_blk_init(void)
>  {
> -	struct pstore_blk_info info = { };
>  	int ret = 0;
>  
>  	mutex_lock(&pstore_blk_lock);
>  	if (!pstore_zone_info && best_effort && blkdev[0])
> -		ret = __register_pstore_blk(&info);
> +		ret = __register_pstore_blk();
>  	mutex_unlock(&pstore_blk_lock);
>  
>  	return ret;
> diff --git a/include/linux/pstore_blk.h b/include/linux/pstore_blk.h
> index 61e914522b0193..99564f93d77488 100644
> --- a/include/linux/pstore_blk.h
> +++ b/include/linux/pstore_blk.h
> @@ -7,48 +7,6 @@
>  #include <linux/pstore.h>
>  #include <linux/pstore_zone.h>
>  
> -/**
> - * typedef pstore_blk_panic_write_op - panic write operation to block device
> - *
> - * @buf: the data to write
> - * @start_sect: start sector to block device
> - * @sects: sectors count on buf
> - *
> - * Return: On success, zero should be returned. Others excluding -ENOMSG
> - * mean error. -ENOMSG means to try next zone.
> - *
> - * Panic write to block device must be aligned to SECTOR_SIZE.
> - */
> -typedef int (*pstore_blk_panic_write_op)(const char *buf, sector_t start_sect,
> -		sector_t sects);
> -
> -/**
> - * struct pstore_blk_info - pstore/blk registration details
> - *
> - * @major:	Which major device number to support with pstore/blk
> - * @flags:	The supported PSTORE_FLAGS_* from linux/pstore.h.
> - * @panic_write:The write operation only used for the panic case.
> - *		This can be NULL, but is recommended to avoid losing
> - *		crash data if the kernel's IO path or work queues are
> - *		broken during a panic.
> - * @devt:	The dev_t that pstore/blk has attached to.
> - * @nr_sects:	Number of sectors on @devt.
> - * @start_sect:	Starting sector on @devt.
> - */
> -struct pstore_blk_info {
> -	unsigned int major;
> -	unsigned int flags;
> -	pstore_blk_panic_write_op panic_write;
> -
> -	/* Filled in by pstore/blk after registration. */
> -	dev_t devt;
> -	sector_t nr_sects;
> -	sector_t start_sect;
> -};
> -
> -int  register_pstore_blk(struct pstore_blk_info *info);
> -void unregister_pstore_blk(unsigned int major);
> -
>  /**
>   * struct pstore_device_info - back-end pstore/blk driver structure.
>   *
> -- 
> 2.28.0
> 

-- 
Kees Cook

  reply	other threads:[~2020-12-01 19:30 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-16 13:20 simplify pstore-blk Christoph Hellwig
2020-10-16 13:20 ` Christoph Hellwig
2020-10-16 13:20 ` [PATCH 1/9] pstore/zone: cap the maximum device size Christoph Hellwig
2020-10-16 13:20   ` Christoph Hellwig
2020-11-08 14:05   ` 廖威雄
2020-11-08 14:05     ` 廖威雄
2020-12-01 19:08   ` Kees Cook
2020-12-01 19:08     ` Kees Cook
2020-12-01 21:11   ` Kees Cook
2020-12-01 21:11     ` Kees Cook
2020-10-16 13:20 ` [PATCH 2/9] pstore/blk: update the command line example Christoph Hellwig
2020-10-16 13:20   ` Christoph Hellwig
2020-11-08 14:05   ` 廖威雄
2020-11-08 14:05     ` 廖威雄
2020-12-01 19:10   ` Kees Cook
2020-12-01 19:10     ` Kees Cook
2020-10-16 13:20 ` [PATCH 3/9] pstore/blk: remove {un,}register_pstore_blk Christoph Hellwig
2020-10-16 13:20   ` Christoph Hellwig
2020-12-01 19:29   ` Kees Cook [this message]
2020-12-01 19:29     ` Kees Cook
2020-10-16 13:20 ` [PATCH 4/9] pstore/blk: remove __unregister_pstore_blk Christoph Hellwig
2020-10-16 13:20   ` Christoph Hellwig
2020-12-01 19:20   ` Kees Cook
2020-12-01 19:20     ` Kees Cook
2020-10-16 13:20 ` [PATCH 5/9] pstore/blk: simplify the block device open / close path Christoph Hellwig
2020-10-16 13:20   ` Christoph Hellwig
2020-12-01 19:40   ` Kees Cook
2020-12-01 19:40     ` Kees Cook
2020-10-16 13:20 ` [PATCH 6/9] pstore/zone: split struct pstore_zone_info Christoph Hellwig
2020-10-16 13:20   ` Christoph Hellwig
2020-12-01 19:42   ` Kees Cook
2020-12-01 19:42     ` Kees Cook
2020-10-16 13:20 ` [PATCH 7/9] pstore/blk: remove struct pstore_device_info Christoph Hellwig
2020-10-16 13:20   ` Christoph Hellwig
2020-12-01 19:44   ` Kees Cook
2020-12-01 19:44     ` Kees Cook
2020-10-16 13:20 ` [PATCH 8/9] pstore/blk: use the normal block device I/O path Christoph Hellwig
2020-10-16 13:20   ` Christoph Hellwig
2020-11-08 14:43   ` 廖威雄
2020-11-08 14:43     ` 廖威雄
2020-11-23 14:49     ` Christoph Hellwig
2020-11-23 14:49       ` Christoph Hellwig
2020-12-01 19:52   ` Kees Cook
2020-12-01 19:52     ` Kees Cook
2020-10-16 13:20 ` [PATCH 9/9] pstore/blk: don't depend on CONFIG_BLOCK Christoph Hellwig
2020-10-16 13:20   ` Christoph Hellwig
2020-10-16 19:36   ` kernel test robot
2020-12-01 19:53   ` Kees Cook
2020-12-01 19:53     ` Kees Cook
2020-10-16 22:54 ` simplify pstore-blk Kees Cook
2020-10-16 22:54   ` Kees Cook
2020-11-23 14:53   ` Christoph Hellwig
2020-11-23 14:53     ` Christoph Hellwig
2020-11-24 22:53     ` Kees Cook
2020-11-24 22:53       ` Kees Cook
2020-11-08 14:34 ` 廖威雄
2020-11-08 14:34   ` 廖威雄

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=202012011128.CF6461B88@keescook \
    --to=keescook@chromium.org \
    --cc=anton@enomsg.org \
    --cc=ccross@android.com \
    --cc=hch@lst.de \
    --cc=liaoweixiong@allwinnertech.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=tony.luck@intel.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.