Skip to content
  • AKASHI Takahiro's avatar
    fs: fat: handle deleted directory entries correctly · 39606d46
    AKASHI Takahiro authored and Tom Rini's avatar Tom Rini committed
    Unlink test for FAT file system seems to fail at test_unlink2.
    (When I added this test, I haven't seen any errors though.)
    for example,
    ===8<===
    fs_obj_unlink = ['fat', '/home/akashi/tmp/uboot_sandbox_test/128MB.fat32.img']
    
        def test_unlink2(self, u_boot_console, fs_obj_unlink):
            """
            Test Case 2 - delete many files
            """
            fs_type,fs_img = fs_obj_unlink
            with u_boot_console.log.section('Test Case 2 - unlink (many)'):
                output = u_boot_console.run_command('host bind 0 %s' % fs_img)
    
                for i in range(0, 20):
                    output = u_boot_console.run_command_list([
                        '%srm host 0:0 dir2/0123456789abcdef%02x' % (fs_type, i),
                        '%sls host 0:0 dir2/0123456789abcdef%02x' % (fs_type, i)])
                    assert('' == ''.join(output))
    
                output = u_boot_console.run_command(
                    '%sls host 0:0 dir2' % fs_type)
    >           assert('0 file(s), 2 dir(s)' in output)
    E           AssertionError: assert '0 file(s), 2 dir(s)' in '            ./\r\r\n            ../\r\r\n        0   0123456789abcdef11\r\r\n\r\r\n1 file(s), 2 dir(s)'
    
    test/py/tests/test_fs/test_unlink.py:52: AssertionError
    ===>8===
    
    This can happen when fat_itr_next() wrongly detects an already-
    deleted directory entry.
    
    File deletion, which was added in the commit f8240ce9
    
     ("fs: fat:
    support unlink"), is implemented by marking its entry for a short name
    with DELETED_FLAG, but related entry slots for a long file name are kept
    unmodified. (So entries will never be actually deleted from media.)
    
    To handle this case correctly, an additional check for a directory slot
    will be needed in fat_itr_next().
    
    In addition, I added extra comments about long file name and short file
    name format in FAT file system. Although they are not directly related
    to the issue, I hope it will be helpful for better understandings
    in general.
    
    Signed-off-by: default avatarAKASHI Takahiro <takahiro.akashi@linaro.org>
    39606d46