Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 312830 Details for
Bug 455616
Running kpartx –a against a gpt labeled disk results in messages
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
Fix to make kpartx 64bit compatable.
64_bit_kpartx.patch (text/plain), 6.39 KB, created by
Ben Marzinski
on 2008-07-28 23:19:47 UTC
(
hide
)
Description:
Fix to make kpartx 64bit compatable.
Filename:
MIME Type:
Creator:
Ben Marzinski
Created:
2008-07-28 23:19:47 UTC
Size:
6.39 KB
patch
obsolete
>diff -urpN multipath-tools-0.4.5.72/kpartx/devmapper.c multipath-tools-0.4.5.72-patched/kpartx/devmapper.c >--- multipath-tools-0.4.5.72/kpartx/devmapper.c 2008-04-14 17:32:04.000000000 -0500 >+++ multipath-tools-0.4.5.72-patched/kpartx/devmapper.c 2008-07-28 11:02:59.000000000 -0500 >@@ -4,10 +4,12 @@ > #include <stdio.h> > #include <stdlib.h> > #include <string.h> >+#include <stdint.h> > #include <libdevmapper.h> > #include <ctype.h> > #include <linux/kdev_t.h> > #include <errno.h> >+#include "devmapper.h" > > #define UUID_PREFIX "part%d-" > #define MAX_PREFIX_LEN 8 >@@ -72,7 +74,7 @@ dm_simplecmd (int task, const char *name > > extern int > dm_addmap (int task, const char *name, const char *target, >- const char *params, unsigned long size, const char *uuid, int part, >+ const char *params, uint64_t size, const char *uuid, int part, > mode_t mode, uid_t uid, gid_t gid) { > int r = 0; > struct dm_task *dmt; >diff -urpN multipath-tools-0.4.5.72/kpartx/devmapper.h multipath-tools-0.4.5.72-patched/kpartx/devmapper.h >--- multipath-tools-0.4.5.72/kpartx/devmapper.h 2008-04-14 17:32:04.000000000 -0500 >+++ multipath-tools-0.4.5.72-patched/kpartx/devmapper.h 2008-07-28 11:04:15.000000000 -0500 >@@ -1,7 +1,7 @@ > int dm_prereq (char *, int, int, int); > int dm_simplecmd (int, const char *); >-int dm_addmap (int, const char *, const char *, const char *, unsigned long, >- char *, int, mode_t, uid_t, gid_t); >+int dm_addmap (int, const char *, const char *, const char *, uint64_t, >+ const char *, int, mode_t, uid_t, gid_t); > int dm_map_present (char *); > const char * dm_mapname(int major, int minor); > dev_t dm_get_first_dep(char *devname); >diff -urpN multipath-tools-0.4.5.72/kpartx/gpt.c multipath-tools-0.4.5.72-patched/kpartx/gpt.c >--- multipath-tools-0.4.5.72/kpartx/gpt.c 2005-04-11 08:36:50.000000000 -0500 >+++ multipath-tools-0.4.5.72-patched/kpartx/gpt.c 2008-07-28 10:59:51.000000000 -0500 >@@ -36,6 +36,7 @@ > #include <errno.h> > #include <endian.h> > #include <byteswap.h> >+#include <linux/fs.h> > #include "crc32.h" > > #if BYTE_ORDER == LITTLE_ENDIAN >@@ -50,10 +51,18 @@ > # define __cpu_to_le32(x) bswap_32(x) > #endif > >+#ifndef BLKGETLASTSECT > #define BLKGETLASTSECT _IO(0x12,108) /* get last sector of block device */ >+#endif >+#ifndef BLKGETSIZE > #define BLKGETSIZE _IO(0x12,96) /* return device size */ >+#endif >+#ifndef BLKSSZGET > #define BLKSSZGET _IO(0x12,104) /* get block device sector size */ >+#endif >+#ifndef BLKGETSIZE64 > #define BLKGETSIZE64 _IOR(0x12,114,sizeof(uint64_t)) /* return device size in bytes (u64 *arg) */ >+#endif > > struct blkdev_ioctl_param { > unsigned int block; >@@ -143,20 +152,14 @@ get_sector_size(int filedes) > static uint64_t > _get_num_sectors(int filedes) > { >- unsigned long sectors=0; > int rc; >-#if 0 >- uint64_t bytes=0; >+ uint64_t bytes=0; > >- rc = ioctl(filedes, BLKGETSIZE64, &bytes); >+ rc = ioctl(filedes, BLKGETSIZE64, &bytes); > if (!rc) > return bytes / get_sector_size(filedes); >-#endif >- rc = ioctl(filedes, BLKGETSIZE, §ors); >- if (rc) >- return 0; >- >- return sectors; >+ >+ return 0; > } > > /************************************************************ >@@ -193,7 +196,7 @@ last_lba(int filedes) > sectors = 1; > } > >- return sectors - 1; >+ return sectors ? sectors - 1 : 0; > } > > >@@ -220,17 +223,22 @@ read_lba(int fd, uint64_t lba, void *buf > { > int sector_size = get_sector_size(fd); > off_t offset = lba * sector_size; >+ uint64_t lastlba; > ssize_t bytesread; > > lseek(fd, offset, SEEK_SET); > bytesread = read(fd, buffer, bytes); > >+ lastlba = last_lba(fd); >+ if (!lastlba) >+ return bytesread; >+ > /* Kludge. This is necessary to read/write the last > block of an odd-sized disk, until Linux 2.5.x kernel fixes. > This is only used by gpt.c, and only to read > one sector, so we don't have to be fancy. > */ >- if (!bytesread && !(last_lba(fd) & 1) && lba == last_lba(fd)) { >+ if (!bytesread && !(lastlba & 1) && lba == lastlba) { > bytesread = read_lastoddsector(fd, lba, buffer, bytes); > } > return bytesread; >@@ -505,7 +513,8 @@ find_valid_gpt(int fd, gpt_header ** gpt > if (!gpt || !ptes) > return 0; > >- lastlba = last_lba(fd); >+ if (!(lastlba = last_lba(fd))) >+ return 0; > good_pgpt = is_gpt_valid(fd, GPT_PRIMARY_PARTITION_TABLE_LBA, > &pgpt, &pptes); > if (good_pgpt) { >diff -urpN multipath-tools-0.4.5.72/kpartx/kpartx.c multipath-tools-0.4.5.72-patched/kpartx/kpartx.c >--- multipath-tools-0.4.5.72/kpartx/kpartx.c 2008-04-14 17:32:04.000000000 -0500 >+++ multipath-tools-0.4.5.72-patched/kpartx/kpartx.c 2008-07-28 11:43:40.000000000 -0500 >@@ -25,6 +25,7 @@ > #include <stdlib.h> > #include <string.h> > #include <unistd.h> >+#include <stdint.h> > #include <sys/stat.h> > #include <sys/types.h> > #include <ctype.h> >@@ -452,10 +453,10 @@ main(int argc, char **argv){ > if (slices[j].size == 0) > continue; > >- printf("%s%s%d : 0 %lu %s %lu\n", >+ printf("%s%s%d : 0 %"PRIu64" %s %"PRIu64"\n", > device + off, delim, j+1, >- (unsigned long) slices[j].size, device, >- (unsigned long) slices[j].start); >+ slices[j].size, device, >+ slices[j].start); > } > break; > >@@ -501,8 +502,8 @@ main(int argc, char **argv){ > } > strip_slash(partname); > >- if (safe_sprintf(params, "%s %lu", device, >- (unsigned long)slices[j].start)) { >+ if (safe_sprintf(params, "%s %"PRIu64, device, >+ slices[j].start)) { > fprintf(stderr, "params too small\n"); > exit(1); > } >@@ -520,7 +521,7 @@ main(int argc, char **argv){ > partname); > > if (verbose) >- printf("add map %s : 0 %lu %s %s\n", >+ printf("add map %s : 0 %"PRIu64" %s %s\n", > partname, slices[j].size, > DM_TARGET, params); > } >diff -urpN multipath-tools-0.4.5.72/kpartx/kpartx.h multipath-tools-0.4.5.72-patched/kpartx/kpartx.h >--- multipath-tools-0.4.5.72/kpartx/kpartx.h 2006-09-19 16:06:40.000000000 -0500 >+++ multipath-tools-0.4.5.72-patched/kpartx/kpartx.h 2008-07-28 11:05:58.000000000 -0500 >@@ -1,6 +1,8 @@ > #ifndef _KPARTX_H > #define _KPARTX_H > >+#include <stdint.h> >+ > /* > * For each partition type there is a routine that takes > * a block device and a range, and returns the list of >@@ -20,8 +22,8 @@ > * units: 512 byte sectors > */ > struct slice { >- unsigned long start; >- unsigned long size; >+ uint64_t start; >+ uint64_t size; > }; > > typedef int (ptreader)(int fd, struct slice all, struct slice *sp, int ns);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 455616
: 312830