From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1fVLGy-0002pf-5U for mharc-grub-devel@gnu.org; Tue, 19 Jun 2018 14:22:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40310) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fVLGv-0002nI-Bt for grub-devel@gnu.org; Tue, 19 Jun 2018 14:22:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fVLGq-0003MJ-Dp for grub-devel@gnu.org; Tue, 19 Jun 2018 14:22:29 -0400 Received: from mail-wr0-x241.google.com ([2a00:1450:400c:c0c::241]:38337) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fVLGq-0003Lb-17 for grub-devel@gnu.org; Tue, 19 Jun 2018 14:22:24 -0400 Received: by mail-wr0-x241.google.com with SMTP id e18-v6so626889wrs.5 for ; Tue, 19 Jun 2018 11:22:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:subject:to:cc:references:reply-to:openpgp:autocrypt:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=/HGqFFUPIMOEqi6dntw8Yu6XYNvQe6qTONqx7WluvuY=; b=HMKIu0BXbHNoibesU+8knDqV6ec6yDfriA68qEnyuUCueuK7rct4tiV+2B9jeW4BFD gfU/UkpFnADlIAvDZV+31HgqXkImYJtHAc5vvAWJPGjhobEf46D5zYHRPVJe66XDkyN6 0CLx8yQCV+mP5NavahbPpL9gYk0hXTUD//HKtBIgbpeRa/6PbCybQqtbcZIkQfIvO7lP BdDlZPDy/r54Np5qv023hcXjriZ0zJhaFjMVHKs5PAufq8DT4DNXaFP08RmD12d6Hhwj FchpSz1oQlsRjSDZEY/O095RCMhVPX6+n/brIyHG+HeT9daPKWceZlHKfVdh2ARoPrfF uMbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:cc:references:reply-to:openpgp :autocrypt:message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=/HGqFFUPIMOEqi6dntw8Yu6XYNvQe6qTONqx7WluvuY=; b=fyIyapGDlBpOa0e3ZLavX4Jes/364a65GFhcd5VZJLmXBBf9q8KNBdscPTB8krLXPk RC7YfbIq4hCTvCjksV4EfD9kOAK0qP+KPp6KIQkJWNef0AM5bULHBTrrRCEJ2pSf7dxq SHlTGJSa6vfcQ8bAunBBVDmWRubdRv0hUqcIIq942pcoCyz9Fw5LTb+CBVS8xmpG53gD 9K92mDB5UKeV5asDpdvGmj6EBzvnSiUBJ4jv+NlKMwileA9ZBM3Aj9sx7SAnbhV9BcCE jM8EF9ZS4va/6KAzzvOQ2tvMawP5h0BYH7Nr4zbAnCP3H3v+hah0S4EYex4fqyDbkjvN N2Cw== X-Gm-Message-State: APt69E1sBO07yfOwYerHr8pFCalFcdTvLVbJ3N/FpH6hGE+wAk2eNyFS 8nX17mqriHaHHbo3LoDEkXM= X-Google-Smtp-Source: ADUXVKKEJ7YkQ6gNYq5eZBlKsmGnAJhjcUovXTsZTppZR/iC6IhswN6gozR7FAiLCtg97FYc5l4dhA== X-Received: by 2002:adf:b310:: with SMTP id j16-v6mr14530413wrd.207.1529432542895; Tue, 19 Jun 2018 11:22:22 -0700 (PDT) Received: from venice.bhome (84-223-210-152.adsl-wholesale.clienti.tiscali.it. [84.223.210.152]) by smtp.googlemail.com with ESMTPSA id r9-v6sm421500wrs.63.2018.06.19.11.22.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 19 Jun 2018 11:22:22 -0700 (PDT) From: Goffredo Baroncelli Subject: [PATCH 4/9] btrfs: Avoid a rescan for a device which was already not found. To: grub-devel@gnu.org Cc: Daniel Kiper References: <20180619173956.7356-1-kreijack@inwind.it> Reply-To: kreijack@inwind.it Openpgp: preference=signencrypt Autocrypt: addr=kreijack@gmail.com; prefer-encrypt=mutual; keydata= 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 Message-ID: <72ce5fd6-c2ec-d5fb-f59d-5523e3805913@gmail.com> Date: Tue, 19 Jun 2018 20:22:19 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <20180619173956.7356-1-kreijack@inwind.it> Content-Type: text/plain; charset=windows-1252 Content-Language: en-US Content-Transfer-Encoding: 7bit X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::241 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Jun 2018 18:22:30 -0000 Forward because this patch still doesn't reach the mailing list -------------------------------------- If a device is not found, record this failure by storing NULL in data->devices_attached[]. This way we avoid unnecessary devices rescan, and speedup the reads in case of a degraded array. Signed-off-by: Goffredo Baroncelli --- grub-core/fs/btrfs.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c index 8d07e2d72..70bcb0fdc 100644 --- a/grub-core/fs/btrfs.c +++ b/grub-core/fs/btrfs.c @@ -588,7 +588,7 @@ find_device_iter (const char *name, void *data) } static grub_device_t -find_device (struct grub_btrfs_data *data, grub_uint64_t id, int do_rescan) +find_device (struct grub_btrfs_data *data, grub_uint64_t id) { struct find_device_ctx ctx = { .data = data, @@ -600,12 +600,9 @@ find_device (struct grub_btrfs_data *data, grub_uint64_t id, int do_rescan) for (i = 0; i < data->n_devices_attached; i++) if (id == data->devices_attached[i].id) return data->devices_attached[i].dev; - if (do_rescan) - grub_device_iterate (find_device_iter, &ctx); - if (!ctx.dev_found) - { - return NULL; - } + + grub_device_iterate (find_device_iter, &ctx); + data->n_devices_attached++; if (data->n_devices_attached > data->n_devices_allocated) { @@ -617,7 +614,8 @@ find_device (struct grub_btrfs_data *data, grub_uint64_t id, int do_rescan) * sizeof (data->devices_attached[0])); if (!data->devices_attached) { - grub_device_close (ctx.dev_found); + if (ctx.dev_found) + grub_device_close (ctx.dev_found); data->devices_attached = tmp; return NULL; } @@ -896,7 +894,7 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr, " for laddr 0x%" PRIxGRUB_UINT64_T "\n", paddr, addr); - dev = find_device (data, stripe->device_id, j); + dev = find_device (data, stripe->device_id); if (!dev) { grub_dprintf ("btrfs", @@ -973,7 +971,8 @@ grub_btrfs_unmount (struct grub_btrfs_data *data) unsigned i; /* The device 0 is closed one layer upper. */ for (i = 1; i < data->n_devices_attached; i++) - grub_device_close (data->devices_attached[i].dev); + if (data->devices_attached[i].dev) + grub_device_close (data->devices_attached[i].dev); grub_free (data->devices_attached); grub_free (data->extent); grub_free (data); -- 2.18.0.rc2