From owner-svn-src-head@FreeBSD.ORG Tue Oct 25 07:56:28 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2A9D81065677; Tue, 25 Oct 2011 07:56:28 +0000 (UTC) (envelope-from pjd@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 00D418FC08; Tue, 25 Oct 2011 07:56:28 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p9P7uRdR085229; Tue, 25 Oct 2011 07:56:27 GMT (envelope-from pjd@svn.freebsd.org) Received: (from pjd@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p9P7uRFY085227; Tue, 25 Oct 2011 07:56:27 GMT (envelope-from pjd@svn.freebsd.org) Message-Id: <201110250756.p9P7uRFY085227@svn.freebsd.org> From: Pawel Jakub Dawidek Date: Tue, 25 Oct 2011 07:56:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r226722 - head/sbin/geom/class/eli X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 Oct 2011 07:56:28 -0000 Author: pjd Date: Tue Oct 25 07:56:27 2011 New Revision: 226722 URL: http://svn.freebsd.org/changeset/base/226722 Log: When we detect GELI metadata version that is newer than the highest we support, inform the user about that instead of 'MD5 hash mismatch'. Suggested by: Garrett Cooper MFC after: 3 days Modified: head/sbin/geom/class/eli/geom_eli.c Modified: head/sbin/geom/class/eli/geom_eli.c ============================================================================== --- head/sbin/geom/class/eli/geom_eli.c Tue Oct 25 07:48:53 2011 (r226721) +++ head/sbin/geom/class/eli/geom_eli.c Tue Oct 25 07:56:27 2011 (r226722) @@ -594,8 +594,23 @@ eli_metadata_read(struct gctl_req *req, return (-1); } } - if (eli_metadata_decode(sector, md) != 0) { - gctl_error(req, "MD5 hash mismatch for %s.", prov); + error = eli_metadata_decode(sector, md); + switch (error) { + case 0: + break; + case EOPNOTSUPP: + gctl_error(req, + "Provider's %s metadata version %u is too new.\n" + "geli: The highest supported version is %u.", + prov, (unsigned int)md->md_version, G_ELI_VERSION); + return (-1); + case EINVAL: + gctl_error(req, "Inconsistent provider's %s metadata.", prov); + return (-1); + default: + gctl_error(req, + "Unexpected error while decoding provider's %s metadata: %s.", + prov, strerror(error)); return (-1); } return (0); @@ -1410,7 +1425,7 @@ eli_resize(struct gctl_req *req) unsigned char *sector; ssize_t secsize; off_t mediasize, oldsize; - int nargs, provfd; + int error, nargs, provfd; nargs = gctl_get_int(req, "nargs"); if (nargs != 1) { @@ -1461,8 +1476,23 @@ eli_resize(struct gctl_req *req) } /* Check if this sector contains geli metadata. */ - if (eli_metadata_decode(sector, &md) != 0) { - gctl_error(req, "MD5 hash mismatch: no metadata for oldsize."); + error = eli_metadata_decode(sector, &md); + switch (error) { + case 0: + break; + case EOPNOTSUPP: + gctl_error(req, + "Provider's %s metadata version %u is too new.\n" + "geli: The highest supported version is %u.", + prov, (unsigned int)md.md_version, G_ELI_VERSION); + goto out; + case EINVAL: + gctl_error(req, "Inconsistent provider's %s metadata.", prov); + goto out; + default: + gctl_error(req, + "Unexpected error while decoding provider's %s metadata: %s.", + prov, strerror(error)); goto out; }