On Fri, Jun 13, 2008 at 1:00 PM, Pavel Roskin <[EMAIL PROTECTED]> wrote: > Quoting Bean <[EMAIL PROTECTED]>: > >> On Fri, Jun 13, 2008 at 12:31 PM, Pavel Roskin <[EMAIL PROTECTED]> wrote: >>> >>> Quoting Bean <[EMAIL PROTECTED]>: >>> >>>> After more thoughts, I think the current method still have problem. >>>> grub_disk_read reads up to 8192 bytes at a time, which can be larger >>>> than the block size. >>> >>> But we never ask grub_disk_read() to read across the block boundary in >>> grub_fshelp_read(). The code takes care of it. I assume >>> grub_disk_read() >>> would not write more than requested to the buffer. >> >> grub_disk_read would attempt to read up to GRUB_DISK_CACHE_SIZE and >> put the result in a cache, then copy the necessary part to output. > > Then I don't see any problem with it. Maybe you could give an example? > >>>> Unless all or none of the sectors in the same >>>> block is mapped, we end up reading the wrong sector. So we need to do >>>> the mapping inside grub_disk_read. >>> >>> But mapping is done for blocks, not for sectors. grub_fshelp_map_block() >>> clearly assumes that for every filesystem. >> >> block size is fs related, but most are less than 8192 bytes. > > I don't understand why caching would have any effect. It should be > transparent for higher layers, like caching inside the hard drive. If > caching is not transparent, then it's broken.
Hi, I'm sorry I got a little confused. Your method does work, no need to worry about it now. -- Bean _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel