From be29165a8c970e9efb9b84792ddebfd6fba9a740 Mon Sep 17 00:00:00 2001 From: Thomas Fehr Date: Thu, 24 Jan 2013 14:06:49 +0100 Subject: [PATCH] fix problem reuse of large number of partittions and few extra partition slots available (e.g. 15 on cciss) (bnc#799725) --- package/autoyast2.changes | 6 ++++++ src/include/autopart.ycp | 25 ++++++++++--------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/package/autoyast2.changes b/package/autoyast2.changes index 5a5692579..fcf3751d8 100644 --- a/package/autoyast2.changes +++ b/package/autoyast2.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Jan 24 11:43:57 CET 2013 - fehr@suse.de + +- fix problem reuse of large number of partittions and few extra + partition slots available (e.g. 15 on cciss) (bnc#799725) + ------------------------------------------------------------------- Tue Nov 13 18:00:23 CET 2012 - fehr@suse.de diff --git a/src/include/autopart.ycp b/src/include/autopart.ycp index 1e825dad0..76beb77b5 100644 --- a/src/include/autopart.ycp +++ b/src/include/autopart.ycp @@ -851,17 +851,13 @@ global map AddFilesysData( map st_map, map xml_map ) * available primaries and logical slots ) */ -/* - // FIXME: bnc#620212 - this test is buggy. Reusing more partitions than the hardware still could create will fail - // should be size(ps)-NUM_OF_REUSED - if( size(g["gap"]:[])>0 && - ((g["extended_possible"]:false && -// size(g["free_pnr"]:[])>0 && // reusing all 4 primaries will fail with this - size(ps)+1 <= size(g["ext_pnr"]:[])+size(g["free_pnr"]:[])) || - (!g["extended_possible"]:false && - size(ps) <= size(g["ext_pnr"]:[])+size(g["free_pnr"]:[]))) ) -*/ - if( size(g["gap"]:[])>0 ) + list new_ps = filter( map p, (list)ps, ``(p["create"]:true)); + integer free_pnr = size(g["free_pnr"]:[]); + if( g["extended_possible"]:false ) + free_pnr = free_pnr - 1 + size(g["ext_pnr"]:[]); + y2milestone( "get_perfect_list: size(ps):%1 size(new_ps):%2 sum_free:%3", + size(ps), size(new_ps), free_pnr ); + if( size(g["gap"]:[])>0 && size(new_ps) <= free_pnr ) { map lg = (map) eval(g); @@ -961,10 +957,7 @@ global map AddFilesysData( map st_map, map xml_map ) if( reuseCondition && part["max_cyl"]:0 <= e["end"]:0 && - part["cylinders"]:0 <= e["cylinders"]:0 && - (!e["extended"]:false && (size(lg["free_pnr"]:[])>0 || ! creation_needed ) || - e["extended"]:false && size(lg["ext_pnr"]:[])>0) - ) + part["cylinders"]:0 <= e["cylinders"]:0 ) { map llg = (map) eval(lg); @@ -1628,6 +1621,8 @@ global map AddFilesysData( map st_map, map xml_map ) } pnr = pnr + 1; } + if( isempty(free_pnr) ) + ret["extended_possible"] = false; ret["free_pnr"] = free_pnr; list ext_pnr = [ 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, 25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,