From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id 69E9C7F59 for ; Wed, 24 Jun 2015 06:39:05 -0500 (CDT) Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by relay2.corp.sgi.com (Postfix) with ESMTP id 4BE4C30404E for ; Wed, 24 Jun 2015 04:39:02 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id GgmJigAYwDu2rFHa (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Wed, 24 Jun 2015 04:39:01 -0700 (PDT) Date: Wed, 24 Jun 2015 07:38:59 -0400 From: Brian Foster Subject: Re: [PATCH V2] xfs_repair: automatically enable -f (file) mode when needed Message-ID: <20150624113858.GB61024@bfoster.bfoster> References: <5583383D.4070906@redhat.com> <5584461D.3000008@sandeen.net> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <5584461D.3000008@sandeen.net> List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: xfs-bounces@oss.sgi.com Sender: xfs-bounces@oss.sgi.com To: Eric Sandeen Cc: Eric Sandeen , xfs-oss On Fri, Jun 19, 2015 at 11:41:01AM -0500, Eric Sandeen wrote: > If we specify "-f" to xfs_repair, it recognizes that it's working > on a file, and if the underlying filesystem sector size differs > such that direct IO won't work, it disables direct IO. > > It's odd, though, that we'd need to specify this, and the failure > is non-obvious: > > # xfs_repair /mnt/test/foo.img > Phase 1 - find and verify superblock... > xfs_repair: read failed: Invalid argument > > I see no advantage to requiring the administrator to jump through > this hoop; why not just detect that it's a file, and move on? > > Signed-off-by: Eric Sandeen > --- Reviewed-by: Brian Foster > > V2: don't check statbuf if stat fails, thanks Brian :) > > diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c > index 834697a..2d376be 100644 > --- a/repair/xfs_repair.c > +++ b/repair/xfs_repair.c > @@ -573,6 +573,18 @@ main(int argc, char **argv) > exit(1); > } > > + /* -f forces this, but let's be nice and autodetect it, as well. */ > + if (!isa_file) { > + int fd = libxfs_device_to_fd(x.ddev); > + struct stat64 statbuf; > + > + if (fstat64(fd, &statbuf) < 0) > + do_warn(_("%s: couldn't stat \"%s\"\n"), > + progname, fs_name); > + else if (S_ISREG(statbuf.st_mode)) > + isa_file = 1; > + } > + > /* > * if the sector size of the filesystem we are trying to repair is > * smaller than that of the underlying filesystem (i.e. we are repairing > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs