X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=libcfs%2Flibcfs%2Fmodule.c;h=8e773d3af503b04e49d50c9d165196a1df5d23af;hp=5e273cbc0adfbe94fc953b769d075df1ee64e342;hb=0f8dca08a4f68cba82c2c822998ecc309d3b7aaf;hpb=e1b3d71a27c166bebd26ab33f7299c41bd75dab5 diff --git a/libcfs/libcfs/module.c b/libcfs/libcfs/module.c index 5e273cb..8e773d3 100644 --- a/libcfs/libcfs/module.c +++ b/libcfs/libcfs/module.c @@ -1,22 +1,37 @@ /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * - * Copyright (C) 2001, 2002 Cluster File Systems, Inc. + * GPL HEADER START * - * This file is part of Lustre, http://www.lustre.org. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Lustre is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. * - * Lustre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * You should have received a copy of the GNU General Public License - * along with Lustre; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * You should have received a copy of the GNU General Public License + * 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 + * have any questions. + * + * GPL HEADER END + */ +/* + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. */ #ifndef EXPORT_SYMTAB @@ -24,9 +39,9 @@ #endif #define DEBUG_SUBSYSTEM S_LNET +#include #include #include -#include #include "tracefile.h" void @@ -172,19 +187,19 @@ static int libcfs_psdev_release(unsigned long flags, void *args) RETURN(0); } -static struct rw_semaphore ioctl_list_sem; -static struct list_head ioctl_list; +static cfs_rw_semaphore_t ioctl_list_sem; +static cfs_list_t ioctl_list; int libcfs_register_ioctl(struct libcfs_ioctl_handler *hand) { int rc = 0; - down_write(&ioctl_list_sem); - if (!list_empty(&hand->item)) + cfs_down_write(&ioctl_list_sem); + if (!cfs_list_empty(&hand->item)) rc = -EBUSY; else - list_add_tail(&hand->item, &ioctl_list); - up_write(&ioctl_list_sem); + cfs_list_add_tail(&hand->item, &ioctl_list); + cfs_up_write(&ioctl_list_sem); return rc; } @@ -194,32 +209,23 @@ int libcfs_deregister_ioctl(struct libcfs_ioctl_handler *hand) { int rc = 0; - down_write(&ioctl_list_sem); - if (list_empty(&hand->item)) + cfs_down_write(&ioctl_list_sem); + if (cfs_list_empty(&hand->item)) rc = -ENOENT; else - list_del_init(&hand->item); - up_write(&ioctl_list_sem); + cfs_list_del_init(&hand->item); + cfs_up_write(&ioctl_list_sem); return rc; } EXPORT_SYMBOL(libcfs_deregister_ioctl); -static int libcfs_ioctl(struct cfs_psdev_file *pfile, unsigned long cmd, void *arg) +static int libcfs_ioctl_int(struct cfs_psdev_file *pfile,unsigned long cmd, + void *arg, struct libcfs_ioctl_data *data) { - char buf[1024]; int err = -EINVAL; - struct libcfs_ioctl_data *data; ENTRY; - /* 'cmd' and permissions get checked in our arch-specific caller */ - - if (libcfs_ioctl_getdata(buf, buf + 800, (void *)arg)) { - CERROR("PORTALS ioctl: data error\n"); - RETURN(-EINVAL); - } - data = (struct libcfs_ioctl_data *)buf; - switch (cmd) { case IOC_LIBCFS_CLEAR_DEBUG: libcfs_debug_clear_buffer(); @@ -241,9 +247,9 @@ static int libcfs_ioctl(struct cfs_psdev_file *pfile, unsigned long cmd, void *a break; case IOC_LIBCFS_LWT_SNAPSHOT: { - cycles_t now; - int ncpu; - int total_size; + cfs_cycles_t now; + int ncpu; + int total_size; err = lwt_snapshot (&now, &ncpu, &total_size, data->ioc_pbuf1, data->ioc_plen1); @@ -303,8 +309,9 @@ static int libcfs_ioctl(struct cfs_psdev_file *pfile, unsigned long cmd, void *a default: { struct libcfs_ioctl_handler *hand; err = -EINVAL; - down_read(&ioctl_list_sem); - list_for_each_entry(hand, &ioctl_list, item) { + cfs_down_read(&ioctl_list_sem); + cfs_list_for_each_entry_typed(hand, &ioctl_list, + struct libcfs_ioctl_handler, item) { err = hand->handle_ioctl(cmd, data); if (err != -EINVAL) { if (err == 0) @@ -313,7 +320,7 @@ static int libcfs_ioctl(struct cfs_psdev_file *pfile, unsigned long cmd, void *a break; } } - up_read(&ioctl_list_sem); + cfs_up_read(&ioctl_list_sem); break; } } @@ -321,6 +328,32 @@ static int libcfs_ioctl(struct cfs_psdev_file *pfile, unsigned long cmd, void *a RETURN(err); } +static int libcfs_ioctl(struct cfs_psdev_file *pfile, unsigned long cmd, void *arg) +{ + char *buf; + struct libcfs_ioctl_data *data; + int err; + ENTRY; + + LIBCFS_ALLOC_GFP(buf, 1024, CFS_ALLOC_STD); + if (buf == NULL) + RETURN(-ENOMEM); + + /* 'cmd' and permissions get checked in our arch-specific caller */ + if (libcfs_ioctl_getdata(buf, buf + 800, (void *)arg)) { + CERROR("PORTALS ioctl: data error\n"); + GOTO(out, err = -EINVAL); + } + data = (struct libcfs_ioctl_data *)buf; + + err = libcfs_ioctl_int(pfile, cmd, arg, data); + +out: + LIBCFS_FREE(buf, 1024); + RETURN(err); +} + + struct cfs_psdev_ops libcfs_psdev_ops = { libcfs_psdev_open, libcfs_psdev_release, @@ -336,8 +369,8 @@ MODULE_DESCRIPTION("Portals v3.1"); MODULE_LICENSE("GPL"); extern cfs_psdev_t libcfs_dev; -extern struct rw_semaphore tracefile_sem; -extern struct semaphore trace_thread_sem; +extern cfs_rw_semaphore_t cfs_tracefile_sem; +extern cfs_semaphore_t cfs_trace_thread_sem; extern void libcfs_init_nidstrings(void); extern int libcfs_arch_init(void); @@ -349,14 +382,14 @@ static int init_libcfs_module(void) libcfs_arch_init(); libcfs_init_nidstrings(); - init_rwsem(&tracefile_sem); - init_mutex(&trace_thread_sem); - init_rwsem(&ioctl_list_sem); + cfs_init_rwsem(&cfs_tracefile_sem); + cfs_init_mutex(&cfs_trace_thread_sem); + cfs_init_rwsem(&ioctl_list_sem); CFS_INIT_LIST_HEAD(&ioctl_list); rc = libcfs_debug_init(5 * 1024 * 1024); if (rc < 0) { - printk(KERN_ERR "LustreError: libcfs_debug_init: %d\n", rc); + printk(CFS_KERN_ERR "LustreError: libcfs_debug_init: %d\n", rc); return (rc); } @@ -400,7 +433,7 @@ static void exit_libcfs_module(void) remove_proc(); CDEBUG(D_MALLOC, "before Portals cleanup: kmem %d\n", - atomic_read(&libcfs_kmemory)); + cfs_atomic_read(&libcfs_kmemory)); rc = cfs_psdev_deregister(&libcfs_dev); if (rc) @@ -410,13 +443,18 @@ static void exit_libcfs_module(void) lwt_fini(); #endif - if (atomic_read(&libcfs_kmemory) != 0) + if (cfs_atomic_read(&libcfs_kmemory) != 0) CERROR("Portals memory leaked: %d bytes\n", - atomic_read(&libcfs_kmemory)); + cfs_atomic_read(&libcfs_kmemory)); rc = libcfs_debug_cleanup(); if (rc) - printk(KERN_ERR "LustreError: libcfs_debug_cleanup: %d\n", rc); + printk(CFS_KERN_ERR "LustreError: libcfs_debug_cleanup: %d\n", + rc); + + cfs_fini_rwsem(&ioctl_list_sem); + cfs_fini_rwsem(&cfs_tracefile_sem); + libcfs_arch_cleanup(); }