• A
    [PATCH] generic_file_buffered_write(): handle zero-length iovec segments · 81b0c871
    Andrew Morton 提交于
    The recent generic_file_write() deadlock fix caused
    generic_file_buffered_write() to loop inifinitely when presented with a
    zero-length iovec segment.  Fix.
    
    Note that this fix deliberately avoids calling ->prepare_write(),
    ->commit_write() etc with a zero-length write.  This is because I don't trust
    all filesystems to get that right.
    
    This is a cautious approach, for 2.6.17.x.  For 2.6.18 we should just go ahead
    and call ->prepare_write() and ->commit_write() with the zero length and fix
    any broken filesystems.  So I'll make that change once this code is stabilised
    and backported into 2.6.17.x.
    
    The reason for preferring to call ->prepare_write() and ->commit_write() with
    the zero-length segment: a zero-length segment _should_ be sufficiently
    uncommon that this is the correct way of handling it.  We don't want to
    optimise for poorly-written userspace at the expense of well-written
    userspace.
    
    Cc: "Vladimir V. Saveliev" <vs@namesys.com>
    Cc: Neil Brown <neilb@suse.de>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: Chris Wright <chrisw@sous-sol.org>
    Cc: Greg KH <greg@kroah.com>
    Cc: <stable@kernel.org>
    Cc: walt <wa1ter@myrealbox.com>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    81b0c871
filemap.c 63.4 KB