Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
b=12749,18369
[fs/lustre-release.git]
/
lustre
/
mdt
/
mdt_lproc.c
diff --git
a/lustre/mdt/mdt_lproc.c
b/lustre/mdt/mdt_lproc.c
index
de0a7bf
..
5d77e35
100644
(file)
--- a/
lustre/mdt/mdt_lproc.c
+++ b/
lustre/mdt/mdt_lproc.c
@@
-515,25
+515,20
@@
static int lprocfs_wr_root_squash(struct file *file, const char *buffer,
{
struct obd_device *obd = data;
struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- char kernbuf[50], *tmp, *end;
+ int rc;
+ char kernbuf[50], *tmp, *end, *errmsg;
unsigned long uid, gid;
int nouid, nogid;
ENTRY;
- if (count > (sizeof(kernbuf) - 1) ||
- copy_from_user(kernbuf, buffer, count)) {
- CWARN("%s: can't copy string to kernel space, "
- "uid:gid is expected, "
- "continue with %u:%u, "
- "there will be 0:0 on MDS restart\n",
- obd->obd_name, mdt->mdt_squash_uid,
- mdt->mdt_squash_gid);
- RETURN(count);
+ if (count >= sizeof(kernbuf)) {
+ errmsg = "string too long";
+ GOTO(failed, rc = -EINVAL);
+ }
+ if (copy_from_user(kernbuf, buffer, count)) {
+ errmsg = "bad address";
+ GOTO(failed, rc = -EFAULT);
}
-
- if (copy_from_user(kernbuf, buffer, count))
- RETURN(-EFAULT);
-
kernbuf[count] = '\0';
nouid = nogid = 0;
@@
-557,19
+552,20
@@
static int lprocfs_wr_root_squash(struct file *file, const char *buffer,
mdt->mdt_squash_uid = uid;
mdt->mdt_squash_gid = gid;
- if (nouid || nogid)
- CWARN("%s: can't parse \"\%s\", uid:gid is expected, "
- "continue with %u:%u, "
- "there will be %u:%u on MDS restart\n",
+ if (nouid && nogid) {
+ errmsg = "needs uid:gid format";
+ GOTO(failed, rc = -EINVAL);
+ }
+
+ LCONSOLE_INFO("%s: root_squash is set to %u:%u\n",
obd->obd_name,
- buffer, mdt->mdt_squash_uid, mdt->mdt_squash_gid,
- nouid ? 0 : mdt->mdt_squash_uid,
- nogid ? 0 : mdt->mdt_squash_gid);
- else
- LCONSOLE_INFO("%s: root_squash is set to %u:%u\n",
- obd->obd_name,
- mdt->mdt_squash_uid, mdt->mdt_squash_gid);
+ mdt->mdt_squash_uid, mdt->mdt_squash_gid);
RETURN(count);
+
+ failed:
+ CWARN("%s: failed to set root_squash to \"%s\", %s: rc %d\n",
+ obd->obd_name, buffer, errmsg, rc);
+ RETURN(rc);
}
static int lprocfs_rd_nosquash_nids(char *page, char **start, off_t off,
@@
-589,23
+585,22
@@
static int lprocfs_wr_nosquash_nids(struct file *file, const char *buffer,
struct obd_device *obd = data;
struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
int rc;
- char *
new
;
+ char *
kernbuf, *errmsg
;
struct list_head tmp;
ENTRY;
- /* copy to kernel space */
- OBD_ALLOC(new, count + 1);
- if (new == 0)
+ OBD_ALLOC(kernbuf, count + 1);
+ if (kernbuf == NULL) {
+ errmsg = "no memory";
GOTO(failed, rc = -ENOMEM);
-
- if (copy_from_user(new, buffer, count))
+ }
+ if (copy_from_user(kernbuf, buffer, count)) {
+ errmsg = "bad address";
GOTO(failed, rc = -EFAULT);
-
- new[count] = 0;
- if (strlen(new) != count)
- GOTO(failed, rc = -EINVAL);
-
- if (!strcmp(new, "NONE") || !strcmp(new, "clear")) {
+ }
+ kernbuf[count] = '\0';
+
+ if (!strcmp(kernbuf, "NONE") || !strcmp(kernbuf, "clear")) {
/* empty string is special case */
down_write(&mdt->mdt_squash_sem);
if (!list_empty(&mdt->mdt_nosquash_nids)) {
@@
-618,35
+613,36
@@
static int lprocfs_wr_nosquash_nids(struct file *file, const char *buffer,
up_write(&mdt->mdt_squash_sem);
LCONSOLE_INFO("%s: nosquash_nids is cleared\n",
obd->obd_name);
- OBD_FREE(
new
, count + 1);
- RETURN(
0
);
+ OBD_FREE(
kernbuf
, count + 1);
+ RETURN(
count
);
}
CFS_INIT_LIST_HEAD(&tmp);
- if (cfs_parse_nidlist(new, count, &tmp) <= 0)
+ if (cfs_parse_nidlist(kernbuf, count, &tmp) <= 0) {
+ errmsg = "can't parse";
GOTO(failed, rc = -EINVAL);
+ }
down_write(&mdt->mdt_squash_sem);
if (!list_empty(&mdt->mdt_nosquash_nids)) {
cfs_free_nidlist(&mdt->mdt_nosquash_nids);
OBD_FREE(mdt->mdt_nosquash_str, mdt->mdt_nosquash_strlen);
}
- mdt->mdt_nosquash_str =
new
;
+ mdt->mdt_nosquash_str =
kernbuf
;
mdt->mdt_nosquash_strlen = count + 1;
list_splice(&tmp, &mdt->mdt_nosquash_nids);
- LCONSOLE_INFO("%s: nosquash_nids is set to %s\n", obd->obd_name, new);
+ LCONSOLE_INFO("%s: nosquash_nids is set to %s\n",
+ obd->obd_name, kernbuf);
up_write(&mdt->mdt_squash_sem);
RETURN(count);
failed:
- CWARN("%s: failed to set nosquash_nids (rc %d), "
- "on MDS restart we will try to set it again, "
- "continue with current nosquash_nids\n",
- obd->obd_name, rc);
- if (new)
- OBD_FREE(new, count + 1);
- RETURN(count);
+ CWARN("%s: failed to set nosquash_nids to \"%s\", %s: rc %d\n",
+ obd->obd_name, kernbuf, errmsg, rc);
+ if (kernbuf)
+ OBD_FREE(kernbuf, count + 1);
+ RETURN(rc);
}
static struct lprocfs_vars lprocfs_mdt_obd_vars[] = {