• Mikulas Patocka's avatar
    hpfs: optimize quad buffer loading · 1c0b8a7a
    Mikulas Patocka authored
    HPFS needs to load 4 consecutive 512-byte sectors when accessing the
    directory nodes or bitmaps.  We can't switch to 2048-byte block size
    because files are allocated in the units of 512-byte sectors.
    
    Previously, the driver would allocate a 2048-byte area using kmalloc,
    copy the data from four buffers to this area and eventually copy them
    back if they were modified.
    
    In the current implementation of the buffer cache, buffers are allocated
    in the pagecache.  That means that 4 consecutive 512-byte buffers are
    stored in consecutive areas in the kernel address space.  So, we don't
    need to allocate extra memory and copy the content of the buffers there.
    
    This patch optimizes the code to avoid copying the buffers.  It checks
    if the four buffers are stored in contiguous memory - if they are not,
    it falls back to allocating a 2048-byte area and copying data there.
    Signed-off-by: default avatarMikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    1c0b8a7a
buffer.c 4.61 KB