X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Flibcfs%2Fmodule.c;h=8e773d3af503b04e49d50c9d165196a1df5d23af;hb=6fd5e00ff03d41b427eec5d70efaef4bbdd8d59c;hp=591856074eaef38aa104301c3607b6e5c96822c4;hpb=6869932b552ac705f411de3362f01bd50c1f6f7d;p=fs%2Flustre-release.git diff --git a/libcfs/libcfs/module.c b/libcfs/libcfs/module.c index 5918560..8e773d3 100644 --- a/libcfs/libcfs/module.c +++ b/libcfs/libcfs/module.c @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -187,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; } @@ -209,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(); @@ -256,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); @@ -318,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) @@ -328,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; } } @@ -336,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, @@ -351,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); @@ -364,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); } @@ -415,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) @@ -425,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(); }