Re: [code] Unlimited partitions, a try

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Alan Cox wrote:
This was proposed ages ago. Al Viro vetoed sparse minors and it has been
stuck this way ever since. If you have > 15 partitions use device mapper
for it. I'd prefer it fixed but its arguable that device mapper is the
right way to punt all our partitioning to userspace.

Then please fix support for extended partitions in kpartx (part of multipath-tools). Debian has an incomplete patch that does the right thing on activation, but not on deactivation of partitions, and has an obvious off-by-one in the "kpartx -l /dev/sda" output.

Signed-off-by: Hannes Reinecke <[email protected]>
Edited by Alexander E. Patrakov to fix incorrect output of "kpartx -l"
Signed-off-by: Alexander E. Patrakov <[email protected]>

--- a/kpartx/kpartx.c
+++ b/kpartx/kpartx.c
@@ -387,10 +387,10 @@ main(int argc, char **argv){
					slices[j].minor = m++;

					start = slices[j].start - slices[k].start;
-					printf("%s%s%d : 0 %lu /dev/dm-%d %lu\n",
+					printf("%s%s%d : 0 %lu %s%s%d %lu\n",
					       mapname, delim, j+1,
					       (unsigned long) slices[j].size,
-					       slices[k].minor, start);
+					       mapname, delim, k+1, start);
					c--;
				}
				/* Terminate loop if nothing more to resolve */
@@ -431,7 +431,7 @@ main(int argc, char **argv){
			break;

		case ADD:
-			for (j=0, c = 0; j<n; j++) {
+			for (j = 0, c = 0; j < n; j++) {
				if (slices[j].size == 0)
					continue;

@@ -477,6 +477,7 @@ main(int argc, char **argv){
			d = c;
			while (c) {
				for (j = 0; j < n; j++) {
+					unsigned long start;
					int k = slices[j].container - 1;

					if (slices[j].size == 0)
@@ -487,7 +488,7 @@ main(int argc, char **argv){
						continue;

					/* Skip all simple slices */
-					if (k < 0)
+					if (slices[j].container == 0)
						continue;

					/* Check container slice */
@@ -502,10 +503,11 @@ main(int argc, char **argv){
					}
					strip_slash(partname);

+					start = slices[j].start - slices[k].start;
					if (safe_sprintf(params, "%d:%d %lu",
							 slices[k].major,
							 slices[k].minor,
-							 (unsigned long)slices[j].start)) {
+							 start)) {
						fprintf(stderr, "params too small\n");
						exit(1);
					}
@@ -524,9 +526,12 @@ main(int argc, char **argv){
						&slices[j].minor);

					if (verbose)
-						printf("add map %s : 0 %lu %s %s\n",
-						       partname, slices[j].size,
-						       DM_TARGET, params);
+						printf("add map %s (%d:%d): 0 %lu %s\n",
+ partname, + slices[j].major,
+						       slices[j].minor,
+						       slices[j].size,
+						       params);
					c--;
				}
				/* Terminate loop */


--
Alexander E. Patrakov
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux