From owner-freebsd-fs@FreeBSD.ORG Sun May 1 20:47:04 2011 Return-Path: Delivered-To: fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4CA301065672; Sun, 1 May 2011 20:47:04 +0000 (UTC) (envelope-from rmacklem@uoguelph.ca) Received: from esa-annu.mail.uoguelph.ca (esa-annu.mail.uoguelph.ca [131.104.91.36]) by mx1.freebsd.org (Postfix) with ESMTP id E2DFA8FC16; Sun, 1 May 2011 20:47:03 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApwEAGTGvU2DaFvO/2dsb2JhbACEUaJDiHGodY9IgSqDVYEBBI55jj4 X-IronPort-AV: E=Sophos;i="4.64,299,1301889600"; d="scan'208";a="119249997" Received: from erie.cs.uoguelph.ca (HELO zcs3.mail.uoguelph.ca) ([131.104.91.206]) by esa-annu-pri.mail.uoguelph.ca with ESMTP; 01 May 2011 16:47:02 -0400 Received: from zcs3.mail.uoguelph.ca (localhost.localdomain [127.0.0.1]) by zcs3.mail.uoguelph.ca (Postfix) with ESMTP id F331CB3F4C; Sun, 1 May 2011 16:47:02 -0400 (EDT) Date: Sun, 1 May 2011 16:47:02 -0400 (EDT) From: Rick Macklem To: Bob Friesenhahn Message-ID: <956418604.835643.1304282822974.JavaMail.root@erie.cs.uoguelph.ca> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [172.17.91.203] X-Mailer: Zimbra 6.0.10_GA_2692 (ZimbraWebClient - IE7 (Win)/6.0.10_GA_2692) Cc: rmacklem@freebsd.org, fs@freebsd.org Subject: Re: newnfs client and statfs X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 May 2011 20:47:04 -0000 > On Sun, 1 May 2011, Rick Macklem wrote: > > > > Or should I try and do the division to see if the large > > value in sf_abytes will fit in INT64_MAX after the division? > > Something > > like: > > int64_t tmp; > > > > tmp = sfp->sf_abytes; > > tmp /= NFS_FABLKSIZE; > > if (tmp < 0) > > sbp->f_bavail = INT64_MAX; > > else > > sbp->f_bavail = tmp; > > That one seems better because it preserves more of the value, but > perhaps this is better because it does not depend on > undocumented/undefined behavior (also untested): > > uint64_t tmp; > tmp = sfp->sf_abytes / NFS_FABLKSIZE; > if (tmp > (uint64_t) INT64_MAX) > sbp->f_bavail = INT64_MAX; > else > sbp->f_bavail = tmp; > That's basically what I went with for the updated patch, except I didn't put in the "if (tmp > (uint64_t) INT64_MAX)" since once you divide sf_abytes by 2 or more it is guaranteed to be less than or equal INT64_MAX. rick