2009-03-08 13:29:52

by Bodo Eggert

[permalink] [raw]
Subject: Re: Question regarding direntry read error in fat filesystem when a device is removed

YS Kim <[email protected]> wrote:

> I have a question about too many error messages from FAT when
> unexpected device removal occurs.
> I got the following error messages when I unplugged a USB
> drive(formatted as FAT) during direntry reading.
>
> sd 0:0:0:0: rejecting I/O to device being removed
> FAT: Directory bread(block 1478192) failed
> sd 0:0:0:0: rejecting I/O to device being removed
> FAT: Directory bread(block 1478193) failed
> sd 0:0:0:0: rejecting I/O to device being removed
> FAT: Directory bread(block 1478194) failed
> sd 0:0:0:0: rejecting I/O to device being removed
> FAT: Directory bread(block 1478195) failed
> ...
>
> From the code of fat__get_entry in dir.c, I found that it continues to
> read the next device block
> even if the block reading has been failed. Because of this continuous
> read, a lot of error messages
> come up if the device itself is removed during reading fairly many
> files, and it causes the malfunction
> of my embedded system.
[...]
> Thus, if I modify the code to just return error when fat__get_entry
> fails to read blocks, could it be
> cause any side effects? Except the purpose of backup/recovery, is
> there any other reason for
> the continuous block read?

I guess aborting the directory read would work as expected, but what about
suppressing the messages if you're not sure?