qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [qemu/qemu] 2bd01a: test-visitor-serialization: Fix some


From: GitHub
Subject: [Qemu-commits] [qemu/qemu] 2bd01a: test-visitor-serialization: Fix some memory leaks
Date: Fri, 05 Apr 2013 12:00:19 -0700

  Branch: refs/heads/master
  Home:   https://github.com/qemu/qemu
  Commit: 2bd01ac1e238c76e201ba21f314cec46437d2c5a
      
https://github.com/qemu/qemu/commit/2bd01ac1e238c76e201ba21f314cec46437d2c5a
  Author: Stefan Berger <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M tests/test-visitor-serialization.c

  Log Message:
  -----------
  test-visitor-serialization: Fix some memory leaks

This patch fixes some of the memory leaks in test-visitor-serialization but not 
all of them.

Signed-off-by: Stefan Berger <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>


  Commit: abe20840166e6f04d3ab60f8d53a2ff5907bd942
      
https://github.com/qemu/qemu/commit/abe20840166e6f04d3ab60f8d53a2ff5907bd942
  Author: Peter Maydell <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M linux-user/strace.c

  Log Message:
  -----------
  linux-user: Don't omit comma for strace of rt_sigaction()

Pass the 'last' parameter of print_signal() through to
print_raw_param(); this fixes a problem where we weren't printing
the comma separator for strace of rt_sigaction() when the signal
was an unnamed (ie realtime) one:
  6856 rt_sigaction(230xf6fff870,0xf6fff8fc) = 0

Signed-off-by: Peter Maydell <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>


  Commit: 54d49ac99227aff646ac940abfab3417f5cb1693
      
https://github.com/qemu/qemu/commit/54d49ac99227aff646ac940abfab3417f5cb1693
  Author: Luiz Capitulino <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M include/qapi/qmp/qstring.h
    M qobject/qstring.c

  Log Message:
  -----------
  qstring: add qstring_get_length()

Long overdue.

Signed-off-by: Luiz Capitulino <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Acked-by: Gerd Hoffmann <address@hidden>


  Commit: e1f2641b5926d20f63d36f0de45206be774da8da
      
https://github.com/qemu/qemu/commit/e1f2641b5926d20f63d36f0de45206be774da8da
  Author: Luiz Capitulino <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M monitor.c

  Log Message:
  -----------
  Monitor: Make output buffer dynamic

Commit f628926bb423fa8a7e0b114511400ea9df38b76a changed monitor_flush()
to retry on qemu_chr_fe_write() errors. However, the Monitor's output
buffer can keep growing while the retry is not issued and this can
cause the buffer to overflow.

To reproduce this issue, just start qemu and type on the Monitor:

(qemu) ?

This will cause an assertion to trig.

To fix this problem this commit makes the Monitor buffer dynamic,
which means that it can grow as much as needed.

Signed-off-by: Luiz Capitulino <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Acked-by: Gerd Hoffmann <address@hidden>


  Commit: 48c043d0d1835c64b571c484a9f229fe6d220287
      
https://github.com/qemu/qemu/commit/48c043d0d1835c64b571c484a9f229fe6d220287
  Author: Luiz Capitulino <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M monitor.c

  Log Message:
  -----------
  hmp: human-monitor-command: stop using the Memory chardev driver

The Memory chardev driver was added because, as the Monitor's output
buffer was static, we needed a way to accumulate the output of an
HMP commmand when ran by human-monitor-command.

However, the Monitor's output buffer is now dynamic, so it's possible
for the human-monitor-command to use it instead of the Memory chardev
driver.

This commit does that change, but there are two important
observations about it:

 1. We need a way to signal to the Monitor that it shouldn't call
    chardev functions when flushing its output. This is done
    by adding a new flag to the Monitor object called skip_flush
        (which is set to true by qmp_human_monitor_command())

 2. The current code has buffered semantics: QMP clients will
    only see a command's output if it flushes its output with
        a new-line character. This commit changes this to unbuffered,
        which means that QMP clients will see a command's output
        whenever the command prints anything.

        I don't think this will matter in practice though, as I believe
        all HMP commands print the new-line character anyway.

Signed-off-by: Luiz Capitulino <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Acked-by: Gerd Hoffmann <address@hidden>


  Commit: 4bf0bb8014ac2ac61b1004f5d92b2a4594d48017
      
https://github.com/qemu/qemu/commit/4bf0bb8014ac2ac61b1004f5d92b2a4594d48017
  Author: Luiz Capitulino <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M qemu-char.c

  Log Message:
  -----------
  chardev: drop the Memory chardev driver

It's not used anymore since the last commit.

Signed-off-by: Luiz Capitulino <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Acked-by: Gerd Hoffmann <address@hidden>


  Commit: 5b90a86629dcc075be294524696e6199266f72ad
      
https://github.com/qemu/qemu/commit/5b90a86629dcc075be294524696e6199266f72ad
  Author: Richard Henderson <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M target-s390x/translate.c

  Log Message:
  -----------
  target-s390: Fix SRNMT

Fallthough into abort = oops.

Cc: address@hidden
Cc: Alexander Graf <address@hidden>
Signed-off-by: Richard Henderson <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>


  Commit: e641080fdc1e81290564e1e9ec4fe7637011fa82
      
https://github.com/qemu/qemu/commit/e641080fdc1e81290564e1e9ec4fe7637011fa82
  Author: Peter Crosthwaite <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M hw/microblaze/petalogix_ml605_mmu.c

  Log Message:
  -----------
  petalogix_ml605_mmu: Cleanup ssi_create_slave()

With the recent m25p80 cleanup there is no need to use
ssi_create_slave_no_init() anymore. Just use ssi_create_slave().

Signed-off-by: Peter Crosthwaite <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>


  Commit: f1922e36e267eae0c9d70e8660830e081878bdfc
      
https://github.com/qemu/qemu/commit/f1922e36e267eae0c9d70e8660830e081878bdfc
  Author: Peter Crosthwaite <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M hw/arm/xilinx_zynq.c

  Log Message:
  -----------
  xilinx_zynq: Cleanup ssi_create_slave

With the recent m25p80 cleanup there is no need to use
ssi_create_slave_no_init() anymore. Just use ssi_create_slave().

Signed-off-by: Peter Crosthwaite <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>


  Commit: 150a470b64c548b7539ea47526f345f15ebac355
      
https://github.com/qemu/qemu/commit/150a470b64c548b7539ea47526f345f15ebac355
  Author: Anthony Liguori <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M include/qapi/qmp/qstring.h
    M monitor.c
    M qemu-char.c
    M qobject/qstring.c

  Log Message:
  -----------
  Merge remote-tracking branch 'luiz/queue/qmp' into staging

# By Luiz Capitulino
# Via Luiz Capitulino
* luiz/queue/qmp:
  chardev: drop the Memory chardev driver
  hmp: human-monitor-command: stop using the Memory chardev driver
  Monitor: Make output buffer dynamic
  qstring: add qstring_get_length()


  Commit: 86f425db3b1c4b6c4a2927eaec35627f9ab2e703
      
https://github.com/qemu/qemu/commit/86f425db3b1c4b6c4a2927eaec35627f9ab2e703
  Author: Alex Bligh <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M hw/xen_disk.c

  Log Message:
  -----------
  Xen PV backend: Move call to bdrv_new from blk_init to blk_connect

This commit delays the point at which bdrv_new (and hence blk_open
on the underlying device) is called from blk_init to blk_connect.
This ensures that in an inbound live migrate, the block device is
not opened until it has been closed at the other end. This is in
preparation for supporting devices with open/close consistency
without using O_DIRECT. This commit does NOT itself change O_DIRECT
semantics.

Signed-off-by: Alex Bligh <address@hidden>
Signed-off-by: Stefano Stabellini <address@hidden>


  Commit: c1a88ad1f4ac994cd70695bf08141d161e21533e
      
https://github.com/qemu/qemu/commit/c1a88ad1f4ac994cd70695bf08141d161e21533e
  Author: Alex Bligh <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M hw/xen_disk.c

  Log Message:
  -----------
  Xen PV backend: Disable use of O_DIRECT by default as it results in crashes.

Due to what is almost certainly a kernel bug, writes with O_DIRECT may
continue to reference the page after the write has been marked as
completed, particularly in the case of TCP retransmit. In other
scenarios, this "merely" risks data corruption on the write, but with
Xen pages from domU are only transiently mapped into dom0's memory,
resulting in kernel panics when they are subsequently accessed.

This brings PV devices in line with emulated devices.  Removing
O_DIRECT is safe as barrier operations are now correctly passed
through.

See:
   http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html
for more details.

Signed-off-by: Alex Bligh <address@hidden>
Signed-off-by: Stefano Stabellini <address@hidden>


  Commit: 10bb3c623478117aee5117c312736f10833decc2
      
https://github.com/qemu/qemu/commit/10bb3c623478117aee5117c312736f10833decc2
  Author: Felipe Franciosi <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M hw/xen_backend.c
    M hw/xen_backend.h

  Log Message:
  -----------
  Introduce 64 bit integer write interface to xenstore

The current implementation of xen_backend only provides 32 bit integer
functions to write to xenstore. This patch adds two functions that
allow writing 64 bit integers (one generic function and another for
the backend only).

This patch also fixes the size of the char arrays used to represent
these integers as strings (originally 32 bytes, however no more than
12 bytes are needed for 32 bit integers and no more than 21 bytes are
needed for 64 bit integers).

Signed-off-by: Felipe Franciosi <address@hidden>
Signed-off-by: Stefano Stabellini <address@hidden>


  Commit: 9246ce881128df2a69178779c1ef33c83df3c70d
      
https://github.com/qemu/qemu/commit/9246ce881128df2a69178779c1ef33c83df3c70d
  Author: Felipe Franciosi <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M hw/xen_disk.c

  Log Message:
  -----------
  Allow xen guests to plug disks of 1 TiB or more

The current xen backend driver implementation uses int64_t variables
to store the size of the corresponding backend disk/file. It also uses
an int64_t variable to store the block size of that image. When writing
the number of sectors (file_size/block_size) to xenstore, however, it
passes these values as 32 bit signed integers. This will cause an
overflow for any disk of 1 TiB or more.

This patch changes the xen backend driver to use a 64 bit integer write
xenstore function.

Signed-off-by: Felipe Franciosi <address@hidden>
Signed-off-by: Stefano Stabellini <address@hidden>


  Commit: 76534da749ceb3b4c13ec09b173bcf6d6c2e36d4
      
https://github.com/qemu/qemu/commit/76534da749ceb3b4c13ec09b173bcf6d6c2e36d4
  Author: Kevin Wolf <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M hw/pci/pci-hotplug.c
    M hw/scsi-bus.c
    M hw/scsi.h
    M hw/usb/dev-storage.c

  Log Message:
  -----------
  usb-storage: Forward serial number to scsi-disk

usb-storage takes care to fetch the USB serial number from -drive
options, but it neglected to pass its own 'serial' property to the
scsi-disk it creates. With this patch, the 'serial' qdev property and
the 'serial' option in -drive behave the same and correctly apply the
serial number on both USB and SCSI level.

Signed-off-by: Kevin Wolf <address@hidden>
Acked-by: Gerd Hoffmann <address@hidden>


  Commit: 5905fbc9c94ccd744c1b249472eafcc2d827548a
      
https://github.com/qemu/qemu/commit/5905fbc9c94ccd744c1b249472eafcc2d827548a
  Author: Stefan Hajnoczi <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M block.c
    M include/block/block_int.h

  Log Message:
  -----------
  block: fix I/O throttling accounting blind spot

I/O throttling relies on bdrv_acct_done() which is called when a request
completes.  This leaves a blind spot since we only charge for completed
requests, not submitted requests.

For example, if there is 1 operation remaining in this time slice the
guest could submit 3 operations and they will all be submitted
successfully since they don't actually get accounted for until they
complete.

Originally we probably thought this is okay since the requests will be
accounted when the time slice is extended.  In practice it causes
fluctuations since the guest can exceed its I/O limit and it will be
punished for this later on.

Account for I/O upon submission so that I/O limits are enforced
properly.

Signed-off-by: Stefan Hajnoczi <address@hidden>
Tested-By: Benoit Canet <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: ae29d6c64bd8d55873a2cb1df50ae4321b497447
      
https://github.com/qemu/qemu/commit/ae29d6c64bd8d55873a2cb1df50ae4321b497447
  Author: Stefan Hajnoczi <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M block.c
    M blockdev.c
    M include/block/block_int.h

  Log Message:
  -----------
  block: keep I/O throttling slice time constant

It is not necessary to adjust the slice time at runtime.  We already
extend the current slice in order to carry over accounting into the next
slice.  Changing the actual slice time value introduces oscillations.

The guest may experience large changes in throughput or IOPS from one
moment to the next when slice times are adjusted.

Reported-by: BenoƮt Canet <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
Tested-By: Benoit Canet <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: e660fb8b3ccc94652774d5895d122c0f13aecb89
      
https://github.com/qemu/qemu/commit/e660fb8b3ccc94652774d5895d122c0f13aecb89
  Author: Stefan Hajnoczi <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M block.c

  Log Message:
  -----------
  block: drop duplicated slice extension code

The current slice is extended when an I/O request exceeds the limit.
There is no need to extend the slice every time we check a request.

Signed-off-by: Stefan Hajnoczi <address@hidden>
Tested-By: Benoit Canet <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 0775437fafc5c733564645a22f75490770bf41f7
      
https://github.com/qemu/qemu/commit/0775437fafc5c733564645a22f75490770bf41f7
  Author: Stefan Hajnoczi <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M block.c

  Log Message:
  -----------
  block: clean up I/O throttling wait_time code

The wait_time variable is in seconds.  Reflect this in a comment and use
NANOSECONDS_PER_SECOND instead of BLOCK_IO_SLICE_TIME * 10 (which
happens to have the right value).

Signed-off-by: Stefan Hajnoczi <address@hidden>
Tested-By: Benoit Canet <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: c2bc78b6a975ea2dcd7eee9f0dce22cc060cdcdc
      
https://github.com/qemu/qemu/commit/c2bc78b6a975ea2dcd7eee9f0dce22cc060cdcdc
  Author: Kevin Wolf <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M block/qcow2-refcount.c

  Log Message:
  -----------
  qcow2: Return real error in qcow2_update_snapshot_refcount

This fixes the error message triggered by the following script:

    cat > /tmp/blkdebug.cfg <<EOF
    [inject-error]
    event = "cluster_free"
    errno = "28"
    immediately = "off"
    EOF

    $qemu_img create -f qcow2 test.qcow2 10G
    $qemu_img snapshot -c snap test.qcow2
    $qemu_img snapshot -d snap blkdebug:/tmp/blkdebug.cfg:test.qcow2

Signed-off-by: Kevin Wolf <address@hidden>


  Commit: c2b6ff51e4a3ad1f7ec5dbc94970e9778b31d718
      
https://github.com/qemu/qemu/commit/c2b6ff51e4a3ad1f7ec5dbc94970e9778b31d718
  Author: Kevin Wolf <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M block/qcow2-refcount.c

  Log Message:
  -----------
  qcow2: Fix L1 write error handling in qcow2_update_snapshot_refcount

It ignored the error code, and at least the 'goto fail' is obvious
nonsense as it creates an endless loop (if the next attempt doesn't
magically succeed) and leaves the in-memory L1 table in big-endian
instead of converting it back.

In error cases, there's no point in writing an updated L1 table, so
skip this part for them.

Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 5098699a51756f7e8934dc035112c8f8aa2a0ec3
      
https://github.com/qemu/qemu/commit/5098699a51756f7e8934dc035112c8f8aa2a0ec3
  Author: Anthony Liguori <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M block.c
    M block/qcow2-refcount.c
    M blockdev.c
    M hw/pci/pci-hotplug.c
    M hw/scsi-bus.c
    M hw/scsi.h
    M hw/usb/dev-storage.c
    M include/block/block_int.h

  Log Message:
  -----------
  Merge remote-tracking branch 'kwolf/for-anthony' into staging

# By Stefan Hajnoczi (4) and Kevin Wolf (3)
# Via Kevin Wolf
* kwolf/for-anthony:
  qcow2: Fix L1 write error handling in qcow2_update_snapshot_refcount
  qcow2: Return real error in qcow2_update_snapshot_refcount
  block: clean up I/O throttling wait_time code
  block: drop duplicated slice extension code
  block: keep I/O throttling slice time constant
  block: fix I/O throttling accounting blind spot
  usb-storage: Forward serial number to scsi-disk


  Commit: 54baa6f3c07a155939a6edda6d17706a6e9ab11c
      
https://github.com/qemu/qemu/commit/54baa6f3c07a155939a6edda6d17706a6e9ab11c
  Author: Anthony Liguori <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M hw/xen_backend.c
    M hw/xen_backend.h
    M hw/xen_disk.c

  Log Message:
  -----------
  Merge remote-tracking branch 'sstabellini/xen-2013-04-05' into staging

# By Alex Bligh (2) and Felipe Franciosi (2)
# Via Stefano Stabellini
* sstabellini/xen-2013-04-05:
  Allow xen guests to plug disks of 1 TiB or more
  Introduce 64 bit integer write interface to xenstore
  Xen PV backend: Disable use of O_DIRECT by default as it results in crashes.
  Xen PV backend: Move call to bdrv_new from blk_init to blk_connect


  Commit: 91b53e4407ed8379d2d40f88a585e0b767681927
      
https://github.com/qemu/qemu/commit/91b53e4407ed8379d2d40f88a585e0b767681927
  Author: Anthony Liguori <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M hw/arm/xilinx_zynq.c
    M hw/microblaze/petalogix_ml605_mmu.c
    M linux-user/strace.c
    M target-s390x/translate.c
    M tests/test-visitor-serialization.c

  Log Message:
  -----------
  Merge remote-tracking branch 'stefanha/trivial-patches' into staging

# By Peter Crosthwaite (2) and others
# Via Stefan Hajnoczi
* stefanha/trivial-patches:
  xilinx_zynq: Cleanup ssi_create_slave
  petalogix_ml605_mmu: Cleanup ssi_create_slave()
  target-s390: Fix SRNMT
  linux-user: Don't omit comma for strace of rt_sigaction()
  test-visitor-serialization: Fix some memory leaks


  Commit: d185c094b404b4ff392b77d1244c0233da7d53bd
      
https://github.com/qemu/qemu/commit/d185c094b404b4ff392b77d1244c0233da7d53bd
  Author: Paolo Bonzini <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M qemu-char.c

  Log Message:
  -----------
  qemu-char: eliminate busy waiting on can_read returning zero

The character backend refactoring introduced an undesirable busy wait.
The busy wait happens if can_read returns zero and there is data available
on the character device's file descriptor.  Then, the I/O watch will
fire continuously and, with TCG, the CPU thread will never run.

    1) Char backend asks front end if it can write
    2) Front end says no
    3) poll() finds the char backend's descriptor is available
    4) Goto (1)

What we really want is this (note that step 3 avoids the busy wait):

    1) Char backend asks front end if it can write
    2) Front end says no
    3) poll() goes on without char backend's descriptor
    4) Goto (1) until qemu_chr_accept_input() called

    5) Char backend asks front end if it can write
    6) Front end says yes
    7) poll() finds the char backend's descriptor is available
    8) Backend handler called

After this patch, the IOWatchPoll source and the watch source are
separated.  The IOWatchPoll is simply a hook that runs during the prepare
phase on each main loop iteration.  The hook adds/removes the actual
source depending on the return value from can_read.

A simple reproducer is

    qemu-system-i386 -serial mon:stdio

... followed by banging on the terminal as much as you can. :)  Without
this patch, emulation will hang.

Signed-off-by: Paolo Bonzini <address@hidden>
Message-id: address@hidden
Signed-off-by: Anthony Liguori <address@hidden>


  Commit: 893986fe94eb229f2317f50fac0e35e068eb66ba
      
https://github.com/qemu/qemu/commit/893986fe94eb229f2317f50fac0e35e068eb66ba
  Author: Anthony Liguori <address@hidden>
  Date:   2013-04-05 (Fri, 05 Apr 2013)

  Changed paths:
    M main-loop.c

  Log Message:
  -----------
  main-loop: drop the BQL if the I/O appears to be spinning

The char-flow refactoring introduced a busy-wait that depended on
an action from the VCPU thread.  However, the VCPU thread could
never take that action because the busy-wait starved the VCPU thread
of the BQL because it never dropped the mutex while running select.

Paolo doesn't want to drop this optimization for fear that we will
stop detecting these busy waits.  I'm afraid to keep this optimization
even with the busy-wait fixed because I think a similar problem can
occur just with heavy I/O thread load manifesting itself as VCPU pauses.

As a compromise, introduce an artificial timeout after a thousand
iterations but print a rate limited warning when this happens.  This
let's us still detect when this condition occurs without it being
a fatal error.

Signed-off-by: Anthony Liguori <address@hidden>
Message-id: address@hidden


Compare: https://github.com/qemu/qemu/compare/d05ef160453e...893986fe94eb

reply via email to

[Prev in Thread] Current Thread [Next in Thread]