All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Fam Zheng <famz@redhat.com>
Cc: qemu-devel@nongnu.org, "Daniel P. Berrange" <berrange@redhat.com>,
	qemu-block@nongnu.org, eblake@redhat.com,
	Kevin Wolf <kwolf@redhat.com>,
	rjones@redhat.com
Subject: Re: [Qemu-devel] [PATCH v12 14/16] file-posix: Implement image locking
Date: Wed, 8 Feb 2017 14:18:41 +0100	[thread overview]
Message-ID: <3e4b256b-caed-82d5-6ab6-5ee7396c788d@redhat.com> (raw)
In-Reply-To: <20170208060033.GC13286@lemon.lan>

[-- Attachment #1: Type: text/plain, Size: 2336 bytes --]

On 08.02.2017 07:00, Fam Zheng wrote:
> On Wed, 02/08 04:05, Max Reitz wrote:
>>> +static int raw_lt_write_to_write_share(RawLockTransOp op,
>>> +                                       int old_lock_fd, int new_lock_fd,
>>> +                                       BDRVRawLockMode old_lock,
>>> +                                       BDRVRawLockMode new_lock,
>>> +                                       Error **errp)
>>> +{
>>> +    int ret = 0;
>>> +
>>> +    assert(old_lock == RAW_L_WRITE);
>>> +    assert(new_lock == RAW_L_WRITE_SHARE_RW);
>>> +    /*
>>> +     *        lock byte "no other writer"      lock byte "write"
>>> +     * old                X                           X
>>> +     * new                0                           S
>>> +     *
>>> +     * (0 = unlocked; S = shared; X = exclusive.)
>>> +     */
>>> +    switch (op) {
>>> +    case RAW_LT_PREPARE:
>>> +        break;
>>> +    case RAW_LT_COMMIT:
>>> +        ret = qemu_lock_fd(old_lock_fd, RAW_LOCK_BYTE_WRITE, 1, false);
>>> +        if (ret) {
>>> +            error_report("Failed to downgrade old fd (share byte)");
>>> +            break;
>>> +        }
>>> +        ret = qemu_lock_fd(new_lock_fd, RAW_LOCK_BYTE_WRITE, 1, false);
>>> +        if (ret) {
>>> +            error_report("Failed to unlock new fd (share byte)");
>>> +            break;
>>> +        }
>>
>> The second one is not an "unlock", but a new shared lock.
> 
> You are right.
> 
>> Which brings
>> me to the point that both of these commands can fail and thus should be
>> in the prepare path.
> 
> We cannot. If we lose the exclusive lock already in prepare, and some other
> things fail later in the transaction, abort() may not be able to restore that
> lock (another process took a shared lock in between).
> 
> The reason for my code is, the lock semantics implies both of these commands can
> succeed, so it doesn't hurt if we ignore ret codes here. I'm just trying to
> catch the very unlikely abnormalities.

Indeed. Well, then raw_lt_write_to_read() should do the same, though.

Max

>> (This function should be a mirror of raw_lt_write_to_read, if I'm not
>> mistaken.)
>>
>>> +        break;
>>> +    case RAW_LT_ABORT:
>>> +        break;
>>> +    }
>>> +    return ret;
>>> +}
> 
> Fam
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]

  reply	other threads:[~2017-02-08 13:18 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-23 12:30 [Qemu-devel] [PATCH v12 00/16] block: Image locking series Fam Zheng
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 01/16] osdep: Add qemu_lock_fd and qemu_unlock_fd Fam Zheng
2017-02-05 21:38   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 02/16] block: Define BDRV_O_SHARE_RW Fam Zheng
2017-02-05 21:51   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 03/16] qemu-io: Set "share-rw" flag together with read-only Fam Zheng
2017-02-05 21:52   ` Max Reitz
2017-02-06  4:52     ` Fam Zheng
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 04/16] qemu-img: Set "share-rw" flag in read-only commands Fam Zheng
2017-02-05 21:55   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 05/16] block: Set "share-rw" flag in drive-backup when sync=none Fam Zheng
2017-02-05 21:57   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 06/16] iotests: 055: Don't attach the drive to vm for drive-backup Fam Zheng
2017-02-08  0:06   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 07/16] iotests: 030: Read-only open image for getting map Fam Zheng
2017-02-08  0:11   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 08/16] iotests: 087: Don't attach test image twice Fam Zheng
2017-02-08  0:14   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 09/16] iotests: 085: Avoid image locking conflict Fam Zheng
2017-02-08  0:25   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 10/16] iotests: 091: Quit QEMU before checking image Fam Zheng
2017-02-08  0:32   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 11/16] iotests: 172: Use separate images for multiple devices Fam Zheng
2017-02-08  0:43   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 12/16] tests: Use null-co:// instead of /dev/null as the dummy image Fam Zheng
2017-02-08  0:45   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 13/16] tests: Disable image lock in test-replication Fam Zheng
2017-02-08  0:56   ` Max Reitz
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 14/16] file-posix: Implement image locking Fam Zheng
2017-02-08  3:05   ` Max Reitz
2017-02-08  6:00     ` Fam Zheng
2017-02-08 13:18       ` Max Reitz [this message]
2017-02-08 13:40         ` Fam Zheng
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 15/16] qcow2: Force "no other writer" lock on bs->file Fam Zheng
2017-02-08 14:33   ` Max Reitz
2017-02-08 15:00     ` Fam Zheng
2017-01-23 12:30 ` [Qemu-devel] [PATCH v12 16/16] tests: Add test-image-lock Fam Zheng
2017-02-08 14:52   ` Max Reitz
2017-02-05 21:58 ` [Qemu-devel] [PATCH v12 00/16] block: Image locking series Max Reitz

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=3e4b256b-caed-82d5-6ab6-5ee7396c788d@redhat.com \
    --to=mreitz@redhat.com \
    --cc=berrange@redhat.com \
    --cc=eblake@redhat.com \
    --cc=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rjones@redhat.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.