Messages in this thread | | | Date | Sat, 02 Feb 2002 14:16:41 -0600 | From | Stephen Lord <> | Subject | Re: O_DIRECT fails in some kernel and FS |
| |
Chris Mason wrote:
> >On Saturday, February 02, 2002 08:54:38 PM +0100 Andrea Arcangeli <andrea@suse.de> wrote: > >>>Chris and I had initially decided to unpack the tails on file open >>>if O_DIRECT is used, but it seems cleaner to add a >>>reiserfs_get_block_direct_io, and have it return -EINVAL if a read >>>went to a tail. writes that happen to a tail will trigger tail >>>conversion. >>> >>This is a safe approch (no risk of corruption etc..). However to provide >>the same semantics of the other filesystems it would be even better if >>we could unpack the tail within reiserfs_get_block_direct_io rather than >>returning -EINVAL, but ok, most apps should work fine anyways (and as >>worse people can workaround the magic by remounting reiserfs with notail >>before writing the data that will need to be handled later via >>O_DIRECT). >> > >In the normal case, O_DIRECT can't be done on a file with a tail. > >The way I read generic_file_direct_IO, O_DIRECT is only done in >units that start block aligned, and continue for a block aligned >length. So, this can never include a packed file tail. > >We should only need to worry if i_size on the file is wrong, and allows a >read/write to a block aligned chunk on a file with a tail, which should >only be legal in the expanding truncate case from older kernels. The >-EINVAL return should only happen in this (very unlikely) case. > >-chris > Can't you fall back to buffered I/O for the tail? OK it complicates the code, probably a lot, but it keeps things sane from the user's point of view.
Steve
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |