deny partial write for loop dev fd
authorDmitry Monakhov <dmonakhov@sw.ru>
Tue, 16 Oct 2007 08:25:02 +0000 (01:25 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 16 Oct 2007 16:42:55 +0000 (09:42 -0700)
Partial write can be easily supported by LO_CRYPT_NONE mode, but it is not
easy in LO_CRYPT_CRYPTOAPI case, because of its block nature.  I don't know
who still used cryptoapi, but theoretically it is possible.  So let's leave
things as they are.  Loop device doesn't support partial write before
Nick's "write_begin/write_end" patch set, and let's it behave the same way
after.

Signed-off-by: Dmitriy Monakhov <dmonakhov@openvz.org>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/block/loop.c

index a5f993ac28ddce4e4bf670b06ebc8c321011bdc3..e5a051577a5e617008f263b8cb5c9f914e1fe6a7 100644 (file)
@@ -245,10 +245,8 @@ static int do_lo_send_aops(struct loop_device *lo, struct bio_vec *bvec,
 
                ret = pagecache_write_end(file, mapping, pos, size, copied,
                                                        page, fsdata);
-               if (ret < 0)
+               if (ret < 0 || ret != copied)
                        goto fail;
-               if (ret < copied)
-                       copied = ret;
 
                if (unlikely(transfer_result))
                        goto fail;