From 2397f999313713bb687d5a7aa8c60b098e51d6f3 Mon Sep 17 00:00:00 2001 From: Andrew Price Date: May 25 2016 15:04:37 +0000 Subject: gfs2-utils: Add a check for the de_rahead field gfs2_dirent.de_rahead first appeared in Linux 3.15. Support prior versions by checking for de_rahead and using it conditionally. Signed-off-by: Andrew Price --- diff --git a/configure.ac b/configure.ac index 35cafe6..a5418aa 100644 --- a/configure.ac +++ b/configure.ac @@ -125,6 +125,8 @@ AC_CHECK_HEADER([linux/gfs2_ondisk.h], [], [AC_MSG_ERROR([Unable to find linux/g AC_CHECK_MEMBER([struct gfs2_sb.sb_uuid], [], [], [[#include ]]) AC_CHECK_MEMBER([struct gfs2_leaf.lf_inode],[AC_DEFINE([GFS2_HAS_LEAF_HINTS],[],[Leaf block hints])], [], [[#include ]]) +AC_CHECK_MEMBER([struct gfs2_dirent.de_rahead],[AC_DEFINE([GFS2_HAS_DE_RAHEAD],[],[Dirent readahead field])], + [], [[#include ]]) # *FLAGS handling ENV_CFLAGS="$CFLAGS" diff --git a/gfs2/edit/extended.c b/gfs2/edit/extended.c index b1826a1..a13827e 100644 --- a/gfs2/edit/extended.c +++ b/gfs2/edit/extended.c @@ -349,7 +349,12 @@ static int display_leaf(struct iinfo *ind) ind->ii[0].dirent[d].block, ind->ii[0].dirent[d].dirent.de_inum.no_formal_ino, ind->ii[0].dirent[d].block, - (unsigned int)ind->ii[0].dirent[d].dirent.de_rahead); +#ifdef GFS2_HAS_DE_RAHEAD + (unsigned int)ind->ii[0].dirent[d].dirent.de_rahead +#else + 0 +#endif + ); } print_inode_type(ind->ii[0].dirent[d].dirent.de_type); print_gfs2(" %s", ind->ii[0].dirent[d].filename); diff --git a/gfs2/libgfs2/meta.c b/gfs2/libgfs2/meta.c index 70daec4..4f43af5 100644 --- a/gfs2/libgfs2/meta.c +++ b/gfs2/libgfs2/meta.c @@ -428,8 +428,12 @@ F(de_hash, .flags = LGFS2_MFF_CHECK) F(de_rec_len, .flags = LGFS2_MFF_BYTES) F(de_name_len, .flags = LGFS2_MFF_BYTES) F(de_type) +#ifdef GFS2_HAS_DE_RAHEAD F(de_rahead) +RF(__pad2) +#else RF(__pad) +#endif }; #undef STRUCT diff --git a/gfs2/libgfs2/ondisk.c b/gfs2/libgfs2/ondisk.c index 7f34bd2..b9418c5 100644 --- a/gfs2/libgfs2/ondisk.c +++ b/gfs2/libgfs2/ondisk.c @@ -415,7 +415,9 @@ void gfs2_dirent_in(struct gfs2_dirent *de, char *buf) CPIN_16(de, str, de_rec_len); CPIN_16(de, str, de_name_len); CPIN_16(de, str, de_type); +#ifdef GFS2_HAS_DE_RAHEAD CPIN_16(de, str, de_rahead); +#endif } void gfs2_dirent_out(struct gfs2_dirent *de, char *buf) @@ -428,7 +430,9 @@ void gfs2_dirent_out(struct gfs2_dirent *de, char *buf) CPOUT_16(de, str, de_name_len); CPOUT_16(de, str, de_type); memset(str->__pad, 0, sizeof(str->__pad)); +#ifdef GFS2_HAS_DE_RAHEAD CPOUT_16(de, str, de_rahead); +#endif } void gfs2_leaf_in(struct gfs2_leaf *lf, struct gfs2_buffer_head *bh)