From owner-freebsd-hackers@FreeBSD.ORG Wed Jan 19 06:57:33 2011 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 430A210656AA for ; Wed, 19 Jan 2011 06:57:33 +0000 (UTC) (envelope-from danny@cs.huji.ac.il) Received: from kabab.cs.huji.ac.il (kabab.cs.huji.ac.il [132.65.16.84]) by mx1.freebsd.org (Postfix) with ESMTP id EBB1D8FC16 for ; Wed, 19 Jan 2011 06:57:32 +0000 (UTC) Received: from pampa.cs.huji.ac.il ([132.65.80.32]) by kabab.cs.huji.ac.il with esmtp id 1PfRyz-0000mX-Oa; Wed, 19 Jan 2011 08:57:29 +0200 X-Mailer: exmh version 2.7.2 01/07/2005 with nmh-1.2 To: Matthew Dillon In-reply-to: <201101190424.p0J4OkgW006798@apollo.backplane.com> References: <334773590.270506.1295050163687.JavaMail.root@erie.cs.uoguelph.ca> <201101190424.p0J4OkgW006798@apollo.backplane.com> Comments: In-reply-to Matthew Dillon message dated "Tue, 18 Jan 2011 20:24:46 -0800." Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 19 Jan 2011 08:57:29 +0200 From: Daniel Braniss Message-ID: Cc: freebsd-hackers@freebsd.org, Rick Macklem Subject: Re: NFS: file too large X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Jan 2011 06:57:33 -0000 > :Well, since a server specifies the maximum file size it can > :handle, it seems good form to check for that in the client. > :(Although I'd agree that a server shouldn't crash if a read/write > : that goes beyond that limit.) > : > :Also, as Matt notes, off_t is signed. As such, it looks to me like > :the check could mess up if uio_offset it right near 0x7fffffffffffffff, > :so that uio->ui_offset + uio->uio_resid ends up negative. I think the > :check a little above that for uio_offset < 0 should also check > :uio_offset + uio_resid < 0 to avoid this. > : > :rick > > Yes, though doing an overflow check in C, at least with newer versions > of GCC, requires a separate comparison. The language has been mangled > pretty badly over the years. > > > if (a + b < a) -> can be optimized-out by the compiler > > if (a + b < 0) -> also can be optimized-out by the compiler > > x = a + b; > if (x < a) -> this is ok (best method) > > x = a + b; > if (x < 0) -> this is ok > > > This sort of check may already be made in various places (e.g. by UFS > and/or uio), since negative offsets are used to identify meta-data in > UFS. > > -Matt > Matthew Dillon > my question, badly written, was why not let the underlaying fs (ufs, zfs, etc) have the last word, instead of the nfsclient having to guess? Is there a problem in sending back the error? danny