On 06/14/2018 01:45 PM, Daniel Kiper wrote: > On Mon, Jun 04, 2018 at 09:26:06PM +0200, Goffredo Baroncelli wrote: >> Resend this patch because I am not sure that all received it. > > It looks that #4 is a bit unfortunate for you and/or patch series... :-)))
Yes, but I have another suspect: the patch #4 never changed, and I know that gmail "collapse" the emails when these are equal... > >> BR >> G.Baroncelli >> >> >> -------- Forwarded Message -------- >> Subject: [PATCH 4/9] btrfs: Avoid a rescan for a device which was already >> not found. >> Date: Sun, 3 Jun 2018 20:53:43 +0200 >> From: Goffredo Baroncelli <kreij...@gmail.com> >> To: grub-devel@gnu.org >> CC: Goffredo Baroncelli <kreij...@inwind.it> >> >> If a device is not found, record this failure by storing NULL in >> data->devices_attached[]. This way we avoid unnecessary devices rescan, > > Hmmm... Could you point me out where this store happens below? Se below [...] >> 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; >> - } The check above, performs a function exit if ctx.dev_found is NULL. Removing this check allows to store the NULL in the array. In case of another iteration we know that the device is missing without doing a rescam >> + >> + 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.17.1 >> >> >> >> _______________________________________________ >> Grub-devel mailing list >> Grub-devel@gnu.org >> https://lists.gnu.org/mailman/listinfo/grub-devel >> > -- gpg @keyserver.linux.it: Goffredo Baroncelli <kreijackATinwind.it> Key fingerprint BBF5 1610 0B64 DAC6 5F7D 17B2 0EDA 9B37 8B82 E0B5 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel