Commit 18e042f0 authored by Oleg Drokin's avatar Oleg Drokin Committed by Greg Kroah-Hartman

lustre: Correct KUC code max changelog msg size

The kernel to userspace communication routines (KUC) allocate
and limit the maximum cs_buf size to CR_MAXSIZE.  However this
fails to account for the fact that the buffer is assumed to begin
with a struct kuc_hdr.  To allocate and account for that space,
we introduce a new define, KUC_CHANGELOG_MSG_MAXSIZE.
Signed-off-by: default avatarChristopher J. Morrone <morrone2@llnl.gov>
Reviewed-on: http://review.whamcloud.com/7406
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3587Reviewed-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Reviewed-by: default avatarjacques-Charles Lafoucriere <jacques-charles.lafoucriere@cea.fr>
Reviewed-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 910827f1
...@@ -61,6 +61,8 @@ struct kuc_hdr { ...@@ -61,6 +61,8 @@ struct kuc_hdr {
__u16 kuc_msglen; /* Including header */ __u16 kuc_msglen; /* Including header */
} __attribute__((aligned(sizeof(__u64)))); } __attribute__((aligned(sizeof(__u64))));
#define KUC_CHANGELOG_MSG_MAXSIZE (sizeof(struct kuc_hdr)+CR_MAXSIZE)
#define KUC_MAGIC 0x191C /*Lustre9etLinC */ #define KUC_MAGIC 0x191C /*Lustre9etLinC */
#define KUC_FL_BLOCK 0x01 /* Wait for send */ #define KUC_FL_BLOCK 0x01 /* Wait for send */
......
...@@ -1430,7 +1430,7 @@ static struct kuc_hdr *changelog_kuc_hdr(char *buf, int len, int flags) ...@@ -1430,7 +1430,7 @@ static struct kuc_hdr *changelog_kuc_hdr(char *buf, int len, int flags)
{ {
struct kuc_hdr *lh = (struct kuc_hdr *)buf; struct kuc_hdr *lh = (struct kuc_hdr *)buf;
LASSERT(len <= CR_MAXSIZE); LASSERT(len <= KUC_CHANGELOG_MSG_MAXSIZE);
lh->kuc_magic = KUC_MAGIC; lh->kuc_magic = KUC_MAGIC;
lh->kuc_transport = KUC_TRANSPORT_CHANGELOG; lh->kuc_transport = KUC_TRANSPORT_CHANGELOG;
...@@ -1503,7 +1503,7 @@ static int mdc_changelog_send_thread(void *csdata) ...@@ -1503,7 +1503,7 @@ static int mdc_changelog_send_thread(void *csdata)
CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n", CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
cs->cs_fp, cs->cs_startrec); cs->cs_fp, cs->cs_startrec);
OBD_ALLOC(cs->cs_buf, CR_MAXSIZE); OBD_ALLOC(cs->cs_buf, KUC_CHANGELOG_MSG_MAXSIZE);
if (cs->cs_buf == NULL) if (cs->cs_buf == NULL)
GOTO(out, rc = -ENOMEM); GOTO(out, rc = -ENOMEM);
...@@ -1540,7 +1540,7 @@ static int mdc_changelog_send_thread(void *csdata) ...@@ -1540,7 +1540,7 @@ static int mdc_changelog_send_thread(void *csdata)
if (ctxt) if (ctxt)
llog_ctxt_put(ctxt); llog_ctxt_put(ctxt);
if (cs->cs_buf) if (cs->cs_buf)
OBD_FREE(cs->cs_buf, CR_MAXSIZE); OBD_FREE(cs->cs_buf, KUC_CHANGELOG_MSG_MAXSIZE);
OBD_FREE_PTR(cs); OBD_FREE_PTR(cs);
return rc; return rc;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment