On Wed, 25 Apr 2018, Christoph Hellwig wrote:
>
> -/*
> - * /proc/nubus stuff
> - */
> -
I don't think that the introduction of proc_create_single{,_data} alters
the value of that comment. That comment and similar comments in the same
file do have a purpose, which is to keep separate the /pro
On Tue, Apr 24, 2018 at 06:06:53PM +0200, Christoph Hellwig wrote:
> On Tue, Apr 24, 2018 at 08:19:16AM -0700, Andrew Morton wrote:
> > > > I want to ask if it is time to start using poorman function overloading
> > > > with _b_c_e(). There are millions of allocation functions for example,
> > > >
James,
The mpt3sas should be changed to mptsas. Just responding back to have
record on this problem is with old mptsas and not with mpt3sas managed
controllers.
Thanks
Sathya
-Original Message-
From: linux-scsi-ow...@vger.kernel.org
[mailto:linux-scsi-ow...@vger.kernel.org] On Behalf Of
8 bug fixes, one spelling update and one tracepoint addition. The most
serious is probably the mpt3sas write same fix because it means anyone
using these controllers sees errors when modern filesystems try to
issue discards (if the drive supports the WRITE SAME variant).
The patch is available he
On 04/25/2018 10:24 AM, Dave Carroll wrote:
> commit b60710ec7d7ab ("aacraid: enable sending of TMFs from aac_hba_send()")
>
> allows aac_hba_send() to send scsi commands, and TMF requests, but the
> existing
> code only updates the iu_type for scsi commands. For TMF requests we are
> sending
>
On 25/04/2018 17:48:14+0200, Christoph Hellwig wrote:
> And stop trying to get a reference on the submodule, procfs code deals
> with release after and unloaded module and thus removed proc entry.
small typo here^
>
> Signed-off-by: Christoph Hellwig
Acked-by: Alexandre Belloni
> ---
Common code for creating a regular file. Factor out of proc_create_data, to
be reused by other functions soon.
Signed-off-by: Christoph Hellwig
---
fs/proc/generic.c | 44 +---
fs/proc/internal.h | 2 ++
2 files changed, 27 insertions(+), 19 deletions(-
Otherwise we will leak a reference to the network namespace.
Signed-off-by: Christoph Hellwig
---
net/can/bcm.c | 2 +-
net/can/proc.c | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/net/can/bcm.c b/net/can/bcm.c
index ac5e5e34fee3..8073fa14e143 100644
--- a/net/can/b
We currently have hundreds of proc files that implement plain, read-only
seq_file based interfaces. This series consolidates them using new
procfs helpers that take the seq_operations or simple show callback
directly.
A git tree is available at:
git://git.infradead.org/users/hch/misc.git pro
Variant of proc_create_data that directly take a struct seq_operations
argument + a private state size and drastically reduces the boilerplate
code in the callers.
All trivial callers converted over.
Signed-off-by: Christoph Hellwig
---
fs/locks.c | 16 ++--
fs/proc/
commit b60710ec7d7ab ("aacraid: enable sending of TMFs from aac_hba_send()")
allows aac_hba_send() to send scsi commands, and TMF requests, but the existing
code only updates the iu_type for scsi commands. For TMF requests we are sending
an unknown iu_type to firmware, which causes a fault.
Inclu
Variants of proc_create{,_data} that directly take a struct seq_operations
argument and drastically reduces the boilerplate code in the callers.
All trivial callers converted over.
Signed-off-by: Christoph Hellwig
---
arch/ia64/hp/common/sba_iommu.c | 15 +-
arch/ia64/kernel/perfmon.c
Remove a couple indirections to make the code look like most other
protocols.
Signed-off-by: Christoph Hellwig
---
include/net/udp.h | 20 --
net/ipv4/udp.c | 99 +-
net/ipv4/udplite.c | 21 +++---
net/ipv6/udp.c | 30 +
Pass the hashtable to the proc private data instead of copying
it into the per-file private data.
Signed-off-by: Christoph Hellwig
---
include/net/raw.h | 4
net/ipv4/raw.c| 36
net/ipv6/raw.c| 6 --
3 files changed, 16 insertions(+), 30 de
Avoid most of the afinfo indirections and just call the proc helpers
directly.
Signed-off-by: Christoph Hellwig
---
include/net/tcp.h | 11 ++
net/ipv4/tcp_ipv4.c | 85 +
net/ipv6/tcp_ipv6.c | 27 +-
3 files changed, 53 insertions(+),
This helper deals with single_{open,release}_net internals and thus
belongs here.
Signed-off-by: Christoph Hellwig
---
include/linux/seq_file_net.h | 13 +
include/net/ip_vs.h | 12
2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/include/linux/s
Just use the address family from the proc private data instead of copying
it into per-file data.
Signed-off-by: Christoph Hellwig
---
net/netfilter/x_tables.c | 39 +++
1 file changed, 11 insertions(+), 28 deletions(-)
diff --git a/net/netfilter/x_tables.c b/
Variants of proc_create{,_data} that directly take a struct seq_operations
and deal with network namespaces in ->open and ->release. All callers of
proc_create + seq_open_net converted over, and seq_{open,release}_net are
removed entirely.
Signed-off-by: Christoph Hellwig
---
drivers/net/ppp/pp
The shole seq_file sequence already operates under a single RCU lock pair,
so move the pid namespace lookup into it, and stop grabbing a reference
and remove all kinds of boilerplate code.
Signed-off-by: Christoph Hellwig
---
net/ipv6/ip6_flowlabel.c | 28 +---
1 file cha
Use remove_proc_subtree to remove the whole subtree on cleanup, and
unwind the registration loop into individual calls. Switch to use
proc_create_seq where applicable.
Signed-off-by: Christoph Hellwig
Reviewed-by: Rafael J. Wysocki
---
drivers/acpi/battery.c | 121 +
Variant of proc_create_data that directly take a seq_file show
callback and deals with network namespaces in ->open and ->release.
All callers of proc_create + single_open_net converted over, and
single_{open,release}_net are removed entirely.
Signed-off-by: Christoph Hellwig
---
fs/proc/proc_ne
Remove the pointless ping_seq_afinfo indirection and make the code look
like most other protocols.
Signed-off-by: Christoph Hellwig
---
include/net/ping.h | 11 --
net/ipv4/ping.c| 50 +-
net/ipv6/ping.c| 35 +---
Use remove_proc_subtree to remove the whole subtree on cleanup, and
unwind the registration loop into individual calls. Switch to use
proc_create_single.
Signed-off-by: Christoph Hellwig
---
drivers/scsi/megaraid.c | 140 +++-
drivers/scsi/megaraid.h | 12 --
Use remove_proc_subtree to remove the whole subtree on cleanup, and
unwind the registration loop into individual calls. Switch to use
proc_create_seq where applicable.
Signed-off-by: Christoph Hellwig
---
drivers/scsi/sg.c | 124 +-
1 file changed, 12
Use remove_proc_subtree to remove the whole subtree on cleanup, and
unwind the registration loop into individual calls. Switch to use
proc_create_seq where applicable.
Signed-off-by: Christoph Hellwig
---
fs/afs/proc.c | 134 ++
1 file changed, 15
Use remove_proc_subtree to remove the whole subtree on cleanup, and
unwind the registration loop into individual calls. Switch to use
proc_create_seq where applicable.
Signed-off-by: Christoph Hellwig
---
fs/ext4/ext4.h| 2 +-
fs/ext4/mballoc.c | 29
fs/ext4/sy
And use proc private data directly instead of doing a detour
through seq->private.
Signed-off-by: Christoph Hellwig
---
.../net/wireless/intersil/hostap/hostap_ap.c | 70 ++---
.../net/wireless/intersil/hostap/hostap_hw.c | 17 +--
.../wireless/intersil/hostap/hostap_proc.c| 143 +++-
And use proc private data directly instead of doing a detour
through seq->private.
Signed-off-by: Christoph Hellwig
---
net/core/neighbour.c | 31 ++-
1 file changed, 6 insertions(+), 25 deletions(-)
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index ce51
And use the root resource directly from the proc private data.
Signed-off-by: Christoph Hellwig
---
kernel/resource.c | 43 +--
1 file changed, 5 insertions(+), 38 deletions(-)
diff --git a/kernel/resource.c b/kernel/resource.c
index 2af6c03858b9..b589dda
Use remove_proc_subtree to remove the whole subtree on cleanup, and
unwind the registration loop into individual calls. Switch to use
proc_create_seq where applicable.
Signed-off-by: Christoph Hellwig
---
fs/jfs/jfs_debug.c| 43 ++-
fs/jfs/jfs_debug.h
And stop messing with try_module_get on THIS_MODULE, which doesn't make
any sense here.
Signed-off-by: Christoph Hellwig
---
drivers/block/drbd/drbd_int.h | 2 +-
drivers/block/drbd/drbd_main.c | 3 ++-
drivers/block/drbd/drbd_proc.c | 34 +-
3 files changed, 4
And stop trying to get a reference on the submodule, procfs code deals
with release after and unloaded module and thus removed proc entry.
Signed-off-by: Christoph Hellwig
---
drivers/rtc/rtc-proc.c | 33 ++---
1 file changed, 2 insertions(+), 31 deletions(-)
diff --
And remove proc boilerplate code.
Signed-off-by: Christoph Hellwig
---
net/netfilter/x_tables.c | 42 ++--
1 file changed, 6 insertions(+), 36 deletions(-)
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
index 344dd01a5027..0e314f95a4a3 10064
The driver proc file hasn't been writeable for a long time, so this is
just dead code.
Signed-off-by: Christoph Hellwig
---
drivers/ide/ide-proc.c | 46 --
1 file changed, 46 deletions(-)
diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c
index
And switch to proc_create_single_data.
Signed-off-by: Christoph Hellwig
---
drivers/isdn/capi/kcapi.c | 3 ++-
drivers/isdn/gigaset/capi.c| 16 +---
drivers/isdn/hardware/avm/avmcard.h| 4 ++--
drivers/isdn/hardware/avm/b1.c | 17 ++-
Just set up the show callback in the tty_operations, and use
proc_create_single_data to create the file without additional
boilerplace code.
Signed-off-by: Christoph Hellwig
---
arch/ia64/hp/sim/simserial.c| 15 +--
arch/xtensa/platforms/iss/console.c | 15 +--
dr
Use remove_proc_subtree to remove the whole subtree on cleanup, and
unwind the registration loop into individual calls. Switch to use
proc_create_seq where applicable.
Signed-off-by: Christoph Hellwig
---
net/atm/proc.c | 65 ++
1 file changed, 7
Just set up the show callback in the tty_operations, and use
proc_create_single_data to create the file without additional
boilerplace code.
Signed-off-by: Christoph Hellwig
---
drivers/ide/ide-cd.c | 15 +---
drivers/ide/ide-disk_proc.c | 62 ++--
drivers/ide/ide-floppy
Signed-off-by: Christoph Hellwig
---
fs/proc/array.c | 18 --
1 file changed, 4 insertions(+), 14 deletions(-)
diff --git a/fs/proc/array.c b/fs/proc/array.c
index ae2c807fd719..b34796b562ef 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -677,7 +677,7 @@ get_children_pid(s
And use proc private data directly instead of doing a detour
through seq->private and private state.
Signed-off-by: Christoph Hellwig
---
net/bluetooth/af_bluetooth.c | 40 +---
1 file changed, 5 insertions(+), 35 deletions(-)
diff --git a/net/bluetooth/af_blueto
And remove proc boilerplate code.
Signed-off-by: Christoph Hellwig
---
net/atm/proc.c | 72 +-
1 file changed, 13 insertions(+), 59 deletions(-)
diff --git a/net/atm/proc.c b/net/atm/proc.c
index f272b0f59d82..0b0495a41bbe 100644
--- a/net/atm/pro
And use proc private data directly instead of doing a detour
through seq->private.
Signed-off-by: Christoph Hellwig
---
net/netfilter/xt_hashlimit.c | 92 +++-
1 file changed, 18 insertions(+), 74 deletions(-)
diff --git a/net/netfilter/xt_hashlimit.c b/net/netfi
Unwind the registration loop into individual calls. Switch to use
proc_create_single where applicable.
Signed-off-by: Christoph Hellwig
---
drivers/staging/rtl8192u/r8192U_core.c | 67 ++
1 file changed, 14 insertions(+), 53 deletions(-)
diff --git a/drivers/staging/rtl
And use proc private data directly instead of doing a detour
through seq->private.
Signed-off-by: Christoph Hellwig
---
drivers/net/bonding/bond_procfs.c | 36 ++-
1 file changed, 6 insertions(+), 30 deletions(-)
diff --git a/drivers/net/bonding/bond_procfs.c
b/driv
Use remove_proc_subtree to remove the whole subtree on cleanup, and
unwind the registration loop into individual calls. Switch to use
proc_create_seq where applicable.
Signed-off-by: Christoph Hellwig
---
drivers/misc/sgi-gru/gruprocfs.c | 81 ++--
1 file changed, 14
Remove a couple indirections to make the code look like most other
protocols.
Signed-off-by: Christoph Hellwig
---
net/kcm/kcmproc.c | 71 ---
1 file changed, 17 insertions(+), 54 deletions(-)
diff --git a/net/kcm/kcmproc.c b/net/kcm/kcmproc.c
index 1
Variants of proc_create{,_data} that directly take a seq_file show
callback and drastically reduces the boilerplate code in the callers.
All trivial callers converted over.
Signed-off-by: Christoph Hellwig
---
arch/arm/kernel/dma.c | 14 +---
arch/arm/kernel/swp_emulate.
Return registered entry on success, return NULL on failure and free the
passed in entry. Also expose it in internal.h as we'll start using it
in proc_net.c soon.
Signed-off-by: Christoph Hellwig
---
fs/proc/generic.c | 44 ++--
fs/proc/internal.h | 2 ++
https://bugzilla.kernel.org/show_bug.cgi?id=199435
--- Comment #19 from lober...@redhat.com ---
I was concerned about the agents but Anthony disabled them and still saw this.I
have seen this timeout sometimes when the agents probe via passthrough.
I did just bump into this reset on a 7.5 RHEL ker
https://bugzilla.kernel.org/show_bug.cgi?id=199435
--- Comment #18 from Anthony Hausman (anthonyhaussm...@gmail.com) ---
Unfortunatly I don't know what process was consuming the CPU cycles at this.
I'll try to reproduce the problem to reproduce the problem to have the
information.
I'm not using s
https://bugzilla.kernel.org/show_bug.cgi?id=199435
--- Comment #17 from Don (don.br...@microsemi.com) ---
(In reply to Anthony Hausman from comment #16)
> Don,
>
> So I'm actually running the kernel 4.16.3 (build 18-04-19) with the hpsa
> modules patch to use local work-queue insead of system wor
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/drv_fcoe_fw_funcs.c | 2 +-
drivers/scsi/qedf/drv_fcoe_fw_funcs.h | 2 +-
drivers/scsi/qedf/drv_scsi_fw_funcs.c | 2 +-
drivers/scsi/qedf/drv_scsi_fw_funcs.h | 2 +-
drivers/scsi/qedf/qedf.h | 2 +-
drivers/scsi/qedf/qedf_attr.c
Similar to what we do when we remove a PCI function, set the
QEDF_UNLOADING flag to prevent any requests from being queued while
a vport is being deleted. This prevents any requests from getting
stuck in limbo when the vport is unloaded or deleted.
Fixes the crash:
PID: 106676 TASK: 9a436aa
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_version.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/qedf/qedf_version.h b/drivers/scsi/qedf/qedf_version.h
index 4a19e6f6d843..9455faacd5de 100644
--- a/drivers/scsi/qedf/qedf_version.h
+++ b/drivers/
There are a couple of kernel cases when we restart a remote port due to
ABTS timeout that we need to handle:
1. Flush any outstanding ABTS requests when flushing I/Os so that we do not
hold up the eh_abort handler indefinitely causing process hangs.
2. Check if we are currently uploading a conn
During an uplink toggle test all error handling is done via timeout and
firmware error conditions which can occur concurrentl:
- SCSI layer timeouts
- Error detect CQEs
- Firmware detected underruns
- ABTS timeouts
All these concurrent events require more defensive checks in the driver
including:
Get all firmware debug data instead of just a grc dump.
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf.h | 2 ++
drivers/scsi/qedf/qedf_dbg.c | 2 +-
drivers/scsi/qedf/qedf_main.c | 13 -
3 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/qedf
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_io.c | 9 +
1 file changed, 9 insertions(+)
diff --git a/drivers/scsi/qedf/qedf_io.c b/drivers/scsi/qedf/qedf_io.c
index 94d6455c9ddc..78cbd126c7e5 100644
--- a/drivers/scsi/qedf/qedf_io.c
+++ b/drivers/scsi/qedf/qedf_io.c
@@ -931,6 +
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_main.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c
index 0150f2e4e75c..31fc64b23566 100644
--- a/drivers/scsi/qedf/qedf_main.c
+++ b/drivers/scsi/qedf/qedf
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_main.c | 9 -
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c
index 3e9befcbd5ba..0150f2e4e75c 100644
--- a/drivers/scsi/qedf/qedf_main.c
+++ b/drivers/scsi/qed
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_main.c | 7 +++
1 file changed, 7 insertions(+)
diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c
index 8dcacc5b5f60..1a58f4a9cdf9 100644
--- a/drivers/scsi/qedf/qedf_main.c
+++ b/drivers/scsi/qedf/qedf_main.c
@@
Hi Martin,
Please add these patches to your tree for the next kernel merge window at your
convenience.
Thanks,
Chad
Chad Dupuis (20):
qedf: Synchronize rport restarts when multiple ELS commands time out.
qedf: Increase the number of default FIP VLAN request retries to 60.
qedf: Add missin
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_fip.c | 1 +
drivers/scsi/qedf/qedf_main.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/drivers/scsi/qedf/qedf_fip.c b/drivers/scsi/qedf/qedf_fip.c
index 773558fc0697..aef199c12fb4 100644
--- a/drivers/scsi/qedf/qedf_fip.c
+++ b/driv
From: Saurav Kashyap
PROBLEM DESCRIPTION:
According to the logs STAG was changing and it was triggering soft reset.
In soft reset we used to virtual link down and up and also we were
disabling DCBx flag. Since this was virtual link flap, DCBx never used to
converge again.
SOLUTION:
Code change
Some configurations need more than 30 seconds to respond to a FIP VLAN
request so increase the default to 60 seconds.
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_main.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_fip.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/scsi/qedf/qedf_fip.c b/drivers/scsi/qedf/qedf_fip.c
index aef199c12fb4..c6b984efa5e8 100644
--- a/drivers/scsi/qedf/qedf_fip.c
+++ b/drivers/scsi/qedf/qedf_fip.c
We need to check that a fcport is offloaded before we try to flush any
requests. No doing so could lead to undefined results and most likely a
crash.
Fixes the oops:
[ 343.971886] [:42:00.3]:[qedf_execute_tmf:2070]:8: wait for tm_cmpl
timeout!
[ 343.971933] BUG: unable to handle kernel pa
If multiple ELS commands time out, such as aborts, they could all try to
restart the same rport and the same time. This could mean multiple
multiple processes trying to clean up any outstanding commands or trying
to upload the same port.
Add a new flag (QEDF_RPORT_IN_RESET) and check other fcport
When an RRQ request times out the reference is not getting decremented
correctly as there are still ELS commands leftover when we flush any
pending I/Os during offload:
[ 281.788553] [:21:00.3]:[qedf_cmd_timeout:58]:4: ELS timeout, xid=0x96a.
...
[ 281.788553] [:21:00.3]:[qedf_cmd_timeou
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_main.c | 5 +
1 file changed, 5 insertions(+)
diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c
index 64491ae60059..866989ccd66e 100644
--- a/drivers/scsi/qedf/qedf_main.c
+++ b/drivers/scsi/qedf/qedf_main.c
@@ -4
Helps to corroborate which requests we can't get reference on and if it's
real bug or not.
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_io.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/scsi/qedf/qedf_io.c b/drivers/scsi/qedf/qedf_io.c
index 78cbd126
We currently hard code the priority in the 8021q tag to 3 for FCoE
traffic. The vast majority of the time this is fine but if the priority
is something else besides 3, any VLAN ID comparison either in the
non-offload path or offload path will fail and cause dropped frames where
none are expected.
This module parameter is to work around cases where we do not receive the DCBX
handler notification from qed but discovery is still possible if we send out
a FIP VLAN request irregardless of the DCBX state.
Signed-off-by: Chad Dupuis
---
drivers/scsi/qedf/qedf_main.c | 11 +--
1 file cha
Dear Bart,
On 04/25/18 14:26, Bart Van Assche wrote:
On Wed, 2018-04-25 at 07:37 +0200, Paul Menzel wrote:
Am 24.04.2018 um 23:17 schrieb Bart Van Assche:
On Tue, 2018-04-24 at 23:04 +0200, Paul Menzel wrote:
I applied your change, and rebuilt the Linux kernel. Unfortunately, it
looks like,
On Wed, 2018-04-25 at 07:37 +0200, Paul Menzel wrote:
> Am 24.04.2018 um 23:17 schrieb Bart Van Assche:
> > On Tue, 2018-04-24 at 23:04 +0200, Paul Menzel wrote:
> > > I applied your change, and rebuilt the Linux kernel. Unfortunately, it
> > > looks like, it didn’t make a difference.
> >
> > In t
4.14-stable review patch. If anyone has any objections, please let me know.
--
From: Xose Vazquez Perez
[ Upstream commit 3f884a0a8bdf28cfd1e9987d54d83350096cdd46 ]
Replace "" with NULL for product revision level, and merge TEXEL
duplicate entries.
Cc: Hannes Reinecke
Cc: M
From: Colin Ian King
The sanity check on u->in_connection_align_insertion_frequency is being
performed twice and hence the first check can be removed since it is
redundant. Cleans up cppcheck warning:
drivers/scsi/ibmvscsi/ibmvscsi.c:1711: (warning) Identical inner 'if'
condition is always true.
https://bugzilla.kernel.org/show_bug.cgi?id=199435
--- Comment #16 from Anthony Hausman (anthonyhaussm...@gmail.com) ---
Don,
So I'm actually running the kernel 4.16.3 (build 18-04-19) with the hpsa
modules patch to use local work-queue insead of system work-queue.
I have a reproduce a reset wit
78 matches
Mail list logo