From owner-svn-src-head@FreeBSD.ORG Fri Mar 27 05:35:12 2009 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 DCE2F1065675; Fri, 27 Mar 2009 05:35:12 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CB1E18FC19; Fri, 27 Mar 2009 05:35:12 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n2R5ZCV3049142; Fri, 27 Mar 2009 05:35:12 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n2R5ZCd2049141; Fri, 27 Mar 2009 05:35:12 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <200903270535.n2R5ZCd2049141@svn.freebsd.org> From: Marcel Moolenaar Date: Fri, 27 Mar 2009 05:35:12 +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: r190461 - head/sys/geom/part 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: Fri, 27 Mar 2009 05:35:13 -0000 Author: marcel Date: Fri Mar 27 05:35:12 2009 New Revision: 190461 URL: http://svn.freebsd.org/changeset/base/190461 Log: Sharpen the saw: o Don't create an APM scheme underneath another scheme when the probe doesn't allow it. o APM uses 32-bit block numbers. Limit the scheme to 2^32-1 blocks when the media is larger. Modified: head/sys/geom/part/g_part_apm.c Modified: head/sys/geom/part/g_part_apm.c ============================================================================== --- head/sys/geom/part/g_part_apm.c Fri Mar 27 03:52:08 2009 (r190460) +++ head/sys/geom/part/g_part_apm.c Fri Mar 27 05:35:12 2009 (r190461) @@ -216,6 +216,11 @@ g_part_apm_create(struct g_part_table *b { struct g_provider *pp; struct g_part_apm_table *table; + uint32_t last; + + /* We don't nest, which means that our depth should be 0. */ + if (basetable->gpt_depth != 0) + return (ENXIO); table = (struct g_part_apm_table *)basetable; pp = gpp->gpp_provider; @@ -223,12 +228,15 @@ g_part_apm_create(struct g_part_table *b pp->mediasize < (2 + 2 * basetable->gpt_entries) * pp->sectorsize) return (ENOSPC); + /* APM uses 32-bit LBAs. */ + last = MIN(pp->mediasize / pp->sectorsize, 0xffffffff) - 1; + basetable->gpt_first = 2 + basetable->gpt_entries; - basetable->gpt_last = (pp->mediasize / pp->sectorsize) - 1; + basetable->gpt_last = last; table->ddr.ddr_sig = APM_DDR_SIG; table->ddr.ddr_blksize = pp->sectorsize; - table->ddr.ddr_blkcount = basetable->gpt_last + 1; + table->ddr.ddr_blkcount = last + 1; table->self.ent_sig = APM_ENT_SIG; table->self.ent_pmblkcnt = basetable->gpt_entries + 1;