gfs2: allow userspace to set GFS2_DIF_SYSTEM using FS_RESERVED_FL
PATCH 1/1 gfs2: allow userspace to set GFS2_DIF_SYSTEM using FS_RESERVED_FL
Repurpose the existing VFS FS_RESERVED_FL flag to set GFS2_DIF_SYSTEM using the FS_IOC_SETFLAGS ioctl.
Resolves: rhbz#1272086
--- fs/gfs2/file.c | 2 ++ 1 file changed, 2 insertions(+)
fs/gfs2/file.c +2 -0
@@ -137,6 +137,7 @@ static const u32 fsflags_to_gfs2[32] = { [12] = GFS2_DIF_EXHASH, [14] = GFS2_DIF_INHERIT_JDATA, [17] = GFS2_DIF_TOPDIR, + [31] = GFS2_DIF_SYSTEM, };static const u32 gfs2_to_fsflags[32 ] = {
@@ -147,6 +148,7 @@ static const u32 gfs2_to_fsflags[32] = { [gfs2fl_ExHash] = FS_INDEX_FL, [gfs2fl_TopLevel] = FS_TOPDIR_FL, [gfs2fl_InheritJdata] = FS_JOURNAL_DATA_FL, + [gfs2fl_System] = FS_RESERVED_FL, };static int gfs2_get_flags (struct file *filp,u32 __user *ptr)
Signature · 1 line
2.4.3
[Cluster-devel] [GFS2] gfs2-utils: make gfs2_jadd set GFS2_DIF_SYSTEM flag on system inodes
Reuse the VFS FS_RESERVED_FL to set the GFS2_DIF_SYSTEM flag on gfs2 metafs inodes (journals and such) created by gfs2_jadd.
A companion kernel patch that actually does the mapping from the VFS flag to GFS2 is required in order for this to work correctly.
Resolves: rhbz#1272086
--- gfs2/mkfs/main_jadd.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
gfs2/mkfs/main_jadd.c +4 -2
@@ -274,7 +274,7 @@ static void add_ir(struct jadd_opts *opts) {struct gfs2_inum_range ir; -set_flags (fd,JA_FL_SET ,FS_JOURNAL_DATA_FL ); +set_flags (fd,JA_FL_SET ,FS_JOURNAL_DATA_FL |FS_RESERVED_FL );memset (&ir,0 ,sizeof (struct gfs2_inum_range ));if (write (fd, (void *)&ir,sizeof (struct gfs2_inum_range )) !=sizeof (struct gfs2_inum_range )) {
@@ -303,7 +303,7 @@ static void add_sc(struct jadd_opts *opts) {struct gfs2_statfs_change sc; -set_flags (fd,JA_FL_SET ,FS_JOURNAL_DATA_FL ); +set_flags (fd,JA_FL_SET ,FS_JOURNAL_DATA_FL |FS_RESERVED_FL );memset (&sc,0 ,sizeof (struct gfs2_statfs_change )); if (write(fd, (void*)&sc, sizeof(struct gfs2_statfs_change)) !=
@@ -341,6 +341,7 @@ static void add_qc(struct gfs2_sbd *sdp, struct jadd_opts *opts) dummy_bh.b_data = buf;set_flags (fd,JA_FL_CLEAR ,FS_JOURNAL_DATA_FL ); +set_flags (fd,JA_FL_SET ,FS_RESERVED_FL );memset (buf,0 , sdp->bsize);for (x=0 ; x<blocks; x++) {
@@ -436,6 +437,7 @@ static void add_j(struct gfs2_sbd *sdp, struct jadd_opts *opts)uint64_t seq =RANDOM (blocks);set_flags (fd,JA_FL_CLEAR ,FS_JOURNAL_DATA_FL ); +set_flags (fd,JA_FL_SET ,FS_RESERVED_FL );memset (buf,0 , sdp->bsize);for (x=0 ; x<blocks; x++) {if (write (fd, buf, sdp->bsize) != sdp->bsize) {
Signature · 1 line
2.4.3
PATCH 1/1 gfs2: allow userspace to set GFS2_DIF_SYSTEM using FS_RESERVED_FL
In reply to Abhi DasHi,
I'm not sure that is a good idea, since it is possible that someone else might find a use for that flag. Can we not simply set the GFS2_DIF_SYSTEM flag on any inode that is created via the metafs? That would resolve the issue without having to have a new interface I think,
Steve.
Quoted 29 lines · Abhi Das
Repurpose the existing VFS
FS_RESERVED_FLflag to setGFS2_DIF_SYSTEMusing theFS_IOC_SETFLAGSioctl.Resolves: rhbz#1272086
Signed-off-by Abhi Das <[email protected]>--- fs/gfs2/file.c | 2 ++ 1 file changed, 2 insertions(+)fs/gfs2/file.c +2
-0@@ -137,6 +137,7 @@ static const u32 fsflags_to_gfs2[32] = { [12] = GFS2_DIF_EXHASH, [14] = GFS2_DIF_INHERIT_JDATA, [17] = GFS2_DIF_TOPDIR, + [31] = GFS2_DIF_SYSTEM, };static const u32 gfs2_to_fsflags[32 ] = {@@ -147,6 +148,7 @@ static const u32 gfs2_to_fsflags[32] = { [gfs2fl_ExHash] = FS_INDEX_FL, [gfs2fl_TopLevel] = FS_TOPDIR_FL, [gfs2fl_InheritJdata] = FS_JOURNAL_DATA_FL, + [gfs2fl_System] = FS_RESERVED_FL, };static int gfs2_get_flags (struct file *filp,u32 __user *ptr)