On 09/04/2018 07:53 AM, Michal Privoznik wrote:
> On 08/31/2018 08:42 PM, John Ferlan wrote:
>>
>>
>> On 08/27/2018 04:08 AM, Michal Privoznik wrote:
>>> This is basically just a wrapper over virLockManagerCloseConn()
>>> so that no connection is left open when it shouldn't be.
>>>
>>>
On Tue, Sep 04, 2018 at 01:01:34PM +0200, Andrea Bolognani wrote:
> Up until now, we've been considering MinGW builds as
> part of the respective project, at least when it
> comes to grouping them. This, however, does not quite
> work for a number of reasons:
>
> * MinGW builds have their own
On Tue, Sep 04, 2018 at 03:22:35PM +0200, Igor Mammedov wrote:
> -smp [cpus],sockets/cores/threads[,maxcpus] should describe topology
> so that total number of logical CPUs [sockets * cores * threads]
> would be equal to [maxcpus], however historically we didn't have
> such check in QEMU and it is
On Tue, 2018-09-04 at 16:09 +0200, Ján Tomko wrote:
> On Fri, Aug 31, 2018 at 04:03:10PM +0200, Andrea Bolognani wrote:
> > +static char*
> > +qemuBuildVirtioDevStr(const virDomainDeviceInfo *info,
> > + const char *baseName)
[...]
> > +virBufferAsprintf(, "%s-%s",
On Tue, Sep 04, 2018 at 05:18:48PM +0200, Andrew Jones wrote:
> On Tue, Sep 04, 2018 at 03:22:36PM +0200, Igor Mammedov wrote:
> > commit
> > (5cdc9b76e3 vl.c: Remove dead assignment)
> > removed sockets calculation when 'sockets' weren't provided on CLI
> > since there wasn't any users for it
Hi,
This series was run against 'syntax-check' test by patchew.org, which failed,
please find the details below:
Type: series
Message-id: 20180905023833.4867-1-jcfara...@gmail.com
Subject: [libvirt] [PATCH v4 0/4] Add .domainGetHostname() support for QEMU
driver.
=== TEST SCRIPT BEGIN ===
On Tue, Sep 04, 2018 at 03:22:35PM +0200, Igor Mammedov wrote:
> -smp [cpus],sockets/cores/threads[,maxcpus] should describe topology
> so that total number of logical CPUs [sockets * cores * threads]
> would be equal to [maxcpus], however historically we didn't have
> such check in QEMU and it is
This commit adds support to use the function qemuAgentGetHostname()
for obtain the domain hostname using QEMU-GA command.
Signed-off-by: Julio Faracco
---
src/qemu/qemu_driver.c | 42 ++
1 file changed, 42 insertions(+)
diff --git
The function to retrieve the file system info using QEMU-GA is using
some conditionals to retrieve the info. This is wrong because the error
of some conditionals will be raised if VIR_STRDUP return errors and not
if some problem occurred with JSON.
Signed-off-by: Julio Faracco
---
This serie adds a new function into QEMU Guest Agent handler to use the
QEMU command 'guest-get-host-name' to retrieve the domain hostname. This
approach requires QEMU-GA running inside the guest, but it is the fastest
and easiest way to get this info.
This serie has some suggestion made by
This commit implements the function qemuAgentGetHostname() that uses
the QEMU guest agent command 'guest-get-host-name' to retrieve the
guest hostname of virtual machine running the QEMU-GA.
Signed-off-by: Julio Faracco
---
src/qemu/qemu_agent.c | 47 +++
QEMU-GA supports get geust hostname command. This commit includes a
specific entry to inform this new feature for QEMU driver to 4.8.0
release.
Signed-off-by: Julio Faracco
---
docs/news.xml | 9 +
1 file changed, 9 insertions(+)
diff --git a/docs/news.xml b/docs/news.xml
index
hi reviewer,
I understand libvirt community is quite active and you are quite busy. I
am written here to know if you ever noticed this patch series, and
welcome your comment.
BR
On 2018年08月27日 19:23, Wang Huaqiang wrote:
This series of patches introduced the x86 Cache Monitoring
On 09/03/2018 01:09 PM, Ján Tomko wrote:
> On Mon, Sep 03, 2018 at 10:04:16AM +0200, Michal Prívozník wrote:
>> On 09/03/2018 09:38 AM, Povilas Kanapickas wrote:
>>> Hi!
>>>
>>> The online virsh command reference at [1] seems to be very out of date
>>> according to [2]. There's much more recent
Right now in virt-manager we only track a VM's OS name (win10, fedora28,
etc.) during the VM install phase. This piece of data is important
post-install though: if the user adds a new disk to the VM later, we
want to be able to ask libosinfo about what devices the installed OS
supports, so we
On Fri, Aug 31, 2018 at 04:03:10PM +0200, Andrea Bolognani wrote:
A virtio device such as
will be translated to one of four different QEMU devices
based on the address type. This behavior is the same for
all virtio devices, but unfortunately we have separate
ad-hoc code dealing with each and
On 09/03/2018 11:13 AM, Michal Privoznik wrote:
> On 08/30/2018 11:47 PM, John Ferlan wrote:
>>
>>
>> On 08/27/2018 04:08 AM, Michal Privoznik wrote:
>>> At the beginning of each dispatch function we check if owner
>>> attributes were registered (these consist of ID, UUID, PID and
>>> name).
On Tue, Sep 04, 2018 at 04:57:42PM +0200, Simon Kobyda wrote:
> On Tue, 2018-09-04 at 11:30 +0100, Daniel P. Berrangé wrote:
> > The expected output strings from the vshtabletest.c are created on a
> > modern Linux host where unicode printing support is very good. On
> > older
> > Linux platforms,
On 09/03/2018 11:13 AM, Michal Privoznik wrote:
> On 08/31/2018 07:35 PM, John Ferlan wrote:
>>
>>
>> On 08/27/2018 04:08 AM, Michal Privoznik wrote:
>>> When creating the security managers stack load the lock plugin
>>> too. This is done by creating a single object that all secdrivers
>>> take
The distros we support for RPM builds all have %autosetup
support. Use that instead of what we currently have (nothing).
Signed-off-by: Michal Privoznik
---
Pushed under trivial rule and also 'who cares about snmp' rules ;-)
libvirt-snmp.spec.in | 2 +-
1 file changed, 1 insertion(+), 1
-smp [cpus],sockets/cores/threads[,maxcpus] should describe topology
so that total number of logical CPUs [sockets * cores * threads]
would be equal to [maxcpus], however historically we didn't have
such check in QEMU and it is possible to start VM with an invalid
topology.
Deprecate invalid
On Fri, Aug 31, 2018 at 04:03:09PM +0200, Andrea Bolognani wrote:
virtio-serial is an alias for virtio-serial-pci, which
should not have been used for a PCIe-less aarch64/virt
guest but it ended up being used anyway because the
I tried using the XML file with DO_TEST_CAPS_ARCH_LATEST
and it
The test driver provides a default storage pool at
/default-pool. Libvirt now enforces source path uniqueness, so we must
pick a different path for our test pools.
Signed-off-by: Daniel P. Berrangé
---
Pushed as a build fix
connect_test.go | 6 +++---
storage_pool_test.go | 2 +-
2 files
The path /default-pool is used by a predefined storage pool in the test
driver, and libvirt now enforces pool source uniqueness.
Signed-off-by: Daniel P. Berrangé
---
Pushed as a build fix
t/400-storage-pools.t | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git
commit
(5cdc9b76e3 vl.c: Remove dead assignment)
removed sockets calculation when 'sockets' weren't provided on CLI
since there wasn't any users for it back then. Exiting checks
are neither reachable
} else if (sockets * cores * threads < cpus) {
or nor triggable
if (sockets * cores *
-smp [cpus],sockets/cores/threads[,maxcpus] should describe topology
so that total number of logical CPUs [sockets * cores * threads]
would be equal to [maxcpus], however historically we didn't have
such check in QEMU and it is possible to start VM with an invalid
topology.
Deprecate invalid
Changelog since v4:
* extend deprication doc, adding that maxcpus should be multiple of
present on CLI [sockets/cores/threads] options
(Eduardo Habkost )
series bundles together 2 related patches posted separately earlier:
vl.c deprecate incorrect CPUs topology
vl:c: make
On Tue, 2018-09-04 at 11:30 +0100, Daniel P. Berrangé wrote:
> The expected output strings from the vshtabletest.c are created on a
> modern Linux host where unicode printing support is very good. On
> older
> Linux platforms, or non-Linux platforms, some unicode characters will
> not be
On Tue, Sep 04, 2018 at 03:59:23PM +0200, Andrea Bolognani wrote:
> During each Rawhide development cycle there is a point
> at which packages start being signed with new keys, which
> causes updates to fail.
>
> To work around the problem, make sure fedora-gpg-keys is
> updated before attempting
On Tue, Sep 04, 2018 at 05:32:51PM +0200, Andrea Bolognani wrote:
On Tue, 2018-09-04 at 16:09 +0200, Ján Tomko wrote:
On Fri, Aug 31, 2018 at 04:03:10PM +0200, Andrea Bolognani wrote:
> +static char*
> +qemuBuildVirtioDevStr(const virDomainDeviceInfo *info,
> + const char
On 09/03/2018 11:13 AM, Michal Privoznik wrote:
> On 08/30/2018 11:34 PM, John Ferlan wrote:
>>
>>
>> On 08/27/2018 04:08 AM, Michal Privoznik wrote:
>>> This is a new type of object that lock drivers can handle.
>>> Currently, it is supported by lockd driver only.
>>>
>>> Signed-off-by: Michal
On 09/03/2018 11:13 AM, Michal Privoznik wrote:
> On 08/30/2018 10:40 PM, John Ferlan wrote:
>>
>>
>> On 08/27/2018 04:08 AM, Michal Privoznik wrote:
>>> We will want virtlockd to lock files on behalf of libvirtd and
>>> not qemu process, because it is libvirtd that needs an exclusive
>>>
On Tue, Sep 04, 2018 at 03:22:36PM +0200, Igor Mammedov wrote:
> commit
> (5cdc9b76e3 vl.c: Remove dead assignment)
> removed sockets calculation when 'sockets' weren't provided on CLI
> since there wasn't any users for it back then. Exiting checks
> are neither reachable
>} else if (sockets
During each Rawhide development cycle there is a point
at which packages start being signed with new keys, which
causes updates to fail.
To work around the problem, make sure fedora-gpg-keys is
updated before attempting to update all other packages;
updating fedora-gpg-keys itself requires gpg
On Tue, 2018-09-04 at 16:11 +0200, Erik Skultety wrote:
> On Tue, Sep 04, 2018 at 01:01:34PM +0200, Andrea Bolognani wrote:
> > Up until now, we've been considering MinGW builds as
> > part of the respective project, at least when it
> > comes to grouping them. This, however, does not quite
> >
On 09/03/2018 02:44 PM, Miguel Martin wrote:
> The objects OIDs sent by the guest agent are:
> libvirtGuestName.0
> libvirtGuestUUID.1
> libvirtGuestState.2
> libvirtGuestRowStatus.3
>
> The expected libvirtGuestNotif objects OID would be:
> libvirtGuestName.0
> libvirtGuestUUID.0
>
On Tue, 2018-09-04 at 12:01 +0100, Daniel P. Berrangé wrote:
> If no JSON parser is available qemublocktest fails, so skip its execution.
>
> Signed-off-by: Daniel P. Berrangé
> ---
>
> Pushed as a build fix for platforms without JSON parser installed
Which platforms? All machines in our CI
On Tue, Sep 04, 2018 at 02:00:21PM +0200, Andrea Bolognani wrote:
> On Tue, 2018-09-04 at 12:01 +0100, Daniel P. Berrangé wrote:
> > If no JSON parser is available qemublocktest fails, so skip its execution.
> >
> > Signed-off-by: Daniel P. Berrangé
> > ---
> >
> > Pushed as a build fix for
On Tue, Sep 04, 2018 at 02:00:21PM +0200, Andrea Bolognani wrote:
On Tue, 2018-09-04 at 12:01 +0100, Daniel P. Berrangé wrote:
If no JSON parser is available qemublocktest fails, so skip its execution.
Signed-off-by: Daniel P. Berrangé
---
Pushed as a build fix for platforms without JSON
On Tue, 2018-09-04 at 13:05 +0100, Daniel P. Berrangé wrote:
> > > Pushed as a build fix for platforms without JSON parser installed
> >
> > Which platforms? All machines in our CI environments should have
> > yajl installed.
>
> It wasn't CI - it was my own FreeBSD machine without yajl
I see
On Tue, Sep 04, 2018 at 02:10:56PM +0200, Andrea Bolognani wrote:
> On Tue, 2018-09-04 at 13:05 +0100, Daniel P. Berrangé wrote:
> > > > Pushed as a build fix for platforms without JSON parser installed
> > >
> > > Which platforms? All machines in our CI environments should have
> > > yajl
Current versions of Ansible support the password_hash()
filter, so we can avoid hardcoding a pre-computed hash
and make what's happening a bit clearer.
Signed-off-by: Andrea Bolognani
---
guests/playbooks/update/tasks/users.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git
This serie adds a new function into QEMU Guest Agent handler to use the
QEMU command 'guest-get-host-name' to retrieve the domain hostname. This
approach requires QEMU-GA running inside the guest, but it is the fastest
and easiest way to get this info.
This serie has some suggestion made by John
This commit implements the function qemuAgentGetHostname() that uses
the QEMU guest agent command 'guest-get-host-name' to retrieve the
guest hostname of virtual machine running the QEMU-GA.
Signed-off-by: Julio Faracco
---
src/qemu/qemu_agent.c | 47 +++
This commit adds support to use the function qemuAgentGetHostname()
for obtain the domain hostname using QEMU-GA command.
Signed-off-by: Julio Faracco
---
src/qemu/qemu_driver.c | 42 ++
1 file changed, 42 insertions(+)
diff --git
The function to retrieve the file system info using QEMU-GA is using
some conditionals to retrieve the info. This is wrong because the error
of some conditionals will be raised if VIR_STRDUP return errors and not
if some problem occurred with JSON.
Signed-off-by: Julio Faracco
---
QEMU-GA supports get geust hostname command. This commit includes a
specific entry to inform this new feature for QEMU driver to 4.8.0
release.
Signed-off-by: Julio Faracco
---
docs/news.xml | 10 ++
1 file changed, 10 insertions(+)
diff --git a/docs/news.xml b/docs/news.xml
index
See patch 2/3 for the rationale.
Andrea Bolognani (3):
guests: Split MinGW projects
Split off MinGW builds
Remove 'variant'
.../host_vars/libvirt-fedora-rawhide/main.yml | 15 -
.../build/jobs/autotools-build-job.yml| 4 ++--
.../build/jobs/autotools-check-job.yml
It's no longer used anywhere.
Signed-off-by: Andrea Bolognani
---
.../playbooks/build/jobs/autotools-build-job.yml | 4 ++--
.../playbooks/build/jobs/autotools-check-job.yml | 4 ++--
.../playbooks/build/jobs/autotools-rpm-job.yml | 4 ++--
.../build/jobs/autotools-syntax-check-job.yml
The 32-bit and 64-bit MinGW builds require almost
completely different sets of packages, so it makes
sense to split them off into separate pseudo-projects
in order to have more control over what gets
installed on each host.
Signed-off-by: Andrea Bolognani
---
On 08/31/2018 08:42 PM, John Ferlan wrote:
>
>
> On 08/27/2018 04:08 AM, Michal Privoznik wrote:
>> This is basically just a wrapper over virLockManagerCloseConn()
>> so that no connection is left open when it shouldn't be.
>>
>> Signed-off-by: Michal Privoznik
>> ---
>>
On Tue, 2018-09-04 at 10:49 +0200, Martin Kletzander wrote:
s/manually/ourselves/ in the subject.
[...]
> def get_root_password_file(self):
> -root_pass_file = self._get_config_file("root-password")
> -root_hash_file = self._get_config_file(".root-password.hash")
> -
> -
The expected output strings from the vshtabletest.c are created on a
modern Linux host where unicode printing support is very good. On older
Linux platforms, or non-Linux platforms, some unicode characters will
not be considered printable. While the vsh table alignment code will
stil do the right
Up until now, we've been considering MinGW builds as
part of the respective project, at least when it
comes to grouping them. This, however, does not quite
work for a number of reasons:
* MinGW builds have their own workspace, separate
from the native one. It goes further than that:
If no JSON parser is available qemublocktest fails, so skip its execution.
Signed-off-by: Daniel P. Berrangé
---
Pushed as a build fix for platforms without JSON parser installed
tests/qemublocktest.c | 36 +++-
1 file changed, 23 insertions(+), 13 deletions(-)
On Tue, Aug 28, 2018 at 04:40:16PM +0800, Yi Wang wrote:
When doing some job holding state lock for a long time,
we may come across error:
"Timed out during operation: cannot acquire state change lock"
Well, sometimes it's not a problem and users wanner continue
s/wanner/want to/
to wait,
On Fri, Aug 31, 2018 at 12:16:14PM +0200, Andrea Bolognani wrote:
> On Wed, 2018-08-29 at 17:08 +0200, Andrea Bolognani wrote:
> > This will allow users to build arbitrary branches from
> > arbitrary git repositories, but for the moment all it
> > does is parse the argument and pass it down to the
On Tue, 2018-09-04 at 09:55 +0200, Erik Skultety wrote:
> Initially, I wanted to point out that "revision" is probably not the best name
[...]
I was thinking yesterday that perhaps it would be better to
use '-g GITREVISION' here instead, to leave '-r' available for
future extensions, eg. when/if
Hi, Peter. I have questions to several of your comments:
On 03.09.2018 14:59, Peter Krempa wrote:
> On Mon, Sep 03, 2018 at 13:58:31 +0300, Nikolay Shirokovskiy wrote:
>> This patch adds option to configure/read latency histogram of
>> block device IO operations. The corresponding functionality
This patch adds new functions for reservation, assignment and release
to handle the uid/fid. If the uid/fid is defined in the domain XML,
they will be reserved directly in collecting phase. If any of them is
not defined, we will find out an available value for it from zPCI
address hashtable, and
Update 'Device address' section to describe the 'uid' and 'fid'
attributes.
Signed-off-by: Yi Min Zhao
Reviewed-by: Boris Fiuczynski
Reviewed-by: Stefan Zimmermann
Reviewed-by: Ján Tomko
Reviewed-by: Andrea Bolognani
---
docs/formatdomain.html.in | 9 -
1 file changed, 8
Add new functions to generate zPCI command string and append it to
QEMU command line. And the related tests are added.
Signed-off-by: Yi Min Zhao
Reviewed-by: Boris Fiuczynski
Reviewed-by: Stefan Zimmermann
Reviewed-by: Bjoern Walk
Reviewed-by: Ján Tomko
---
src/qemu/qemu_command.c
Abstract
The PCI representation in QEMU has recently been extended for S390
allowing configuration of zPCI attributes like uid (user-defined
identifier) and fid (PCI function identifier).
The details can be found here:
https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg07262.html
Let's introduce zPCI capability.
Signed-off-by: Yi Min Zhao
Reviewed-by: Boris Fiuczynski
Reviewed-by: Stefan Zimmermann
Reviewed-by: Bjoern Walk
Reviewed-by: Ján Tomko
Reviewed-by: Andrea Bolognani
---
src/qemu/qemu_capabilities.c | 2 ++
src/qemu/qemu_capabilities.h
Since version 1.9 ansible supports password_hash filter that can do that for us.
Signed-off-by: Martin Kletzander
---
guests/lcitool | 29 +
guests/playbooks/update/tasks/users.yml | 2 +-
2 files changed, 2 insertions(+), 29 deletions(-)
diff
On Wed, Aug 29, 2018 at 05:09:01PM +0200, Andrea Bolognani wrote:
> This makes the build process use the value provided by
> the user through lcitool instead of the default.
>
> Signed-off-by: Andrea Bolognani
> ---
Reviewed-by: Erik Skultety
--
libvir-list mailing list
libvir-list@redhat.com
On Wed, Aug 29, 2018 at 05:09:04PM +0200, Andrea Bolognani wrote:
> This makes the build process use the value provided
> by the user through lcitool instead of the default.
>
> With this change, building arbitrary branches from
> arbitrary git repository through lcitool is fully
> working.
>
>
On Wed, Aug 29, 2018 at 05:08:59PM +0200, Andrea Bolognani wrote:
> We'll soon to make it possible to build arbitrary branches
> from arbitrary git repositories with lcitool: sticking with
> the current scheme for on-disk storage would mean that we
> would create a separate git clone for each
Add zPCI definitions in preparation of extending the PCI address
with parameters uid (user-defined identifier) and fid (PCI function
identifier).
Signed-off-by: Yi Min Zhao
Reviewed-by: Boris Fiuczynski
Reviewed-by: Stefan Zimmermann
Reviewed-by: Bjoern Walk
Reviewed-by: Ján Tomko
---
This patch provides a caching mechanism for the device address
extensions uid and fid on S390. For efficient sparse address allocation,
we introduce two hash tables for uid/fid which hold the address set
information per domain. Also in order to improve performance of
searching available value, we
Signed-off-by: Yi Min Zhao
Reviewed-by: Boris Fiuczynski
Reviewed-by: Stefan Zimmermann
Reviewed-by: Ján Tomko
---
docs/news.xml | 10 ++
1 file changed, 10 insertions(+)
diff --git a/docs/news.xml b/docs/news.xml
index 9a17b2f612..fc54a3b6ff 100644
--- a/docs/news.xml
+++
On Tue, Sep 04, 2018 at 10:33:18AM +0200, Andrea Bolognani wrote:
> On Tue, 2018-09-04 at 09:55 +0200, Erik Skultety wrote:
> > Initially, I wanted to point out that "revision" is probably not the best
> > name
> [...]
>
> I was thinking yesterday that perhaps it would be better to
> use '-g
This patch introduces new XML parser/formatter functions. Uid is
16-bit and non-zero. Fid is 32-bit. They are added as two new
attributes of PCI address, and parsed/formatted along with PCI
address parser/formatter. The related test is also added.
Signed-off-by: Yi Min Zhao
Reviewed-by: Boris
The pci-root depends on zpci capability. So autogenerate pci-root if
zpci exists.
Signed-off-by: Yi Min Zhao
Reviewed-by: Boris Fiuczynski
Reviewed-by: Stefan Zimmermann
Reviewed-by: Bjoern Walk
Reviewed-by: Ján Tomko
Reviewed-by: Andrea Bolognani
---
src/qemu/qemu_domain.c | 1 +
1 file
QEMU on s390 supports PCI multibus since forever.
Signed-off-by: Yi Min Zhao
Reviewed-by: Boris Fiuczynski
Reviewed-by: Stefan Zimmermann
Reviewed-by: Bjoern Walk
Reviewed-by: Ján Tomko
Reviewed-by: Andrea Bolognani
---
src/qemu/qemu_capabilities.c | 4
1 file changed, 4 insertions(+)
This patch introduces a new attribute PCI address extension flag
to deal with the extension PCI attributes such as 'uid' and 'fid'
on the S390 platform.
Signed-off-by: Yi Min Zhao
Reviewed-by: Boris Fiuczynski
Reviewed-by: Ján Tomko
Reviewed-by: Andrea Bolognani
---
src/conf/device_conf.h
This commit adds hotplug support for PCI devices on S390 guests.
There's no need to implement hot unplug for zPCI as QEMU implements
an unplug callback which will unplug both PCI and zPCI device in a
cascaded way.
Currently, the following PCI devices are supported:
virtio-blk-pci
We should ensure that the Qemu should support zPCI when zPCI address is
defined in XML. Otherwise the error should be reported. So this patch
introduces the validation of zPCI address definition for
qemuDomainDeviceDefValidate().
Signed-off-by: Yi Min Zhao
---
src/qemu/qemu_domain.c | 26
On Wed, Aug 29, 2018 at 05:09:05PM +0200, Andrea Bolognani wrote:
> Provide instructions on how to build from non-default
> git repositories and branches.
>
> Signed-off-by: Andrea Bolognani
> ---
With the necessary updates on '-g' being optional:
Reviewed-by: Erik Skultety
>
On Wed, Aug 29, 2018 at 05:09:03PM +0200, Andrea Bolognani wrote:
> Out of the box, it contains the upstream repository for
> all projects; additionally, the user will be able to
> store information about their own repositories, making
> it possible to test-build in-progress branches before
>
Hi,
This series was run against 'syntax-check' test by patchew.org, which failed,
please find the details below:
Type: series
Message-id: 20180830120941.22155-1-marcandre.lur...@redhat.com
Subject: [libvirt] [PATCH] qemu: clear seccomp capability if TSYNC is not
supported by host
=== TEST
81 matches
Mail list logo