X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Flinux%2Flinux-module.c;h=4b6ca83a6c5d8ea2b5f17c010d4d7275c4224bb0;hb=56293e79aec17670718dcaf50a733ec5119210d2;hp=c043218914d24c83d9e0cb9b9530eaf253cab411;hpb=91406268ec64eef0409289187047ebb742ddddeb;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/linux/linux-module.c b/lustre/obdclass/linux/linux-module.c index c043218..4b6ca83 100644 --- a/lustre/obdclass/linux/linux-module.c +++ b/lustre/obdclass/linux/linux-module.c @@ -16,8 +16,8 @@ * in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see [sun.com URL with a - * copy of GPLv2]. + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -81,6 +81,7 @@ #include #include #include +#include #include #include #include @@ -98,7 +99,7 @@ int obd_ioctl_getdata(char **buf, int *len, void *arg) int offset = 0; ENTRY; - err = copy_from_user(&hdr, (void *)arg, sizeof(hdr)); + err = cfs_copy_from_user(&hdr, (void *)arg, sizeof(hdr)); if ( err ) RETURN(err); @@ -130,7 +131,7 @@ int obd_ioctl_getdata(char **buf, int *len, void *arg) *len = hdr.ioc_len; data = (struct obd_ioctl_data *)*buf; - err = copy_from_user(*buf, (void *)arg, hdr.ioc_len); + err = cfs_copy_from_user(*buf, (void *)arg, hdr.ioc_len); if ( err ) { OBD_VFREE(*buf, hdr.ioc_len); RETURN(err); @@ -144,17 +145,17 @@ int obd_ioctl_getdata(char **buf, int *len, void *arg) if (data->ioc_inllen1) { data->ioc_inlbuf1 = &data->ioc_bulk[0]; - offset += size_round(data->ioc_inllen1); + offset += cfs_size_round(data->ioc_inllen1); } if (data->ioc_inllen2) { data->ioc_inlbuf2 = &data->ioc_bulk[0] + offset; - offset += size_round(data->ioc_inllen2); + offset += cfs_size_round(data->ioc_inllen2); } if (data->ioc_inllen3) { data->ioc_inlbuf3 = &data->ioc_bulk[0] + offset; - offset += size_round(data->ioc_inllen3); + offset += cfs_size_round(data->ioc_inllen3); } if (data->ioc_inllen4) { @@ -169,7 +170,7 @@ int obd_ioctl_popdata(void *arg, void *data, int len) { int err; - err = copy_to_user(arg, data, len); + err = cfs_copy_to_user(arg, data, len); if (err) err = -EFAULT; return err; @@ -178,23 +179,22 @@ int obd_ioctl_popdata(void *arg, void *data, int len) EXPORT_SYMBOL(obd_ioctl_getdata); EXPORT_SYMBOL(obd_ioctl_popdata); -#define OBD_MINOR 241 -extern struct cfs_psdev_ops obd_psdev_ops; - /* opening /dev/obd */ static int obd_class_open(struct inode * inode, struct file * file) { - if (obd_psdev_ops.p_open != NULL) - return obd_psdev_ops.p_open(0, NULL); - return -EPERM; + ENTRY; + + PORTAL_MODULE_USE; + RETURN(0); } /* closing /dev/obd */ static int obd_class_release(struct inode * inode, struct file * file) { - if (obd_psdev_ops.p_close != NULL) - return obd_psdev_ops.p_close(0, NULL); - return -EPERM; + ENTRY; + + PORTAL_MODULE_UNUSE; + RETURN(0); } /* to control /dev/obd */ @@ -204,15 +204,13 @@ static int obd_class_ioctl(struct inode *inode, struct file *filp, int err = 0; ENTRY; - if (current->fsuid != 0) + /* Allow non-root access for OBD_IOC_PING_TARGET - used by lfs check */ + if (!cfs_capable(CFS_CAP_SYS_ADMIN) && (cmd != OBD_IOC_PING_TARGET)) RETURN(err = -EACCES); if ((cmd & 0xffffff00) == ((int)'T') << 8) /* ignore all tty ioctls */ RETURN(err = -ENOTTY); - if (obd_psdev_ops.p_ioctl != NULL) - err = obd_psdev_ops.p_ioctl(NULL, cmd, (void *)arg); - else - err = -EPERM; + err = class_handle_ioctl(cmd, (unsigned long)arg); RETURN(err); } @@ -227,8 +225,8 @@ static struct file_operations obd_psdev_fops = { /* modules setup */ cfs_psdev_t obd_psdev = { - .minor = OBD_MINOR, - .name = "obd_psdev", + .minor = OBD_DEV_MINOR, + .name = OBD_DEV_NAME, .fops = &obd_psdev_fops, }; @@ -245,7 +243,8 @@ int obd_proc_read_version(char *page, char **start, off_t off, int count, BUILD_VERSION); #else return snprintf(page, count, "lustre: %s\nkernel: %s\nbuild: %s\n", - LUSTRE_VERSION_STRING, "patchless", BUILD_VERSION); + LUSTRE_VERSION_STRING, "patchless_client", + BUILD_VERSION); #endif } @@ -286,7 +285,7 @@ static int obd_proc_read_health(char *page, char **start, off_t off, if (libcfs_catastrophe) rc += snprintf(page + rc, count - rc, "LBUG\n"); - spin_lock(&obd_dev_lock); + cfs_spin_lock(&obd_dev_lock); for (i = 0; i < class_devno_max(); i++) { struct obd_device *obd; @@ -298,18 +297,18 @@ static int obd_proc_read_health(char *page, char **start, off_t off, if (obd->obd_stopping) continue; - class_incref(obd); - spin_unlock(&obd_dev_lock); + class_incref(obd, __FUNCTION__, cfs_current()); + cfs_spin_unlock(&obd_dev_lock); if (obd_health_check(obd)) { rc += snprintf(page + rc, count - rc, "device %s reported unhealthy\n", obd->obd_name); } - class_decref(obd); - spin_lock(&obd_dev_lock); + class_decref(obd, __FUNCTION__, cfs_current()); + cfs_spin_lock(&obd_dev_lock); } - spin_unlock(&obd_dev_lock); + cfs_spin_unlock(&obd_dev_lock); if (rc == 0) return snprintf(page, count, "healthy\n"); @@ -345,7 +344,7 @@ static void obd_device_list_seq_stop(struct seq_file *p, void *v) } static void *obd_device_list_seq_next(struct seq_file *p, void *v, loff_t *pos) -{ +{ ++*pos; if (*pos >= class_devno_max()) return NULL; @@ -377,7 +376,7 @@ static int obd_device_list_seq_show(struct seq_file *p, void *v) return seq_printf(p, "%3d %s %s %s %s %d\n", (int)index, status, obd->obd_type->typ_name, obd->obd_name, obd->obd_uuid.uuid, - atomic_read(&obd->obd_refcount)); + cfs_atomic_read(&obd->obd_refcount)); } struct seq_operations obd_device_list_sops = { @@ -418,7 +417,7 @@ int class_procfs_init(void) ENTRY; obd_sysctl_init(); - proc_lustre_root = lprocfs_register("lustre", proc_root_fs, + proc_lustre_root = lprocfs_register("fs/lustre", NULL, lprocfs_base, NULL); rc = lprocfs_seq_create(proc_lustre_root, "devices", 0444, &obd_device_list_fops, NULL);