All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Greg Kurz <groug@kaod.org>
Cc: kwolf@redhat.com,
	Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
	berto@igalia.com, stefanha@redhat.com, qemu-block@nongnu.org,
	qemu-devel@nongnu.org, mreitz@redhat.com,
	pavel.dovgaluk@ispras.ru, pbonzini@redhat.com, jsnow@redhat.com,
	ari@tuxera.com
Subject: Re: [PATCH 07/14] block/blklogwrites: drop error propagation
Date: Fri, 11 Sep 2020 07:23:10 +0200	[thread overview]
Message-ID: <878sdghoox.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20200910192440.695b8e81@bahia.lan> (Greg Kurz's message of "Thu,  10 Sep 2020 19:24:40 +0200")

Greg Kurz <groug@kaod.org> writes:

> On Wed,  9 Sep 2020 21:59:23 +0300
> Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> wrote:
>
>> It's simple to avoid error propagation in blk_log_writes_open(), we
>> just need to refactor blk_log_writes_find_cur_log_sector() a bit.
>> 
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>>  block/blklogwrites.c | 23 +++++++++++------------
>>  1 file changed, 11 insertions(+), 12 deletions(-)
>> 
>> diff --git a/block/blklogwrites.c b/block/blklogwrites.c
>> index 7ef046cee9..c7da507b2d 100644
>> --- a/block/blklogwrites.c
>> +++ b/block/blklogwrites.c
>> @@ -96,10 +96,10 @@ static inline bool blk_log_writes_sector_size_valid(uint32_t sector_size)
>>          sector_size < (1ull << 24);
>>  }
>>  
>> -static uint64_t blk_log_writes_find_cur_log_sector(BdrvChild *log,
>> -                                                   uint32_t sector_size,
>> -                                                   uint64_t nr_entries,
>> -                                                   Error **errp)
>> +static int64_t blk_log_writes_find_cur_log_sector(BdrvChild *log,
>> +                                                  uint32_t sector_size,
>> +                                                  uint64_t nr_entries,
>> +                                                  Error **errp)
>>  {
>>      uint64_t cur_sector = 1;
>>      uint64_t cur_idx = 0;
>> @@ -112,13 +112,13 @@ static uint64_t blk_log_writes_find_cur_log_sector(BdrvChild *log,
>>          if (read_ret < 0) {
>>              error_setg_errno(errp, -read_ret,
>>                               "Failed to read log entry %"PRIu64, cur_idx);
>> -            return (uint64_t)-1ull;
>> +            return read_ret;
>
> This changes the error status of blk_log_writes_open() from -EINVAL to
> whatever is returned by bdrv_pread(). I guess this is an improvement
> worth to be mentioned in the changelog.
>
>>          }
>>  
>>          if (cur_entry.flags & ~cpu_to_le64(LOG_FLAG_MASK)) {
>>              error_setg(errp, "Invalid flags 0x%"PRIx64" in log entry %"PRIu64,
>>                         le64_to_cpu(cur_entry.flags), cur_idx);
>> -            return (uint64_t)-1ull;
>> +            return -EINVAL;
>>          }
>>  
>>          /* Account for the sector of the entry itself */
>> @@ -143,7 +143,6 @@ static int blk_log_writes_open(BlockDriverState *bs, QDict *options, int flags,
>>  {
>>      BDRVBlkLogWritesState *s = bs->opaque;
>>      QemuOpts *opts;
>> -    Error *local_err = NULL;
>>      int ret;
>>      uint64_t log_sector_size;
>>      bool log_append;
>> @@ -215,15 +214,15 @@ static int blk_log_writes_open(BlockDriverState *bs, QDict *options, int flags,
>>          s->nr_entries = 0;
>>  
>>          if (blk_log_writes_sector_size_valid(log_sector_size)) {
>> -            s->cur_log_sector =
>> +            int64_t cur_log_sector =
>>                  blk_log_writes_find_cur_log_sector(s->log_file, log_sector_size,
>> -                                    le64_to_cpu(log_sb.nr_entries), &local_err);
>> -            if (local_err) {
>> -                ret = -EINVAL;
>> -                error_propagate(errp, local_err);
>> +                                    le64_to_cpu(log_sb.nr_entries), errp);
>> +            if (cur_log_sector < 0) {
>> +                ret = cur_log_sector;
>
> This is converting int64_t to int, which is usually not recommended.
> In practice this is probably okay because cur_log_sector is supposed
> to be a negative errno (ie. an int) in this case.

It isn't: blk_log_writes_find_cur_log_sector() returns (uint64_t)-1ull
on error.

Aside: returning uint64_t is awkward.  We commonly use a signed integer
for non-negative offset or negative error.

> Maybe make this clear with a an assert(cur_log_sector >= INT_MIN) ?

Unless we change blk_log_writes_find_cur_log_sector() to return a
negative errno code, we need to ret = -EINVAL here.  Let's keep this
series simple.

>>                  goto fail_log;
>>              }
>>  
>> +            s->cur_log_sector = cur_log_sector;
>>              s->nr_entries = le64_to_cpu(log_sb.nr_entries);
>>          }
>>      } else {



  reply	other threads:[~2020-09-11  5:27 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-09 18:59 [PATCH 00/14] block: deal with errp: part I Vladimir Sementsov-Ogievskiy
2020-09-09 18:59 ` [PATCH 01/14] block: return status from bdrv_append and friends Vladimir Sementsov-Ogievskiy
2020-09-10 15:51   ` Greg Kurz
2020-09-17 14:13   ` Alberto Garcia
2020-09-09 18:59 ` [PATCH 02/14] block: use return status of bdrv_append() Vladimir Sementsov-Ogievskiy
2020-09-10 16:10   ` Greg Kurz
2020-09-17 19:21     ` Vladimir Sementsov-Ogievskiy
2020-09-17 13:59   ` Alberto Garcia
2020-09-09 18:59 ` [PATCH 03/14] block: check return value of bdrv_open_child and drop error propagation Vladimir Sementsov-Ogievskiy
2020-09-10 16:21   ` Greg Kurz
2020-09-17 14:47   ` Alberto Garcia
2020-09-09 18:59 ` [PATCH 04/14] blockdev: fix drive_backup_prepare() missed error Vladimir Sementsov-Ogievskiy
2020-09-10 16:26   ` Greg Kurz
2020-09-17 13:56   ` Alberto Garcia
2020-09-09 18:59 ` [PATCH 05/14] block: drop extra error propagation for bdrv_set_backing_hd Vladimir Sementsov-Ogievskiy
2020-09-10 16:30   ` Greg Kurz
2020-09-17 13:57   ` Alberto Garcia
2020-09-09 18:59 ` [PATCH 06/14] block/mirror: drop extra error propagation in commit_active_start() Vladimir Sementsov-Ogievskiy
2020-09-10 16:32   ` Greg Kurz
2020-09-17 14:48   ` Alberto Garcia
2020-09-09 18:59 ` [PATCH 07/14] block/blklogwrites: drop error propagation Vladimir Sementsov-Ogievskiy
2020-09-10 17:24   ` Greg Kurz
2020-09-11  5:23     ` Markus Armbruster [this message]
2020-09-11  5:30       ` Markus Armbruster
2020-09-11  6:19         ` Greg Kurz
2020-09-11 14:43           ` Markus Armbruster
2020-09-10 21:01   ` Ari Sundholm
2020-09-11  8:03     ` Markus Armbruster
2020-09-16 16:52       ` Ari Sundholm
2020-09-17  7:12         ` Markus Armbruster
2020-09-09 18:59 ` [PATCH 08/14] blockjob: return status from block_job_set_speed() Vladimir Sementsov-Ogievskiy
2020-09-11  8:34   ` Greg Kurz
2020-09-17 14:01   ` Alberto Garcia
2020-09-09 18:59 ` [PATCH 09/14] block/qcow2: qcow2_get_specific_info(): drop error propagation Vladimir Sementsov-Ogievskiy
2020-09-11  8:41   ` Greg Kurz
2020-09-17 16:32   ` Alberto Garcia
2020-09-17 18:52     ` Vladimir Sementsov-Ogievskiy
2020-09-09 18:59 ` [PATCH 10/14] block/qcow2-bitmap: improve qcow2_load_dirty_bitmaps() interface Vladimir Sementsov-Ogievskiy
2020-09-17 16:35   ` Alberto Garcia
2020-09-17 18:58     ` Vladimir Sementsov-Ogievskiy
2020-09-09 18:59 ` [PATCH 11/14] block/qcow2-bitmap: return startus from qcow2_store_persistent_dirty_bitmaps Vladimir Sementsov-Ogievskiy
2020-09-11  9:38   ` Greg Kurz
2020-09-11 10:18     ` Vladimir Sementsov-Ogievskiy
2020-09-11 11:21       ` Greg Kurz
2020-09-11 11:39         ` Vladimir Sementsov-Ogievskiy
2020-09-11 15:22           ` Markus Armbruster
2020-09-11 17:20             ` Vladimir Sementsov-Ogievskiy
2020-09-14  6:53               ` Markus Armbruster
2020-09-17 14:50   ` Alberto Garcia
2020-09-09 18:59 ` [PATCH 12/14] block/qcow2: read_cache_sizes: return status value Vladimir Sementsov-Ogievskiy
2020-09-11  9:40   ` Greg Kurz
2020-09-17 14:51   ` Alberto Garcia
2020-09-09 18:59 ` [PATCH 13/14] block/qcow2: qcow2_do_open: deal with errp Vladimir Sementsov-Ogievskiy
2020-09-17 16:23   ` Alberto Garcia
2020-09-17 17:44     ` Vladimir Sementsov-Ogievskiy
2020-09-09 18:59 ` [PATCH 14/14] block/qed: bdrv_qed_do_open: " Vladimir Sementsov-Ogievskiy
2020-09-17 16:25   ` Alberto Garcia

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=878sdghoox.fsf@dusky.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=ari@tuxera.com \
    --cc=berto@igalia.com \
    --cc=groug@kaod.org \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pavel.dovgaluk@ispras.ru \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=vsementsov@virtuozzo.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.