[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/4] scsi: build qemu-pr-helper
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 2/4] scsi: build qemu-pr-helper |
Date: |
Tue, 19 Sep 2017 16:25:09 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 |
On 19/09/2017 15:33, Daniel P. Berrange wrote:
> On Tue, Sep 19, 2017 at 12:24:32PM +0200, Paolo Bonzini wrote:
>> Introduce a privileged helper to run persistent reservation commands.
>> This lets virtual machines send persistent reservations without using
>> CAP_SYS_RAWIO or out-of-tree patches. The helper uses Unix permissions
>> and SCM_RIGHTS to restrict access to processes that can access its socket
>> and prove that they have an open file descriptor for a raw SCSI device.
>>
>> The next patch will also correct the usage of persistent reservations
>> with multipath devices.
>>
>> It would also be possible to support for Linux's IOC_PR_* ioctls in
>> the future, to support NVMe devices. For now, however, only SCSI is
>> supported.
>>
>> Signed-off-by: Paolo Bonzini <address@hidden>
>> ---
>
>
>> +
>> +#define PR_HELPER_CDB_SIZE 16
>> +#define PR_HELPER_SENSE_SIZE 96
>> +#define PR_HELPER_DATA_SIZE 8192
>> +
>> +typedef struct PRHelperResponse {
>> + int32_t result;
>> + int32_t sz;
>> + uint8_t sense[PR_HELPER_SENSE_SIZE];
>> +} PRHelperResponse;
>
> Should we annotate this with 'packed' to ensure its immune to compiler
> padding ?
Yes...
>
>> +typedef struct PRHelperRequest {
>> + int fd;
>> + size_t sz;
>> + uint8_t cdb[PR_HELPER_CDB_SIZE];
>> +} PRHelperRequest;
>
> Same q here ?
... and no since this one is not the wire format (which is just a
16-byte cdb, plus fd in ancillary data).
>
>> +static int coroutine_fn prh_write_response(PRHelperClient *client,
>> + PRHelperRequest *req,
>> + PRHelperResponse *resp, Error
>> **errp)
>> +{
>> + ssize_t r;
>
> Can just be int
>
>> + size_t sz;
>> +
>> + if (req->cdb[0] == PERSISTENT_RESERVE_IN && resp->result == GOOD) {
>> + assert(resp->sz <= req->sz && resp->sz <= sizeof(client->data));
>> + } else {
>> + assert(resp->sz == 0);
>> + }
>> +
>> + sz = resp->sz;
>> +
>> + resp->result = cpu_to_be32(resp->result);
>> + resp->sz = cpu_to_be32(resp->sz);
>> + r = qio_channel_write_all(QIO_CHANNEL(client->ioc),
>> + (char *) resp, sizeof(*resp), errp);
>> + if (r < 0) {
>> + return r;
>> + }
>> +
>> + r = qio_channel_write_all(QIO_CHANNEL(client->ioc),
>> + (char *) client->data,
>> + sz, errp);
>> + return r < 0 ? r : 0;
>
> Just return 'r' directly, its only ever -1 or 0
Ok, thanks, will adjust all of these.
Paolo
- Re: [Qemu-devel] [PATCH 4/4] scsi: add persistent reservation manager using qemu-pr-helper, (continued)
- Re: [Qemu-devel] [PATCH 4/4] scsi: add persistent reservation manager using qemu-pr-helper, Daniel P. Berrange, 2017/09/19
- Re: [Qemu-devel] [PATCH 4/4] scsi: add persistent reservation manager using qemu-pr-helper, Daniel P. Berrange, 2017/09/19
- Re: [Qemu-devel] [PATCH 4/4] scsi: add persistent reservation manager using qemu-pr-helper, Paolo Bonzini, 2017/09/19
- Re: [Qemu-devel] [PATCH 4/4] scsi: add persistent reservation manager using qemu-pr-helper, Daniel P. Berrange, 2017/09/19
- Re: [Qemu-devel] [PATCH 4/4] scsi: add persistent reservation manager using qemu-pr-helper, Paolo Bonzini, 2017/09/19
- Re: [Qemu-devel] [PATCH 4/4] scsi: add persistent reservation manager using qemu-pr-helper, Daniel P. Berrange, 2017/09/19
- Re: [Qemu-devel] [PATCH 4/4] scsi: add persistent reservation manager using qemu-pr-helper, Paolo Bonzini, 2017/09/19
- Re: [Qemu-devel] [Qemu-block] [PATCH 4/4] scsi: add persistent reservation manager using qemu-pr-helper, Paolo Bonzini, 2017/09/21
[Qemu-devel] [PATCH 2/4] scsi: build qemu-pr-helper, Paolo Bonzini, 2017/09/19
Re: [Qemu-devel] [Qemu-block] [PATCH v2 0/4] scsi, block: introduce persistent reservation managers, Stefan Hajnoczi, 2017/09/21
Re: [Qemu-devel] [PATCH v2 0/4] scsi, block: introduce persistent reservation managers, no-reply, 2017/09/21
Re: [Qemu-devel] [PATCH v2 0/4] scsi, block: introduce persistent reservation managers, no-reply, 2017/09/21