[gfs2-utils] 02/02: libgfs2: Fix pointer cast byte order issue
by git repository hosting
This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch RHEL7
in repository gfs2-utils.
commit 9349bf264b3a8e60f071ab0f9c11859ca6342395
Author: Andrew Price <anprice(a)redhat.com>
Date: Thu Sep 6 14:28:19 2018 +0100
libgfs2: Fix pointer cast byte order issue
lgfs2_field_assign() currently uses pointer casting to achieve generic
integer assignment based on the width of the field, but this is broken
as a uin32_t field can be assigned the value from the high bytes of the
uint64_t value, for instance. To fix this, store the value into a
uint64_t before casting to the narrower types.
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/libgfs2/meta.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/gfs2/libgfs2/meta.c b/gfs2/libgfs2/meta.c
index 500757d..55133b1 100644
--- a/gfs2/libgfs2/meta.c
+++ b/gfs2/libgfs2/meta.c
@@ -919,6 +919,7 @@ int lgfs2_field_str(char *str, const size_t size, const char *blk, const struct
int lgfs2_field_assign(char *blk, const struct lgfs2_metafield *field, const void *val)
{
char *fieldp = blk + field->offset;
+ uint64_t num = *(uint64_t *)val;
if (field->flags & LGFS2_MFF_UUID) {
memcpy(fieldp, val, 16);
@@ -938,16 +939,16 @@ int lgfs2_field_assign(char *blk, const struct lgfs2_metafield *field, const voi
switch(field->length) {
case sizeof(uint8_t):
- *fieldp = *(uint8_t *)val;
+ *fieldp = (uint8_t)num;
return 0;
case sizeof(uint16_t):
- *(uint16_t *)fieldp = cpu_to_be16(*(uint16_t *)val);
+ *(uint16_t *)fieldp = cpu_to_be16((uint16_t)num);
return 0;
case sizeof(uint32_t):
- *(uint32_t *)fieldp = cpu_to_be32(*(uint32_t *)val);
+ *(uint32_t *)fieldp = cpu_to_be32((uint32_t)num);
return 0;
case sizeof(uint64_t):
- *(uint64_t *)fieldp = cpu_to_be64(*(uint64_t *)val);
+ *(uint64_t *)fieldp = cpu_to_be64((uint64_t)num);
return 0;
default:
/* Will never happen */
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
5 years, 6 months
[gfs2-utils] 01/02: fsck.gfs2: Don't check fs formats we don't
recognise
by git repository hosting
This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch RHEL7
in repository gfs2-utils.
commit 1a4581c3f54b5c794da6537789eeab298b78e031
Author: Andrew Price <anprice(a)redhat.com>
Date: Fri Aug 17 12:49:24 2018 +0100
fsck.gfs2: Don't check fs formats we don't recognise
Currently fsck.gfs2 will ignore sb_fs_format but in order to support
future formats we need to make sure it doesn't try to check filesystems
with formats we don't recognise yet. Better late than never.
Tests included.
rhbz#1616389
rhbz#1622050
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/fsck/fsck.h | 2 ++
gfs2/fsck/initialize.c | 17 ++++++++++++-----
gfs2/libgfs2/super.c | 7 +++++++
tests/fsck.at | 13 +++++++++++++
4 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/gfs2/fsck/fsck.h b/gfs2/fsck/fsck.h
index 8af4eb4..db173c6 100644
--- a/gfs2/fsck/fsck.h
+++ b/gfs2/fsck/fsck.h
@@ -4,6 +4,8 @@
#include "libgfs2.h"
#include "osi_tree.h"
+#define FSCK_MAX_FORMAT (1801)
+
#define FSCK_HASH_SHIFT (13)
#define FSCK_HASH_SIZE (1 << FSCK_HASH_SHIFT)
#define FSCK_HASH_MASK (FSCK_HASH_SIZE - 1)
diff --git a/gfs2/fsck/initialize.c b/gfs2/fsck/initialize.c
index 75f050b..4e323ff 100644
--- a/gfs2/fsck/initialize.c
+++ b/gfs2/fsck/initialize.c
@@ -1332,12 +1332,12 @@ static int fill_super_block(struct gfs2_sbd *sdp)
if (sizeof(struct gfs2_sb) > sdp->sd_sb.sb_bsize){
log_crit( _("GFS superblock is larger than the blocksize!\n"));
log_debug("sizeof(struct gfs2_sb) > sdp->sd_sb.sb_bsize\n");
- return -1;
+ return FSCK_ERROR;
}
if (compute_constants(sdp)) {
log_crit("%s\n", _("Failed to compute file system constants"));
- exit(FSCK_ERROR);
+ return FSCK_ERROR;
}
ret = read_sb(sdp);
if (ret < 0) {
@@ -1346,10 +1346,15 @@ static int fill_super_block(struct gfs2_sbd *sdp)
/* Now that we've tried to repair it, re-read it. */
ret = read_sb(sdp);
if (ret < 0)
- return -1;
+ return FSCK_ERROR;
}
if (sdp->gfs1)
sbd1 = (struct gfs_sb *)&sdp->sd_sb;
+ else if (sdp->sd_sb.sb_fs_format > FSCK_MAX_FORMAT) {
+ log_crit(_("Unsupported gfs2 format found: %"PRIu32"\n"), sdp->sd_sb.sb_fs_format);
+ log_crit(_("A newer fsck.gfs2 is required to check this file system.\n"));
+ return FSCK_USAGE;
+ }
return 0;
}
@@ -1554,6 +1559,7 @@ int initialize(struct gfs2_sbd *sdp, int force_check, int preen,
int *all_clean)
{
int clean_journals = 0, open_flag;
+ int err;
*all_clean = 0;
@@ -1599,8 +1605,9 @@ int initialize(struct gfs2_sbd *sdp, int force_check, int preen,
}
/* read in sb from disk */
- if (fill_super_block(sdp))
- return FSCK_ERROR;
+ err = fill_super_block(sdp);
+ if (err != FSCK_OK)
+ return err;
/* Change lock protocol to be fsck_* instead of lock_* */
if (!opts.no && preen_is_safe(sdp, preen, force_check)) {
diff --git a/gfs2/libgfs2/super.c b/gfs2/libgfs2/super.c
index 6175203..cc9679f 100644
--- a/gfs2/libgfs2/super.c
+++ b/gfs2/libgfs2/super.c
@@ -29,11 +29,18 @@ int check_sb(struct gfs2_sb *sb)
errno = EIO;
return -1;
}
+ /* Check for gfs1 */
if (sb->sb_fs_format == GFS_FORMAT_FS &&
sb->sb_header.mh_format == GFS_FORMAT_SB &&
sb->sb_multihost_format == GFS_FORMAT_MULTI) {
return 1;
}
+ /* It's gfs2. Check format number is in a sensible range. */
+ if (sb->sb_fs_format < GFS2_FORMAT_FS ||
+ sb->sb_fs_format > 1899) {
+ errno = EINVAL;
+ return -1;
+ }
return 2;
}
diff --git a/tests/fsck.at b/tests/fsck.at
index 0dfeac3..d3cf3db 100644
--- a/tests/fsck.at
+++ b/tests/fsck.at
@@ -45,3 +45,16 @@ AT_SETUP([Fix bad rindex entry #1])
AT_KEYWORDS(fsck.gfs2 fsck)
GFS_NUKERG_CHECK([mkfs.gfs2 -O -p lock_nolock $GFS_TGT], [-i 1])
AT_CLEANUP
+
+AT_SETUP([gfs2 format versions])
+AT_KEYWORDS(fsck.gfs2 fsck)
+GFS_TGT_REGEN
+AT_CHECK([mkfs.gfs2 -O -p lock_nolock ${GFS_TGT}], 0, [ignore], [ignore])
+AT_CHECK([echo "set sb { sb_fs_format: 1802 }" | gfs2l ${GFS_TGT}], 0, [ignore], [ignore])
+# Unsupported format, FSCK_USAGE == 16
+AT_CHECK([fsck.gfs2 -y $GFS_TGT], 16, [ignore], [ignore])
+# Format out of range
+AT_CHECK([echo "set sb { sb_fs_format: 4242 }" | gfs2l ${GFS_TGT}], 0, [ignore], [ignore])
+AT_CHECK([fsck.gfs2 -y $GFS_TGT], 1, [ignore], [ignore])
+AT_CHECK([fsck.gfs2 -n $GFS_TGT], 0, [ignore], [ignore])
+AT_CLEANUP
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
5 years, 6 months
[gfs2-utils] 01/01: libgfs2: Fix pointer cast byte order issue
by git repository hosting
This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch master
in repository gfs2-utils.
commit 57553571df2f33ec45a81fa5599873ddfc890c92
Author: Andrew Price <anprice(a)redhat.com>
Date: Thu Sep 6 14:28:19 2018 +0100
libgfs2: Fix pointer cast byte order issue
lgfs2_field_assign() currently uses pointer casting to achieve generic
integer assignment based on the width of the field, but this is broken
as a uin32_t field can be assigned the value from the high bytes of the
uint64_t value, for instance. To fix this, store the value into a
uint64_t before casting to the narrower types.
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/libgfs2/meta.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/gfs2/libgfs2/meta.c b/gfs2/libgfs2/meta.c
index a828946..e0ea491 100644
--- a/gfs2/libgfs2/meta.c
+++ b/gfs2/libgfs2/meta.c
@@ -940,6 +940,7 @@ int lgfs2_field_str(char *str, const size_t size, const char *blk, const struct
int lgfs2_field_assign(char *blk, const struct lgfs2_metafield *field, const void *val)
{
char *fieldp = blk + field->offset;
+ uint64_t num = *(uint64_t *)val;
if (field->flags & LGFS2_MFF_UUID) {
memcpy(fieldp, val, 16);
@@ -959,16 +960,16 @@ int lgfs2_field_assign(char *blk, const struct lgfs2_metafield *field, const voi
switch(field->length) {
case sizeof(uint8_t):
- *fieldp = *(uint8_t *)val;
+ *fieldp = (uint8_t)num;
return 0;
case sizeof(uint16_t):
- *(uint16_t *)fieldp = cpu_to_be16(*(uint16_t *)val);
+ *(uint16_t *)fieldp = cpu_to_be16((uint16_t)num);
return 0;
case sizeof(uint32_t):
- *(uint32_t *)fieldp = cpu_to_be32(*(uint32_t *)val);
+ *(uint32_t *)fieldp = cpu_to_be32((uint32_t)num);
return 0;
case sizeof(uint64_t):
- *(uint64_t *)fieldp = cpu_to_be64(*(uint64_t *)val);
+ *(uint64_t *)fieldp = cpu_to_be64((uint64_t)num);
return 0;
default:
/* Will never happen */
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
5 years, 6 months
[gfs2-utils] 01/01: fsck.gfs2: Don't check fs formats we don't
recognise
by git repository hosting
This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch master
in repository gfs2-utils.
commit 47261faa39aca05d6feb486fdeec26f8ffc3ef15
Author: Andrew Price <anprice(a)redhat.com>
Date: Fri Aug 17 12:49:24 2018 +0100
fsck.gfs2: Don't check fs formats we don't recognise
Currently fsck.gfs2 will ignore sb_fs_format but in order to support
future formats we need to make sure it doesn't try to check filesystems
with formats we don't recognise yet. Better late than never.
Tests included.
rhbz#1616389
rhbz#1622050
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/fsck/fsck.h | 2 ++
gfs2/fsck/initialize.c | 17 ++++++++++++-----
gfs2/libgfs2/super.c | 7 +++++++
tests/fsck.at | 13 +++++++++++++
4 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/gfs2/fsck/fsck.h b/gfs2/fsck/fsck.h
index d3f7635..877448c 100644
--- a/gfs2/fsck/fsck.h
+++ b/gfs2/fsck/fsck.h
@@ -4,6 +4,8 @@
#include "libgfs2.h"
#include "osi_tree.h"
+#define FSCK_MAX_FORMAT (1801)
+
#define FSCK_HASH_SHIFT (13)
#define FSCK_HASH_SIZE (1 << FSCK_HASH_SHIFT)
#define FSCK_HASH_MASK (FSCK_HASH_SIZE - 1)
diff --git a/gfs2/fsck/initialize.c b/gfs2/fsck/initialize.c
index ebe62b9..d1c620a 100644
--- a/gfs2/fsck/initialize.c
+++ b/gfs2/fsck/initialize.c
@@ -1334,12 +1334,12 @@ static int fill_super_block(struct gfs2_sbd *sdp)
if (sizeof(struct gfs2_sb) > sdp->sd_sb.sb_bsize){
log_crit( _("GFS superblock is larger than the blocksize!\n"));
log_debug("sizeof(struct gfs2_sb) > sdp->sd_sb.sb_bsize\n");
- return -1;
+ return FSCK_ERROR;
}
if (compute_constants(sdp)) {
log_crit("%s\n", _("Failed to compute file system constants"));
- exit(FSCK_ERROR);
+ return FSCK_ERROR;
}
ret = read_sb(sdp);
if (ret < 0) {
@@ -1348,10 +1348,15 @@ static int fill_super_block(struct gfs2_sbd *sdp)
/* Now that we've tried to repair it, re-read it. */
ret = read_sb(sdp);
if (ret < 0)
- return -1;
+ return FSCK_ERROR;
}
if (sdp->gfs1)
sbd1 = (struct gfs_sb *)&sdp->sd_sb;
+ else if (sdp->sd_sb.sb_fs_format > FSCK_MAX_FORMAT) {
+ log_crit(_("Unsupported gfs2 format found: %"PRIu32"\n"), sdp->sd_sb.sb_fs_format);
+ log_crit(_("A newer fsck.gfs2 is required to check this file system.\n"));
+ return FSCK_USAGE;
+ }
return 0;
}
@@ -1556,6 +1561,7 @@ int initialize(struct gfs2_sbd *sdp, int force_check, int preen,
int *all_clean)
{
int clean_journals = 0, open_flag;
+ int err;
*all_clean = 0;
@@ -1601,8 +1607,9 @@ int initialize(struct gfs2_sbd *sdp, int force_check, int preen,
}
/* read in sb from disk */
- if (fill_super_block(sdp))
- return FSCK_ERROR;
+ err = fill_super_block(sdp);
+ if (err != FSCK_OK)
+ return err;
/* Change lock protocol to be fsck_* instead of lock_* */
if (!opts.no && preen_is_safe(sdp, preen, force_check)) {
diff --git a/gfs2/libgfs2/super.c b/gfs2/libgfs2/super.c
index 6e7d8c2..7592564 100644
--- a/gfs2/libgfs2/super.c
+++ b/gfs2/libgfs2/super.c
@@ -29,11 +29,18 @@ int check_sb(struct gfs2_sb *sb)
errno = EIO;
return -1;
}
+ /* Check for gfs1 */
if (sb->sb_fs_format == GFS_FORMAT_FS &&
sb->sb_header.mh_format == GFS_FORMAT_SB &&
sb->sb_multihost_format == GFS_FORMAT_MULTI) {
return 1;
}
+ /* It's gfs2. Check format number is in a sensible range. */
+ if (sb->sb_fs_format < GFS2_FORMAT_FS ||
+ sb->sb_fs_format > 1899) {
+ errno = EINVAL;
+ return -1;
+ }
return 2;
}
diff --git a/tests/fsck.at b/tests/fsck.at
index 39a04d0..97a00a9 100644
--- a/tests/fsck.at
+++ b/tests/fsck.at
@@ -54,3 +54,16 @@ AT_CHECK([gfs2_edit -p journal0 field di_header.mh_magic 0 $GFS_TGT], 0, [ignore
AT_CHECK([fsck.gfs2 -y $GFS_TGT], 1, [ignore], [ignore])
AT_CHECK([fsck.gfs2 -n $GFS_TGT], 0, [ignore], [ignore])
AT_CLEANUP
+
+AT_SETUP([gfs2 format versions])
+AT_KEYWORDS(fsck.gfs2 fsck)
+GFS_TGT_REGEN
+AT_CHECK([mkfs.gfs2 -O -p lock_nolock ${GFS_TGT}], 0, [ignore], [ignore])
+AT_CHECK([echo "set sb { sb_fs_format: 1802 }" | gfs2l ${GFS_TGT}], 0, [ignore], [ignore])
+# Unsupported format, FSCK_USAGE == 16
+AT_CHECK([fsck.gfs2 -y $GFS_TGT], 16, [ignore], [ignore])
+# Format out of range
+AT_CHECK([echo "set sb { sb_fs_format: 4242 }" | gfs2l ${GFS_TGT}], 0, [ignore], [ignore])
+AT_CHECK([fsck.gfs2 -y $GFS_TGT], 1, [ignore], [ignore])
+AT_CHECK([fsck.gfs2 -n $GFS_TGT], 0, [ignore], [ignore])
+AT_CLEANUP
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
5 years, 6 months
[gfs2-utils] 01/01: libgfs2: Make the resource group plan system
more flexible
by git repository hosting
This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch master
in repository gfs2-utils.
commit 6d44d1b47d41a2e5a1edebebefe847caf063d508
Author: Andrew Price <anprice(a)redhat.com>
Date: Wed May 30 19:08:12 2018 +0100
libgfs2: Make the resource group plan system more flexible
The resource group plan structure was created for mkfs so it was
hardcoded to use 2 array elements. In order to use it in fsck.gfs2, to
reflect what can be found on-disk, switch it to be dynamically
allocated.
Signed-off-by: Andrew Price <anprice(a)redhat.com>
---
gfs2/libgfs2/rgrp.c | 52 +++++++++++++++++++++++++++++++---------------------
gfs2/libgfs2/rgrp.h | 15 +++++++++++----
2 files changed, 42 insertions(+), 25 deletions(-)
diff --git a/gfs2/libgfs2/rgrp.c b/gfs2/libgfs2/rgrp.c
index 190715e..3cdacca 100644
--- a/gfs2/libgfs2/rgrp.c
+++ b/gfs2/libgfs2/rgrp.c
@@ -366,26 +366,27 @@ uint32_t lgfs2_rgrps_plan(const lgfs2_rgrps_t rgs, uint64_t space, uint32_t tgts
{
uint32_t maxlen = (GFS2_MAX_RGSIZE << 20) / rgs->sdp->bsize;
uint32_t minlen = (GFS2_MIN_RGSIZE << 20) / rgs->sdp->bsize;
+ struct rg_spec *spec = rgs->plan->rg_specs;
/* Apps should already have checked that the rg size is <=
GFS2_MAX_RGSIZE but just in case alignment pushes it over we clamp
it back down while calculating the initial rgrp length. */
do {
- rgs->plan[0].len = lgfs2_rgrp_align_len(rgs, tgtsize);
+ spec[0].len = lgfs2_rgrp_align_len(rgs, tgtsize);
tgtsize -= (rgs->align + 1);
- } while (rgs->plan[0].len > maxlen);
+ } while (spec[0].len > maxlen);
- rgs->plan[0].num = space / rgs->plan[0].len;
+ spec[0].num = space / spec[0].len;
- if ((space - (rgs->plan[0].num * rgs->plan[0].len)) > rgs->align) {
+ if ((space - (spec[0].num * spec[0].len)) > rgs->align) {
unsigned adj = (rgs->align > 0) ? rgs->align : 1;
/* Spread the adjustment required to fit a new rgrp at the end
over all of the rgrps so that we don't end with a single
tiny one. */
- rgs->plan[0].num++;
- while (((rgs->plan[0].len - adj) * (uint64_t)rgs->plan[0].num) >= space)
- rgs->plan[0].len -= adj;
+ spec[0].num++;
+ while (((spec[0].len - adj) * (uint64_t)spec[0].num) >= space)
+ spec[0].len -= adj;
/* We've adjusted the size of the rgrps down as far as we can
without leaving a large gap at the end of the device now,
@@ -394,25 +395,25 @@ uint32_t lgfs2_rgrps_plan(const lgfs2_rgrps_t rgs, uint64_t space, uint32_t tgts
specify a second length for a subset of the resource groups.
If plan[0].len already divides the space with no remainder,
plan[1].num will stay 0 and it won't be used. */
- rgs->plan[1].len = rgs->plan[0].len - adj;
- rgs->plan[1].num = 0;
+ spec[1].len = spec[0].len - adj;
+ spec[1].num = 0;
- while (((rgs->plan[0].len * rgs->plan[0].num) +
- (rgs->plan[1].len * rgs->plan[1].num)) >= space) {
+ while (((spec[0].len * spec[0].num) +
+ (spec[1].len * spec[1].num)) >= space) {
/* Total number of rgrps stays constant now. We just
need to shift some weight around */
- rgs->plan[0].num--;
- rgs->plan[1].num++;
+ spec[0].num--;
+ spec[1].num++;
}
}
/* Once we've reached this point,
- (plan[0].num * plan[0].len) + (plan[1].num * plan[1].len)
+ (spec[0].num * spec[0].len) + (spec[1].num * spec[1].len)
will be less than one adjustment smaller than 'space'. */
- if (rgs->plan[0].len < minlen)
+ if (spec[0].len < minlen)
return 0;
- return rgs->plan[0].num + rgs->plan[1].num;
+ return spec[0].num + spec[1].num;
}
/**
@@ -435,6 +436,13 @@ lgfs2_rgrps_t lgfs2_rgrps_init(struct gfs2_sbd *sdp, uint64_t align, uint64_t of
if (rgs == NULL)
return NULL;
+ rgs->plan = calloc(1, sizeof(struct rgs_plan) + (5 * sizeof(struct rg_spec)));
+ if (rgs->plan == NULL) {
+ free(rgs);
+ return NULL;
+ }
+ rgs->plan->length = 0;
+ rgs->plan->capacity = 5;
rgs->sdp = sdp;
rgs->align = align;
rgs->align_off = offset;
@@ -531,6 +539,7 @@ void lgfs2_rgrps_free(lgfs2_rgrps_t *rgs)
osi_erase(&rg->node, tree);
free(rg);
}
+ free((*rgs)->plan);
free(*rgs);
*rgs = NULL;
}
@@ -547,22 +556,23 @@ void lgfs2_rgrps_free(lgfs2_rgrps_t *rgs)
*/
uint64_t lgfs2_rindex_entry_new(lgfs2_rgrps_t rgs, struct gfs2_rindex *ri, uint64_t addr, uint32_t len)
{
+ struct rg_spec *spec = rgs->plan->rg_specs;
int plan = -1;
errno = EINVAL;
if (!ri)
return 0;
errno = ENOSPC;
- if (rgs->plan[0].num > 0)
+ if (spec[0].num > 0)
plan = 0;
- else if (rgs->plan[1].num > 0)
+ else if (spec[1].num > 0)
plan = 1;
else if (len == 0)
return 0;
- if (plan >= 0 && (len == 0 || len == rgs->plan[plan].len)) {
- len = rgs->plan[plan].len;
- rgs->plan[plan].num--;
+ if (plan >= 0 && (len == 0 || len == spec[plan].len)) {
+ len = spec[plan].len;
+ spec[plan].num--;
}
if (addr + len > rgs->sdp->device.length)
diff --git a/gfs2/libgfs2/rgrp.h b/gfs2/libgfs2/rgrp.h
index fd442b1..ed5c735 100644
--- a/gfs2/libgfs2/rgrp.h
+++ b/gfs2/libgfs2/rgrp.h
@@ -3,9 +3,16 @@
#include "libgfs2.h"
-struct rgplan {
- uint32_t num;
- uint32_t len;
+struct rg_spec {
+ uint32_t len; /* Rgrp length */
+ uint32_t num; /* Number of contiguous rgrps of this length */
+};
+
+/* Heads a buffer of rg_specs */
+struct rgs_plan {
+ unsigned length; /* # entries */
+ unsigned capacity; /* # entries for which memory has been allocated */
+ struct rg_spec rg_specs[];
};
/**
@@ -15,7 +22,7 @@ struct rgplan {
*/
struct _lgfs2_rgrps {
struct osi_root root;
- struct rgplan plan[2];
+ struct rgs_plan *plan;
struct gfs2_sbd *sdp;
unsigned long align;
unsigned long align_off;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
5 years, 6 months