From mboxrd@z Thu Jan 1 00:00:00 1970 From: Al Viro Subject: Re: [RFC][PATCH 10/13] make dump_emit() use vfs_write() instead of banging at ->f_op->write directly Date: Wed, 9 Oct 2013 02:18:33 +0100 Message-ID: <20131009011833.GE13318@ZenIV.linux.org.uk> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Al Viro , linux-fsdevel , Linux Kernel Mailing List To: Linus Torvalds Return-path: Content-Disposition: inline In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Tue, Oct 08, 2013 at 05:52:42PM -0700, Linus Torvalds wrote: > On Tue, Oct 8, 2013 at 5:15 PM, Al Viro wrote: > > > > ... and deal with short writes properly > > .. except you don't. > > > + while (nr) { > > + if (dump_interrupted()) > > + return 0; > > + n = vfs_write(file, addr, nr, &pos); > > + if (n < 0) > > + return 0; > > + file->f_pos = pos; > > + cprm->written += n; > > + nr -= n; > > + } > > Please handle 'n == 0' too. Maybe it never happens (ie you get EPIPE > or ENOSPC), but write returning zero is actually possible and a valid > return value and traditional for "end of media". Looping forever is > not a good idea. Point, but I would argue that we should yell very loud if we get 0 from vfs_write() for non-zero size. I'm not sure if POSIX allows write(2) to return that, but a lot of userland code won't be expecting that and won't be able to cope...