Currently the mdc kernel code expects the flag argument for
OBD_IOC_CHLG_POLL ioctl to only be CHANGELOG_FLAG_FOLLOW. With
IPv6 we need to send a request to the kernel to present the NID
in the struct lnet_nid format since we can't just send large NIDs
to user land if we are using older tools.
With the newer user land tools we will be sending an expanded flag
which the current kernel changelog code can't handle. Rework the
code to support the new flag if we end up with the case of newer
user land tools and an older kernel. This code will also maintain
backwards compatiblity with the older user land tools.
Lustre-change: https://review.whamcloud.com/52361
Lustre-commit:
8320394725180b76e76f36b8a513f3c7bf11e65c
Change-Id: I26a80d30ce2ebf2075a2a8f510ff81d6b0b8d848
Signed-off-by: James Simmons <jsimmons@infradead.org>
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52361
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Etienne AUJAMES <eaujames@ddn.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/54982
Reviewed-by: Aurelien Degremont <adegremont@nvidia.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
#define OBD_IOC_START_LFSCK _IOWR('f', 230, OBD_IOC_DATA_TYPE)
#define OBD_IOC_STOP_LFSCK _IOW('f', 231, OBD_IOC_DATA_TYPE)
#define OBD_IOC_QUERY_LFSCK _IOR('f', 232, struct obd_ioctl_data)
-#define OBD_IOC_CHLG_POLL _IOR('f', 233, long)
+#define OBD_IOC_CHLG_SET_FLAGS _IOR('f', 233, long)
+/* for compatibility issues with old apps */
+#define OBD_IOC_CHLG_POLL OBD_IOC_CHLG_SET_FLAGS
/* lustre/lustre_user.h 240-249 */
/* was LIBCFS_IOC_DEBUG_MASK _IOWR('f', 250, long) until 2.11 */
struct list_head crs_rec_queue;
unsigned int crs_last_catidx;
unsigned int crs_last_idx;
- bool crs_poll;
+ unsigned int crs_flags;
};
struct chlg_rec_entry {
CERROR("%s: fail to process llog: rc = %d\n", obd->obd_name, rc);
GOTO(err_out, rc);
}
- if (!kthread_should_stop() && crs->crs_poll) {
+ if (!kthread_should_stop() &&
+ (crs->crs_flags & CHANGELOG_FLAG_FOLLOW)) {
llog_cat_close(NULL, llh);
llog_ctxt_put(ctx);
class_decref(obd, "changelog", crs);
return mask;
}
-static long chlg_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+static long chlg_ioctl(struct file *file, unsigned int cmd, unsigned long flags)
{
int rc;
struct chlg_reader_state *crs = file->private_data;
switch (cmd) {
case OBD_IOC_CHLG_POLL:
- crs->crs_poll = !!arg;
+ crs->crs_flags = flags;
rc = 0;
break;
default:
if (flags & CHANGELOG_FLAG_FOLLOW) {
int rc;
- rc = ioctl(cp->clp_fd, OBD_IOC_CHLG_POLL, 1);
+
+ rc = ioctl(cp->clp_fd, OBD_IOC_CHLG_SET_FLAGS,
+ CHANGELOG_FLAG_FOLLOW);
if (rc < 0)
llapi_err_noerrno(LLAPI_MSG_ERROR, "can't enable "
"CHANGELOG_FLAG_FOLLOW");