From: kernel test robot <lkp@intel.com>
To: Paul Lawrence <paullawrence@google.com>
Cc: kbuild-all@lists.01.org,
GNU/Weeb Mailing List <gwml@vger.gnuweeb.org>,
linux-kernel@vger.kernel.org
Subject: [ammarfaizi2-block:google/android/kernel/common/android-4.9-q-release 8065/9999] drivers/md/dm-bow.c:98:10: warning: no previous declaration for 'range_top'
Date: Thu, 3 Mar 2022 11:12:09 +0800 [thread overview]
Message-ID: <202203030958.tfhUTTHH-lkp@intel.com> (raw)
Hi Paul,
FYI, the error/warning still remains.
tree: https://github.com/ammarfaizi2/linux-block google/android/kernel/common/android-4.9-q-release
head: 4be78b108a3a1d1ffbc2367c5a45855715451482
commit: 9aa7b211f5a1a9d85b82527f1db87dd7be1d2bf9 [8065/9999] ANDROID: dm-bow: backport to 4.14
config: i386-allyesconfig (https://download.01.org/0day-ci/archive/20220303/202203030958.tfhUTTHH-lkp@intel.com/config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
reproduce (this is a W=1 build):
# https://github.com/ammarfaizi2/linux-block/commit/9aa7b211f5a1a9d85b82527f1db87dd7be1d2bf9
git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
git fetch --no-tags ammarfaizi2-block google/android/kernel/common/android-4.9-q-release
git checkout 9aa7b211f5a1a9d85b82527f1db87dd7be1d2bf9
# save the config file to linux build tree
mkdir build_dir
make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/md/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from include/linux/uaccess.h:4:0,
from include/linux/highmem.h:8,
from include/linux/bio.h:21,
from include/linux/device-mapper.h:11,
from drivers/md/dm.h:14,
from drivers/md/dm-bow.c:7:
include/linux/sched.h:1201:1: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
const struct sched_group_energy * const(*sched_domain_energy_f)(int cpu);
^~~~~
>> drivers/md/dm-bow.c:98:10: warning: no previous declaration for 'range_top' [-Wmissing-declarations]
sector_t range_top(struct bow_range *br)
^~~~~~~~~
>> drivers/md/dm-bow.c:104:5: warning: no previous declaration for 'range_size' [-Wmissing-declarations]
u64 range_size(struct bow_range *br)
^~~~~~~~~~
>> drivers/md/dm-bow.c:149:6: warning: no previous declaration for 'add_before' [-Wmissing-declarations]
void add_before(struct rb_root *ranges, struct bow_range *new_br,
^~~~~~~~~~
drivers/md/dm-bow.c: In function 'split_range':
drivers/md/dm-bow.c:179:10: error: 'BLK_STS_IOERR' undeclared (first use in this function); did you mean 'BLK_TA_INSERT'?
return BLK_STS_IOERR;
^~~~~~~~~~~~~
BLK_TA_INSERT
drivers/md/dm-bow.c:179:10: note: each undeclared identifier is reported only once for each function it appears in
drivers/md/dm-bow.c:187:11: error: 'BLK_STS_RESOURCE' undeclared (first use in this function); did you mean 'CAP_SYS_RESOURCE'?
return BLK_STS_RESOURCE;
^~~~~~~~~~~~~~~~
CAP_SYS_RESOURCE
drivers/md/dm-bow.c:200:10: error: 'BLK_STS_OK' undeclared (first use in this function); did you mean 'BLK_STS_IOERR'?
return BLK_STS_OK;
^~~~~~~~~~
BLK_STS_IOERR
drivers/md/dm-bow.c: In function 'copy_data':
drivers/md/dm-bow.c:282:10: error: 'BLK_STS_IOERR' undeclared (first use in this function); did you mean 'BLK_TA_INSERT'?
return BLK_STS_IOERR;
^~~~~~~~~~~~~
BLK_TA_INSERT
In file included from include/linux/printk.h:6:0,
from include/linux/kernel.h:13,
from include/linux/list.h:8,
from include/linux/wait.h:6,
from include/linux/fs.h:5,
from drivers/md/dm.h:13,
from drivers/md/dm-bow.c:7:
include/linux/kern_levels.h:4:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'sector_t {aka long long unsigned int}' [-Wformat=]
#define KERN_SOH "\001" /* ASCII Start Of Header */
^
include/linux/kern_levels.h:10:18: note: in expansion of macro 'KERN_SOH'
#define KERN_ERR KERN_SOH "3" /* error conditions */
^~~~~~~~
include/linux/device-mapper.h:549:9: note: in expansion of macro 'KERN_ERR'
printk(KERN_ERR DM_NAME ": " DM_MSG_PREFIX ": " f "\n", ## arg)
^~~~~~~~
drivers/md/dm-bow.c:295:4: note: in expansion of macro 'DMERR'
DMERR("Cannot read page %lu", page);
^~~~~
drivers/md/dm-bow.c:295:30: note: format string is defined here
DMERR("Cannot read page %lu", page);
~~^
%llu
drivers/md/dm-bow.c:319:9: error: 'BLK_STS_OK' undeclared (first use in this function); did you mean 'BLK_STS_IOERR'?
return BLK_STS_OK;
^~~~~~~~~~
BLK_STS_IOERR
drivers/md/dm-bow.c: In function 'backup_log_sector':
drivers/md/dm-bow.c:338:10: error: 'BLK_STS_IOERR' undeclared (first use in this function); did you mean 'BLK_TA_INSERT'?
return BLK_STS_IOERR;
^~~~~~~~~~~~~
BLK_TA_INSERT
drivers/md/dm-bow.c:349:10: error: 'BLK_STS_NOSPC' undeclared (first use in this function); did you mean 'BLK_STS_IOERR'?
return BLK_STS_NOSPC;
^~~~~~~~~~~~~
BLK_STS_IOERR
drivers/md/dm-bow.c:372:9: error: 'BLK_STS_OK' undeclared (first use in this function); did you mean 'BLK_STS_NOSPC'?
return BLK_STS_OK;
^~~~~~~~~~
BLK_STS_NOSPC
drivers/md/dm-bow.c: In function 'add_log_entry':
drivers/md/dm-bow.c:394:10: error: 'BLK_STS_NOSPC' undeclared (first use in this function); did you mean 'BLK_TC_PC'?
return BLK_STS_NOSPC;
^~~~~~~~~~~~~
BLK_TC_PC
drivers/md/dm-bow.c:407:9: error: 'BLK_STS_OK' undeclared (first use in this function); did you mean 'BLK_STS_NOSPC'?
return BLK_STS_OK;
^~~~~~~~~~
BLK_STS_NOSPC
drivers/md/dm-bow.c: In function 'prepare_log':
drivers/md/dm-bow.c:421:10: error: 'BLK_STS_IOERR' undeclared (first use in this function); did you mean 'BLK_TA_INSERT'?
return BLK_STS_IOERR;
^~~~~~~~~~~~~
BLK_TA_INSERT
drivers/md/dm-bow.c:442:10: error: 'BLK_STS_NOSPC' undeclared (first use in this function); did you mean 'BLK_STS_IOERR'?
return BLK_STS_NOSPC;
^~~~~~~~~~~~~
BLK_STS_IOERR
drivers/md/dm-bow.c:490:9: error: 'BLK_STS_OK' undeclared (first use in this function); did you mean 'BLK_STS_NOSPC'?
return BLK_STS_OK;
^~~~~~~~~~
BLK_STS_NOSPC
drivers/md/dm-bow.c: In function 'prepare_unchanged_range':
drivers/md/dm-bow.c:753:10: error: 'BLK_STS_NOSPC' undeclared (first use in this function); did you mean 'BLK_TC_PC'?
return BLK_STS_NOSPC;
^~~~~~~~~~~~~
BLK_TC_PC
drivers/md/dm-bow.c:772:10: error: 'BLK_STS_IOERR' undeclared (first use in this function); did you mean 'BLK_STS_NOSPC'?
return BLK_STS_IOERR;
^~~~~~~~~~~~~
BLK_STS_NOSPC
drivers/md/dm-bow.c: In function 'prepare_free_range':
drivers/md/dm-bow.c:827:9: error: 'BLK_STS_OK' undeclared (first use in this function); did you mean 'BLK_TC_PC'?
return BLK_STS_OK;
^~~~~~~~~~
BLK_TC_PC
drivers/md/dm-bow.c: In function 'prepare_changed_range':
drivers/md/dm-bow.c:834:9: error: 'BLK_STS_OK' undeclared (first use in this function); did you mean 'BLK_TC_PC'?
return BLK_STS_OK;
^~~~~~~~~~
BLK_TC_PC
drivers/md/dm-bow.c: In function 'prepare_one_range':
drivers/md/dm-bow.c:864:10: error: 'BLK_STS_IOERR' undeclared (first use in this function); did you mean 'BLK_TA_INSERT'?
return BLK_STS_IOERR;
^~~~~~~~~~~~~
BLK_TA_INSERT
drivers/md/dm-bow.c: In function 'bow_write':
drivers/md/dm-bow.c:880:12: error: 'BLK_STS_OK' undeclared (first use in this function); did you mean 'BLK_TC_PC'?
int ret = BLK_STS_OK;
^~~~~~~~~~
BLK_TC_PC
drivers/md/dm-bow.c:896:3: error: implicit declaration of function 'bio_set_dev'; did you mean 'bioset_free'? [-Werror=implicit-function-declaration]
bio_set_dev(bio, bc->dev->bdev);
^~~~~~~~~~~
bioset_free
drivers/md/dm-bow.c:900:8: error: 'struct bio' has no member named 'bi_status'; did you mean 'bi_flags'?
bio->bi_status = ret;
^~~~~~~~~
bi_flags
drivers/md/dm-bow.c: In function 'handle_sector0':
drivers/md/dm-bow.c:932:9: error: 'struct bio' has no member named 'bi_status'; did you mean 'bi_flags'?
bio->bi_status = BLK_STS_RESOURCE;
^~~~~~~~~
bi_flags
drivers/md/dm-bow.c:932:21: error: 'BLK_STS_RESOURCE' undeclared (first use in this function); did you mean 'CAP_SYS_RESOURCE'?
bio->bi_status = BLK_STS_RESOURCE;
^~~~~~~~~~~~~~~~
CAP_SYS_RESOURCE
In file included from include/linux/printk.h:6:0,
from include/linux/kernel.h:13,
from include/linux/list.h:8,
from include/linux/wait.h:6,
from include/linux/fs.h:5,
from drivers/md/dm.h:13,
from drivers/md/dm-bow.c:7:
drivers/md/dm-bow.c: In function 'add_trim':
include/linux/kern_levels.h:4:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'sector_t {aka long long unsigned int}' [-Wformat=]
#define KERN_SOH "\001" /* ASCII Start Of Header */
^
include/linux/kern_levels.h:14:20: note: in expansion of macro 'KERN_SOH'
#define KERN_DEBUG KERN_SOH "7" /* debug-level messages */
^~~~~~~~
include/linux/device-mapper.h:577:9: note: in expansion of macro 'KERN_DEBUG'
printk(KERN_DEBUG DM_NAME ": " DM_MSG_PREFIX " DEBUG: " f "\n", ## arg)
^~~~~~~~~~
drivers/md/dm-bow.c:956:2: note: in expansion of macro 'DMDEBUG'
DMDEBUG("add_trim: %lu, %u",
^~~~~~~
drivers/md/dm-bow.c:956:23: note: format string is defined here
DMDEBUG("add_trim: %lu, %u",
~~^
%llu
In file included from include/linux/printk.h:6:0,
from include/linux/kernel.h:13,
from include/linux/list.h:8,
from include/linux/wait.h:6,
from include/linux/fs.h:5,
from drivers/md/dm.h:13,
from drivers/md/dm-bow.c:7:
drivers/md/dm-bow.c: In function 'remove_trim':
include/linux/kern_levels.h:4:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'sector_t {aka long long unsigned int}' [-Wformat=]
#define KERN_SOH "\001" /* ASCII Start Of Header */
^
include/linux/kern_levels.h:14:20: note: in expansion of macro 'KERN_SOH'
#define KERN_DEBUG KERN_SOH "7" /* debug-level messages */
^~~~~~~~
include/linux/device-mapper.h:577:9: note: in expansion of macro 'KERN_DEBUG'
printk(KERN_DEBUG DM_NAME ": " DM_MSG_PREFIX " DEBUG: " f "\n", ## arg)
^~~~~~~~~~
drivers/md/dm-bow.c:994:2: note: in expansion of macro 'DMDEBUG'
DMDEBUG("remove_trim: %lu, %u",
^~~~~~~
drivers/md/dm-bow.c:994:26: note: format string is defined here
DMDEBUG("remove_trim: %lu, %u",
~~^
%llu
drivers/md/dm-bow.c: At top level:
>> drivers/md/dm-bow.c:1026:5: warning: no previous declaration for 'remap_unless_illegal_trim' [-Wmissing-declarations]
int remap_unless_illegal_trim(struct bow_context *bc, struct bio *bio)
^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/md/dm-bow.c: In function 'remap_unless_illegal_trim':
drivers/md/dm-bow.c:1029:8: error: 'struct bio' has no member named 'bi_status'; did you mean 'bi_flags'?
bio->bi_status = BLK_STS_NOTSUPP;
^~~~~~~~~
bi_flags
drivers/md/dm-bow.c:1029:20: error: 'BLK_STS_NOTSUPP' undeclared (first use in this function); did you mean 'BLK_TC_NOTIFY'?
bio->bi_status = BLK_STS_NOTSUPP;
^~~~~~~~~~~~~~~
BLK_TC_NOTIFY
drivers/md/dm-bow.c: In function 'dm_bow_map':
drivers/md/dm-bow.c:1062:23: warning: suggest braces around empty body in an 'else' statement [-Wempty-body]
/* pass-through */;
^
drivers/md/dm-bow.c:1069:23: warning: suggest braces around empty body in an 'else' statement [-Wempty-body]
/* pass-through */;
^
drivers/md/dm-bow.c: In function 'dm_bow_tablestatus':
drivers/md/dm-bow.c:1120:52: warning: format '%lu' expects argument of type 'long unsigned int', but argument 5 has type 'sector_t {aka long long unsigned int}' [-Wformat=]
result += scnprintf(result, end - result, "%s: %lu",
~~^
%llu
readable_type[br->type], br->sector);
~~~~~~~~~~
drivers/md/dm-bow.c: At top level:
>> drivers/md/dm-bow.c:1180:5: warning: no previous declaration for 'dm_bow_prepare_ioctl' [-Wmissing-declarations]
int dm_bow_prepare_ioctl(struct dm_target *ti, struct block_device **bdev,
^~~~~~~~~~~~~~~~~~~~
>> drivers/md/dm-bow.c:1211:12: warning: no previous declaration for 'dm_bow_init' [-Wmissing-declarations]
int __init dm_bow_init(void)
^~~~~~~~~~~
>> drivers/md/dm-bow.c:1220:6: warning: no previous declaration for 'dm_bow_exit' [-Wmissing-declarations]
void dm_bow_exit(void)
^~~~~~~~~~~
drivers/md/dm-bow.c: In function 'split_range':
drivers/md/dm-bow.c:214:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
drivers/md/dm-bow.c: In function 'prepare_one_range':
drivers/md/dm-bow.c:866:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
drivers/md/dm-bow.c: In function 'prepare_changed_range':
drivers/md/dm-bow.c:835:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
drivers/md/dm-bow.c: In function 'prepare_free_range':
drivers/md/dm-bow.c:828:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
drivers/md/dm-bow.c: In function 'copy_data':
drivers/md/dm-bow.c:320:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
drivers/md/dm-bow.c: In function 'add_log_entry':
drivers/md/dm-bow.c:408:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
drivers/md/dm-bow.c: In function 'backup_log_sector':
drivers/md/dm-bow.c:373:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
drivers/md/dm-bow.c: In function 'prepare_log':
drivers/md/dm-bow.c:491:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
cc1: some warnings being treated as errors
vim +/range_top +98 drivers/md/dm-bow.c
de12cfe6e93748 Paul Lawrence 2018-10-23 97
de12cfe6e93748 Paul Lawrence 2018-10-23 @98 sector_t range_top(struct bow_range *br)
de12cfe6e93748 Paul Lawrence 2018-10-23 99 {
de12cfe6e93748 Paul Lawrence 2018-10-23 100 return container_of(rb_next(&br->node), struct bow_range, node)
de12cfe6e93748 Paul Lawrence 2018-10-23 101 ->sector;
de12cfe6e93748 Paul Lawrence 2018-10-23 102 }
de12cfe6e93748 Paul Lawrence 2018-10-23 103
de12cfe6e93748 Paul Lawrence 2018-10-23 @104 u64 range_size(struct bow_range *br)
de12cfe6e93748 Paul Lawrence 2018-10-23 105 {
de12cfe6e93748 Paul Lawrence 2018-10-23 106 return (range_top(br) - br->sector) * SECTOR_SIZE;
de12cfe6e93748 Paul Lawrence 2018-10-23 107 }
de12cfe6e93748 Paul Lawrence 2018-10-23 108
de12cfe6e93748 Paul Lawrence 2018-10-23 109 static sector_t bvec_top(struct bvec_iter *bi_iter)
de12cfe6e93748 Paul Lawrence 2018-10-23 110 {
de12cfe6e93748 Paul Lawrence 2018-10-23 111 return bi_iter->bi_sector + bi_iter->bi_size / SECTOR_SIZE;
de12cfe6e93748 Paul Lawrence 2018-10-23 112 }
de12cfe6e93748 Paul Lawrence 2018-10-23 113
de12cfe6e93748 Paul Lawrence 2018-10-23 114 /*
de12cfe6e93748 Paul Lawrence 2018-10-23 115 * Find the first range that overlaps with bi_iter
de12cfe6e93748 Paul Lawrence 2018-10-23 116 * bi_iter is set to the size of the overlapping sub-range
de12cfe6e93748 Paul Lawrence 2018-10-23 117 */
de12cfe6e93748 Paul Lawrence 2018-10-23 118 static struct bow_range *find_first_overlapping_range(struct rb_root *ranges,
de12cfe6e93748 Paul Lawrence 2018-10-23 119 struct bvec_iter *bi_iter)
de12cfe6e93748 Paul Lawrence 2018-10-23 120 {
de12cfe6e93748 Paul Lawrence 2018-10-23 121 struct rb_node *node = ranges->rb_node;
de12cfe6e93748 Paul Lawrence 2018-10-23 122 struct bow_range *br;
de12cfe6e93748 Paul Lawrence 2018-10-23 123
de12cfe6e93748 Paul Lawrence 2018-10-23 124 while (node) {
de12cfe6e93748 Paul Lawrence 2018-10-23 125 br = container_of(node, struct bow_range, node);
de12cfe6e93748 Paul Lawrence 2018-10-23 126
de12cfe6e93748 Paul Lawrence 2018-10-23 127 if (br->sector <= bi_iter->bi_sector
de12cfe6e93748 Paul Lawrence 2018-10-23 128 && bi_iter->bi_sector < range_top(br))
de12cfe6e93748 Paul Lawrence 2018-10-23 129 break;
de12cfe6e93748 Paul Lawrence 2018-10-23 130
de12cfe6e93748 Paul Lawrence 2018-10-23 131 if (bi_iter->bi_sector < br->sector)
de12cfe6e93748 Paul Lawrence 2018-10-23 132 node = node->rb_left;
de12cfe6e93748 Paul Lawrence 2018-10-23 133 else
de12cfe6e93748 Paul Lawrence 2018-10-23 134 node = node->rb_right;
de12cfe6e93748 Paul Lawrence 2018-10-23 135 }
de12cfe6e93748 Paul Lawrence 2018-10-23 136
de12cfe6e93748 Paul Lawrence 2018-10-23 137 WARN_ON(!node);
de12cfe6e93748 Paul Lawrence 2018-10-23 138 if (!node)
de12cfe6e93748 Paul Lawrence 2018-10-23 139 return NULL;
de12cfe6e93748 Paul Lawrence 2018-10-23 140
de12cfe6e93748 Paul Lawrence 2018-10-23 141 if (range_top(br) - bi_iter->bi_sector
de12cfe6e93748 Paul Lawrence 2018-10-23 142 < bi_iter->bi_size >> SECTOR_SHIFT)
de12cfe6e93748 Paul Lawrence 2018-10-23 143 bi_iter->bi_size = (range_top(br) - bi_iter->bi_sector)
de12cfe6e93748 Paul Lawrence 2018-10-23 144 << SECTOR_SHIFT;
de12cfe6e93748 Paul Lawrence 2018-10-23 145
de12cfe6e93748 Paul Lawrence 2018-10-23 146 return br;
de12cfe6e93748 Paul Lawrence 2018-10-23 147 }
de12cfe6e93748 Paul Lawrence 2018-10-23 148
de12cfe6e93748 Paul Lawrence 2018-10-23 @149 void add_before(struct rb_root *ranges, struct bow_range *new_br,
de12cfe6e93748 Paul Lawrence 2018-10-23 150 struct bow_range *existing)
de12cfe6e93748 Paul Lawrence 2018-10-23 151 {
de12cfe6e93748 Paul Lawrence 2018-10-23 152 struct rb_node *parent = &(existing->node);
de12cfe6e93748 Paul Lawrence 2018-10-23 153 struct rb_node **link = &(parent->rb_left);
de12cfe6e93748 Paul Lawrence 2018-10-23 154
de12cfe6e93748 Paul Lawrence 2018-10-23 155 while (*link) {
de12cfe6e93748 Paul Lawrence 2018-10-23 156 parent = *link;
de12cfe6e93748 Paul Lawrence 2018-10-23 157 link = &((*link)->rb_right);
de12cfe6e93748 Paul Lawrence 2018-10-23 158 }
de12cfe6e93748 Paul Lawrence 2018-10-23 159
de12cfe6e93748 Paul Lawrence 2018-10-23 160 rb_link_node(&new_br->node, parent, link);
de12cfe6e93748 Paul Lawrence 2018-10-23 161 rb_insert_color(&new_br->node, ranges);
de12cfe6e93748 Paul Lawrence 2018-10-23 162 }
de12cfe6e93748 Paul Lawrence 2018-10-23 163
:::::: The code at line 98 was first introduced by commit
:::::: de12cfe6e93748be27ecd3fce8f1eb8ffb9f0a3a ANDROID: dm-bow: Add dm-bow feature
:::::: TO: Paul Lawrence <paullawrence@google.com>
:::::: CC: Paul Lawrence <paullawrence@google.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
reply other threads:[~2022-03-03 3:13 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=202203030958.tfhUTTHH-lkp@intel.com \
--to=lkp@intel.com \
--cc=gwml@vger.gnuweeb.org \
--cc=kbuild-all@lists.01.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paullawrence@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.