Building on el9.2 hit a couple of new errors in configure, ex:
((struct inode_operations *)1)->fileattr_get()
hits:
error: array subscript 0 is outside array bounds
of ‘struct inode_operations[0]’
A few instances of QCTL_COPY() should be QCTL_COPY_NO_PNAME()
as the zero-length array to hold the pool name is not
allocated in these cases.
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I72bda8b46c51dbd42fb42bf569ba29572526acfe
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52687
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: xinliang <xinliang.liu@linaro.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
.relaxed = 0
};
(void)param;
.relaxed = 0
};
(void)param;
- ],[
- AC_DEFINE(HAVE_ORACLE_OFED_EXTENSIONS, 1,
- [if Oracle OFED Extensions are enabled])
])
])
AC_DEFUN([LN_HAVE_ORACLE_OFED_EXTENSIONS], [
])
])
AC_DEFUN([LN_HAVE_ORACLE_OFED_EXTENSIONS], [
#include <linux/fs.h>
],[
vfs_rename(NULL, NULL, NULL, NULL, NULL);
#include <linux/fs.h>
],[
vfs_rename(NULL, NULL, NULL, NULL, NULL);
- ], [
- AC_DEFINE(HAVE_VFS_RENAME_5ARGS, 1,
- [kernel has vfs_rename with 5 args])
])
])
AC_DEFUN([LC_VFS_RENAME_5ARGS], [
])
])
AC_DEFUN([LC_VFS_RENAME_5ARGS], [
LB2_LINUX_TEST_SRC([inode_ops_has_user_namespace_argument], [
#include <linux/fs.h>
],[
LB2_LINUX_TEST_SRC([inode_ops_has_user_namespace_argument], [
#include <linux/fs.h>
],[
- ((struct inode_operations *)1)->getattr((struct user_namespace *)NULL,
- NULL, NULL, 0, 0);
+ struct inode_operations *iops = NULL;
+ struct user_namespace *user_ns = NULL;
+
+ iops->getattr(user_ns, NULL, NULL, 0, 0);
],[-Werror])
])
AC_DEFUN([LC_HAVE_USER_NAMESPACE_ARG], [
],[-Werror])
])
AC_DEFUN([LC_HAVE_USER_NAMESPACE_ARG], [
# first few iterations, so don't commit to a particular signature
# here. Hopefully we will only want to support the final version.
#
# first few iterations, so don't commit to a particular signature
# here. Hopefully we will only want to support the final version.
#
-AC_DEFUN([LC_HAVE_FILEATTR_GET], [
-tmp_flags="$EXTRA_KCFLAGS"
-EXTRA_KCFLAGS="-Werror"
-LB_CHECK_COMPILE([if 'inode_operations' has fileattr_get (and fileattr_set)],
-fileattr_set, [
- #include <linux/fs.h>
-],[
- ((struct inode_operations *)1)->fileattr_get(NULL, NULL);
-],[
- AC_DEFINE(HAVE_FILEATTR_GET, 1,
- ['inode_operations' has fileattr_get and fileattr_set])
+AC_DEFUN([LC_SRC_HAVE_FILEATTR_GET], [
+ LB2_LINUX_TEST_SRC([fileattr_set], [
+ #include <linux/fs.h>
+ ],[
+ struct inode_operations *iops = NULL;
+ iops->fileattr_get(NULL, NULL);
+ ],[-Werror])
-EXTRA_KCFLAGS="$tmp_flags"
+AC_DEFUN([LC_HAVE_FILEATTR_GET], [
+ AC_MSG_CHECKING([if 'inode_operations' has fileattr_get (and fileattr_set)])
+ LB2_LINUX_TEST_RESULT([fileattr_set], [
+ AC_DEFINE(HAVE_FILEATTR_GET, 1,
+ ['inode_operations' has fileattr_get and fileattr_set])
+ ])
+
]) # LC_HAVE_FILEATTR_GET
# LC_HAVE_COPY_PAGE_FROM_ITER_ATOMIC
]) # LC_HAVE_FILEATTR_GET
# LC_HAVE_COPY_PAGE_FROM_ITER_ATOMIC
# 5.13
LC_SRC_HAVE_COPY_PAGE_FROM_ITER_ATOMIC
# 5.13
LC_SRC_HAVE_COPY_PAGE_FROM_ITER_ATOMIC
+ LC_SRC_HAVE_FILEATTR_GET
# 5.15
LC_SRC_HAVE_GET_ACL_RCU_ARG
# 5.15
LC_SRC_HAVE_GET_ACL_RCU_ARG
#define Q_COPY(out, in, member) (out)->member = (in)->member
#define Q_COPY(out, in, member) (out)->member = (in)->member
-/* NOTE:
- * - in and out maybe a type of struct if_quotactl or struct obd_quotactl
- * - in and out need not be of the same type.
- */
-#define __QCTL_COPY(out, in, need_pname) \
+#define QCTL_COPY_NO_PNAME(out, in) \
do { \
Q_COPY(out, in, qc_cmd); \
Q_COPY(out, in, qc_type); \
do { \
Q_COPY(out, in, qc_cmd); \
Q_COPY(out, in, qc_type); \
Q_COPY(out, in, qc_stat); \
Q_COPY(out, in, qc_dqinfo); \
Q_COPY(out, in, qc_dqblk); \
Q_COPY(out, in, qc_stat); \
Q_COPY(out, in, qc_dqinfo); \
Q_COPY(out, in, qc_dqblk); \
- if (need_pname && LUSTRE_Q_CMD_IS_POOL(in->qc_cmd)) { \
+} while (0)
+
+/* NOTE:
+ * - in and out maybe a type of struct if_quotactl or struct obd_quotactl
+ * - in and out need not be of the same type.
+ */
+#define QCTL_COPY(out, in) \
+do { \
+ QCTL_COPY_NO_PNAME(out, in); \
+ if (LUSTRE_Q_CMD_IS_POOL(in->qc_cmd)) { \
size_t len = strnlen(in->qc_poolname, LOV_MAXPOOLNAME); \
\
memcpy(out->qc_poolname, in->qc_poolname, len); \
size_t len = strnlen(in->qc_poolname, LOV_MAXPOOLNAME); \
\
memcpy(out->qc_poolname, in->qc_poolname, len); \
-#define QCTL_COPY(out, in) __QCTL_COPY(out, in, true)
-#define QCTL_COPY_NO_PNAME(out, in) __QCTL_COPY(out, in, false)
-
/* Body of quota request used for quota acquire/release RPCs between quota
* master (aka QMT) and slaves (ak QSD). */
struct quota_body {
/* Body of quota request used for quota acquire/release RPCs between quota
* master (aka QMT) and slaves (ak QSD). */
struct quota_body {
QCTL_COPY(oqctl, qctl);
rc = obd_quotactl(tgt->ltd_exp, oqctl);
if (rc == 0) {
QCTL_COPY(oqctl, qctl);
rc = obd_quotactl(tgt->ltd_exp, oqctl);
if (rc == 0) {
- QCTL_COPY(qctl, oqctl);
+ QCTL_COPY_NO_PNAME(qctl, oqctl);
qctl->qc_valid = QC_MDTIDX;
qctl->obd_uuid = tgt->ltd_uuid;
}
qctl->qc_valid = QC_MDTIDX;
qctl->obd_uuid = tgt->ltd_uuid;
}
QCTL_COPY(oqctl, qctl);
rc = obd_quotactl(tgt->ltd_exp, oqctl);
if (rc == 0) {
QCTL_COPY(oqctl, qctl);
rc = obd_quotactl(tgt->ltd_exp, oqctl);
if (rc == 0) {
- QCTL_COPY(qctl, oqctl);
+ QCTL_COPY_NO_PNAME(qctl, oqctl);
qctl->qc_valid = QC_OSTIDX;
qctl->obd_uuid = tgt->ltd_uuid;
}
qctl->qc_valid = QC_OSTIDX;
qctl->obd_uuid = tgt->ltd_uuid;
}
QCTL_COPY(oqctl, qctl);
rc = obd_quotactl(exp, oqctl);
if (rc == 0) {
QCTL_COPY(oqctl, qctl);
rc = obd_quotactl(exp, oqctl);
if (rc == 0) {
- QCTL_COPY(qctl, oqctl);
+ QCTL_COPY_NO_PNAME(qctl, oqctl);
qctl->qc_valid = QC_MDTIDX;
qctl->obd_uuid = obd->u.cli.cl_target_uuid;
}
qctl->qc_valid = QC_MDTIDX;
qctl->obd_uuid = obd->u.cli.cl_target_uuid;
}