Messages in this thread | | | Date | Sun, 5 Sep 2004 00:12:06 +0400 | From | Andrey Savochkin <> | Subject | Re: EXT3: problem with copy_from_user inside a transaction |
| |
On Sat, Sep 04, 2004 at 06:33:33PM +0400, Andrey Savochkin wrote: > On Sat, Sep 04, 2004 at 03:47:44AM -0400, Chris Mason wrote: > > On Fri, 2004-09-03 at 09:57, Andrey Savochkin wrote: > > > What is the problem -ENOSPC? > > > Do you think about the problem of the page existing before this write, it's > > > content overwritten, but the filesystem being unable to commit that write > > > because it needs more space? > > > > Exactly. In this case, we've effectively corrupted the page cache. > > We've copied data in that isn't (and never will be) reflected on disk. > > It isn't a horribly difficult case, we just need to overwrite the data > > with zeros, making sure to only overwrite the data corresponding to the > > -ENOSPC error. > > Zeroing not mapped buffers in case of error is not difficult, indeed. > > I was speaking about the following case: > - one page of a file is dirtied through a userspace mapping, > - the page doesn't have disk mapping yet (a hole), > - someone issues write() to this page, > - the space allocation fails in commit_write(), when the page content has > already been overwritten with the new data.
After some thought, we can check if the page is not completely mapped to disk and there is a possibility that it's referenced from pte's. In this case we can "commit" the old content in prepare_write(), allocating space and instantiating holes...
Any better ideas?
Andrey - 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/
| |