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
LU-2456 lnet: Dynamic LNet Configuration (DLC) IOCTL changes
[fs/lustre-release.git]
/
libcfs
/
libcfs
/
linux
/
linux-module.c
diff --git
a/libcfs/libcfs/linux/linux-module.c
b/libcfs/libcfs/linux/linux-module.c
index
5b0b2d3
..
0008125
100644
(file)
--- a/
libcfs/libcfs/linux/linux-module.c
+++ b/
libcfs/libcfs/linux/linux-module.c
@@
-27,7
+27,7
@@
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2012,
Whamcloud, Inc
.
+ * Copyright (c) 2012,
Intel Corporation
.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
*/
/*
* This file is part of Lustre, http://www.lustre.org/
@@
-40,53
+40,52
@@
#define LNET_MINOR 240
#define LNET_MINOR 240
-int libcfs_ioctl_
getdata(char *buf, char *end, void *arg
)
+int libcfs_ioctl_
data_adjust(struct libcfs_ioctl_data *data
)
{
{
- struct libcfs_ioctl_hdr *hdr;
-
struct libcfs_ioctl_data *data
;
-
int err
;
- ENTRY;
+ if (libcfs_ioctl_is_invalid(data)) {
+
CERROR("LNET: ioctl not correctly formatted\n")
;
+
RETURN(-EINVAL)
;
+ }
- hdr = (struct libcfs_ioctl_hdr *)buf;
-
data = (struct libcfs_ioctl_data *)buf
;
+ if (data->ioc_inllen1 != 0)
+
data->ioc_inlbuf1 = &data->ioc_bulk[0]
;
- err = copy_from_user(buf, (void *)arg, sizeof(*hdr));
- if (err)
-
RETURN(err
);
+ if (data->ioc_inllen2 != 0)
+ data->ioc_inlbuf2 = &data->ioc_bulk[0] +
+
cfs_size_round(data->ioc_inllen1
);
- if (hdr->ioc_version != LIBCFS_IOCTL_VERSION) {
- CERROR("PORTALS: version mismatch kernel vs application\n");
- RETURN(-EINVAL);
- }
+ RETURN(0);
+}
- if (hdr->ioc_len + buf >= end) {
- CERROR("PORTALS: user buffer exceeds kernel buffer\n");
- RETURN(-EINVAL);
- }
+int libcfs_ioctl_getdata_len(const struct libcfs_ioctl_hdr __user *arg,
+ __u32 *len)
+{
+ struct libcfs_ioctl_hdr hdr;
+ ENTRY;
+ if (copy_from_user(&hdr, arg, sizeof(hdr)))
+ RETURN(-EFAULT);
- if (hdr->ioc_len < sizeof(struct libcfs_ioctl_data)) {
- CERROR("PORTALS: user buffer too small for ioctl\n");
- RETURN(-EINVAL);
- }
+ if (hdr.ioc_version != LIBCFS_IOCTL_VERSION) {
+ CERROR("LNET: version mismatch expected %#x, got %#x\n",
+ LIBCFS_IOCTL_VERSION, hdr.ioc_version);
+ RETURN(-EINVAL);
+ }
- err = copy_from_user(buf, (void *)arg, hdr->ioc_len);
- if (err)
- RETURN(err);
+ *len = hdr.ioc_len;
- if (libcfs_ioctl_is_invalid(data)) {
- CERROR("PORTALS: ioctl not correctly formatted\n");
- RETURN(-EINVAL);
- }
+ RETURN(0);
+}
- if (data->ioc_inllen1)
- data->ioc_inlbuf1 = &data->ioc_bulk[0];
+int libcfs_ioctl_getdata(struct libcfs_ioctl_hdr *buf, __u32 buf_len,
+ const void __user *arg)
+{
+ ENTRY;
- if (data->ioc_inllen2)
- data->ioc_inlbuf2 = &data->ioc_bulk[0] +
- cfs_size_round(data->ioc_inllen1);
+ if (copy_from_user(buf, arg, buf_len))
+ RETURN(-EINVAL);
-
RETURN(0);
+ RETURN(0);
}
int libcfs_ioctl_popdata(void *arg, void *data, int size)
}
int libcfs_ioctl_popdata(void *arg, void *data, int size)
@@
-131,19
+130,13
@@
libcfs_psdev_release(struct inode * inode, struct file * file)
return rc;
}
return rc;
}
-
-#ifdef HAVE_UNLOCKED_IOCTL
static long libcfs_ioctl(struct file *file,
static long libcfs_ioctl(struct file *file,
- unsigned int cmd, unsigned long arg)
-#else
-static int libcfs_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, unsigned long arg)
-#endif
+ unsigned int cmd, unsigned long arg)
{
struct cfs_psdev_file pfile;
int rc = 0;
{
struct cfs_psdev_file pfile;
int rc = 0;
- if (
current_fsuid() != 0
)
+ if (
!capable(CAP_SYS_ADMIN)
)
return -EACCES;
if ( _IOC_TYPE(cmd) != IOC_LIBCFS_TYPE ||
return -EACCES;
if ( _IOC_TYPE(cmd) != IOC_LIBCFS_TYPE ||
@@
-177,16
+170,12
@@
static int libcfs_ioctl(struct inode *inode, struct file *file,
}
static struct file_operations libcfs_fops = {
}
static struct file_operations libcfs_fops = {
-#ifdef HAVE_UNLOCKED_IOCTL
- unlocked_ioctl: libcfs_ioctl,
-#else
- ioctl: libcfs_ioctl,
-#endif
- open : libcfs_psdev_open,
- release : libcfs_psdev_release
+ unlocked_ioctl: libcfs_ioctl,
+ open : libcfs_psdev_open,
+ release : libcfs_psdev_release
};
};
-
cfs_psdev_t
libcfs_dev = {
+
struct miscdevice
libcfs_dev = {
LNET_MINOR,
"lnet",
&libcfs_fops
LNET_MINOR,
"lnet",
&libcfs_fops