Real sadump limits the number of disks that can be configured at the
same time upto 16, but software side can easily permit more if machine
resource is enough. So this patch remove the limitation.
Signed-off-by: HATAYAMA Daisuke <[email protected]>
---
sadump.c | 38 ++++++++++++++++++++++++++++----------
sadump.h | 2 +-
2 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/sadump.c b/sadump.c
index 8572596..3482e85 100644
--- a/sadump.c
+++ b/sadump.c
@@ -86,6 +86,7 @@ sadump_cleanup_sadump_data(void)
free(sd->block_table);
if (sd->sd_list[0])
free(sd->sd_list[0]);
+ free(sd->sd_list);
memset(&sadump_data, 0, sizeof(sadump_data));
@@ -374,16 +375,6 @@ restart:
goto err;
}
- if (flags & SADUMP_DISKSET) {
-
- sd_list_len_0 = malloc(sizeof(struct sadump_diskset_data));
- if (!sd_list_len_0) {
- error(INFO, "sadump: cannot allocate diskset data
buffer\n");
- goto err;
- }
-
- }
-
sd->filename = file;
sd->flags = flags;
@@ -417,11 +408,26 @@ restart:
sd->page_buf = page_buf;
if (flags & SADUMP_DISKSET) {
+
+ sd_list_len_0 = malloc(sizeof(struct sadump_diskset_data));
+ if (!sd_list_len_0) {
+ error(INFO,
+ "sadump: cannot allocate diskset data buffer\n");
+ goto err;
+ }
+
sd_list_len_0->filename = sd->filename;
sd_list_len_0->dfd = sd->dfd;
sd_list_len_0->header = sd->header;
sd_list_len_0->data_offset = sd->data_offset;
+ sd->sd_list = malloc(sizeof(struct sadump_diskset_data *));
+ if (!sd->sd_list) {
+ error(INFO,
+ "sadump: cannot allocate diskset list buffer\n");
+ goto err;
+ }
+
sd->sd_list_len = 1;
sd->sd_list[0] = sd_list_len_0;
}
@@ -451,6 +457,8 @@ err:
free(page_buf);
free(sd_list_len_0);
+ free(sd->sd_list);
+
return FALSE;
}
@@ -603,6 +611,16 @@ open_disk(char *file)
return FALSE;
}
+ sd->sd_list = realloc(sd->sd_list,
+ sd->sd_list_len *
+ sizeof(struct sadump_diskset_data *));
+ if (!sd->sd_list) {
+ if (CRASHDEBUG(1)) {
+ error(INFO, "sadump: cannot malloc diskset list
buffer\n");
+ }
+ return FALSE;
+ }
+
this_disk = malloc(sizeof(struct sadump_diskset_data));
if (!this_disk) {
if (CRASHDEBUG(1)) {
diff --git a/sadump.h b/sadump.h
index c5e3591..9adffde 100644
--- a/sadump.h
+++ b/sadump.h
@@ -200,7 +200,7 @@ struct sadump_data {
ulong *block_table;
int sd_list_len;
- struct sadump_diskset_data *sd_list[SADUMP_MAX_DISK_SET_NUM];
+ struct sadump_diskset_data **sd_list;
};
struct sadump_data *sadump_get_sadump_data(void);
--
Crash-utility mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/crash-utility