- Hold the DSL pool configuration lock when calling
dsl_prop_register(). Failure to do so will panic the node if
assertions are enabled in ZFS. This change requires a build of ZFS
on Linux that exports symbols dsl_pool_config_enter and
dsl_pool_config_exit, which was done in commit 40a806d [1], and will
appear in ZFS release 0.6.3.
- Fix up variable declaration alignment in osd_mount().
- Add check for exported symbols in autoconf
[1] https://github.com/zfsonlinux/zfs/commit/40a806d
Signed-off-by: Ned Bass <bass6@llnl.gov>
Signed-off-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
Change-Id: Ib2df05301ca73847d49ca2b183d72b9e2d957c10
Reviewed-on: http://review.whamcloud.com/8172
Tested-by: Jenkins
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Li Wei <wei.g.li@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
SUBARCH=$(echo $target_cpu | sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/' -e 's/k1om/x86/')
[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
SUBARCH=$(echo $target_cpu | sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/' -e 's/k1om/x86/')
-AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/$SUBARCH/include -I$LINUX/arch/$SUBARCH/include/generated -Iinclude -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -I$LINUX/include/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $CROSS_VARS $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
+AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/$SUBARCH/include -I$LINUX/arch/$SUBARCH/include/generated -Iinclude -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -I$LINUX/include/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi ${SPL_OBJ:+-include $SPL_OBJ/spl_config.h} ${ZFS_OBJ:+-include $ZFS_OBJ/zfs_config.h} ${SPL:+-I$SPL -I$SPL/include } ${ZFS:+-I$ZFS -I$ZFS/include} -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $CROSS_VARS $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
[$4],
[_AC_MSG_LOG_CONFTEST
m4_ifvaln([$5],[$5])dnl])
[$4],
[_AC_MSG_LOG_CONFTEST
m4_ifvaln([$5],[$5])dnl])
+ AS_IF([test x$enable_zfs = xyes], [
+ AC_MSG_CHECKING([if zfs defines dsl_pool_config_enter/exit])
+ LB_LINUX_TRY_COMPILE([
+ #include <sys/dsl_pool.h>
+ ],[
+ dsl_pool_config_enter(NULL, FTAG);
+ ],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_DSL_POOL_CONFIG, 1,
+ [Have dsl_pool_config_enter/exit in ZFS])
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+ ])
+
AM_CONDITIONAL(ZFS_ENABLED, test x$enable_zfs = xyes)
])
AM_CONDITIONAL(ZFS_ENABLED, test x$enable_zfs = xyes)
])
static int osd_mount(const struct lu_env *env,
struct osd_device *o, struct lustre_cfg *cfg)
{
static int osd_mount(const struct lu_env *env,
struct osd_device *o, struct lustre_cfg *cfg)
{
- struct dsl_dataset *ds;
- char *dev = lustre_cfg_string(cfg, 1);
- dmu_buf_t *rootdb;
- int rc;
+ struct dsl_dataset *ds;
+ char *dev = lustre_cfg_string(cfg, 1);
+ dmu_buf_t *rootdb;
+ dsl_pool_t *dp;
+ int rc;
ENTRY;
if (o->od_objset.os != NULL)
ENTRY;
if (o->od_objset.os != NULL)
}
ds = dmu_objset_ds(o->od_objset.os);
}
ds = dmu_objset_ds(o->od_objset.os);
+ dp = dmu_objset_pool(o->od_objset.os);
+ LASSERT(dp);
+ dsl_pool_config_enter(dp, FTAG);
rc = dsl_prop_register(ds, "xattr", osd_xattr_changed_cb, o);
rc = dsl_prop_register(ds, "xattr", osd_xattr_changed_cb, o);
+ dsl_pool_config_exit(dp, FTAG);
if (rc)
CERROR("%s: cat not register xattr callback, ignore: %d\n",
o->od_svname, rc);
if (rc)
CERROR("%s: cat not register xattr callback, ignore: %d\n",
o->od_svname, rc);
+
+#ifndef HAVE_DSL_POOL_CONFIG
+static inline void dsl_pool_config_enter(dsl_pool_t *dp, char *name)
+{
+}
+
+static inline void dsl_pool_config_exit(dsl_pool_t *dp, char *name)
+{
+}
+
+#endif
+
#endif /* _OSD_INTERNAL_H */
#endif /* _OSD_INTERNAL_H */