diff options
Diffstat (limited to 'drivers/staging/lustre')
234 files changed, 3712 insertions, 17808 deletions
diff --git a/drivers/staging/lustre/README.txt b/drivers/staging/lustre/README.txt new file mode 100644 index 000000000000..cf0ca50ff83b --- /dev/null +++ b/drivers/staging/lustre/README.txt @@ -0,0 +1,87 @@ +Lustre Parallel Filesystem Client +================================= + +The Lustre file system is an open-source, parallel file system +that supports many requirements of leadership class HPC simulation +environments. +Born from from a research project at Carnegie Mellon University, +the Lustre file system is a widely-used option in HPC. +The Lustre file system provides a POSIX compliant file system interface, +can scale to thousands of clients, petabytes of storage and +hundreds of gigabytes per second of I/O bandwidth. + +Unlike shared disk storage cluster filesystems (e.g. OCFS2, GFS, GPFS), +Lustre has independent Metadata and Data servers that clients can access +in parallel to maximize performance. + +In order to use Lustre client you will need to download lustre client +tools from +https://downloads.hpdd.intel.com/public/lustre/latest-feature-release/ +the package name is lustre-client. + +You will need to install and configure your Lustre servers separately. + +Mount Syntax +============ +After you installed the lustre-client tools including mount.lustre binary +you can mount your Lustre filesystem with: + +mount -t lustre mgs:/fsname mnt + +where mgs is the host name or ip address of your Lustre MGS(management service) +fsname is the name of the filesystem you would like to mount. + + +Mount Options +============= + + noflock + Disable posix file locking (Applications trying to use + the functionality will get ENOSYS) + + localflock + Enable local flock support, using only client-local flock + (faster, for applications that require flock but do not run + on multiple nodes). + + flock + Enable cluster-global posix file locking coherent across all + client nodes. + + user_xattr, nouser_xattr + Support "user." extended attributes (or not) + + user_fid2path, nouser_fid2path + Enable FID to path translation by regular users (or not) + + checksum, nochecksum + Verify data consistency on the wire and in memory as it passes + between the layers (or not). + + lruresize, nolruresize + Allow lock LRU to be controlled by memory pressure on the server + (or only 100 (default, controlled by lru_size proc parameter) locks + per CPU per server on this client). + + lazystatfs, nolazystatfs + Do not block in statfs() if some of the servers are down. + + 32bitapi + Shrink inode numbers to fit into 32 bits. This is necessary + if you plan to reexport Lustre filesystem from this client via + NFSv4. + + verbose, noverbose + Enable mount/umount console messages (or not) + +More Information +================ +You can get more information at +OpenSFS website: http://lustre.opensfs.org/about/ +Intel HPDD wiki: https://wiki.hpdd.intel.com + +Out of tree Lustre client and server code is available at: +http://git.whamcloud.com/fs/lustre-release.git + +Latest binary packages: +http://lustre.opensfs.org/download-lustre/ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/libcfs.h index 7d37bec918f3..a6b2f906bb1a 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs.h @@ -165,7 +165,6 @@ void cfs_get_random_bytes(void *buf, int size); #include "libcfs_kernelcomm.h" #include "libcfs_workitem.h" #include "libcfs_hash.h" -#include "libcfs_heap.h" #include "libcfs_fail.h" #include "libcfs_crypto.h" @@ -174,8 +173,7 @@ static inline void *__container_of(void *ptr, unsigned long shift) { if (unlikely(IS_ERR(ptr) || ptr == NULL)) return ptr; - else - return (char *)ptr - shift; + return (char *)ptr - shift; } #define container_of0(ptr, type, member) \ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_cpu.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_cpu.h index a140e5d91860..787867847483 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_cpu.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_cpu.h @@ -102,13 +102,13 @@ struct cfs_cpt_table { static inline cpumask_t * cfs_cpt_cpumask(struct cfs_cpt_table *cptab, int cpt) { - return NULL; + return NULL; } static inline int cfs_cpt_table_print(struct cfs_cpt_table *cptab, char *buf, int len) { - return 0; + return 0; } #endif /* CONFIG_SMP */ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_crypto.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_crypto.h index 9e610a9ce51f..e8663697e7a6 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_crypto.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_crypto.h @@ -83,8 +83,7 @@ static inline const char *cfs_crypto_hash_name(unsigned char hash_alg) ht = cfs_crypto_hash_type(hash_alg); if (ht) return ht->cht_name; - else - return "unknown"; + return "unknown"; } /** Return digest size for valid algorithm identifier or 0 */ @@ -95,8 +94,7 @@ static inline int cfs_crypto_hash_digestsize(unsigned char hash_alg) ht = cfs_crypto_hash_type(hash_alg); if (ht) return ht->cht_size; - else - return 0; + return 0; } /** Return hash identifier for valid hash algorithm name or 0xFF */ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h index 30098f39181f..8888b2756174 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h @@ -80,7 +80,7 @@ struct ptldebug_header { __u32 ph_pid; __u32 ph_extern_pid; __u32 ph_line_num; -} __attribute__((packed)); +} __packed; #define PH_FLAG_FIRST_RECORD 1 @@ -265,9 +265,9 @@ int libcfs_debug_vmsg2(struct libcfs_debug_msg_data *msgdata, /* other external symbols that tracefile provides: */ int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, - const char *usr_buffer, int usr_buffer_nob); -int cfs_trace_copyout_string(char *usr_buffer, int usr_buffer_nob, - const char *knl_buffer, char *append); + const char __user *usr_buffer, int usr_buffer_nob); +int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob, + const char *knl_buffer, char *append); #define LIBCFS_DEBUG_FILE_PATH_DEFAULT "/tmp/lustre-log" diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h index 1934ec20e536..eea55d94e6be 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h @@ -124,8 +124,7 @@ static inline int cfs_fail_timeout_set(__u32 id, __u32 value, int ms, int set) { if (unlikely(CFS_FAIL_PRECHECK(id))) return __cfs_fail_timeout_set(id, value, ms, set); - else - return 0; + return 0; } /* If id hit cfs_fail_loc, sleep for seconds or milliseconds */ @@ -156,8 +155,8 @@ static inline void cfs_race(__u32 id) cfs_race_state = 0; CERROR("cfs_race id %x sleeping\n", id); - cfs_wait_event_interruptible(cfs_race_waitq, - cfs_race_state != 0, rc); + rc = wait_event_interruptible(cfs_race_waitq, + cfs_race_state != 0); CERROR("cfs_fail_race id %x awake, rc=%d\n", id, rc); } else { CERROR("cfs_fail_race id %x waking\n", id); diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_heap.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_heap.h deleted file mode 100644 index bfa6d7b245ea..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_heap.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - - * 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 COPYING file that accompanied this code. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * GPL HEADER END - */ -/* - * Copyright (c) 2011 Intel Corporation - */ -/* - * libcfs/include/libcfs/heap.h - * - * Author: Eric Barton <eeb@whamcloud.com> - * Liang Zhen <liang@whamcloud.com> - */ - -#ifndef __LIBCFS_HEAP_H__ -#define __LIBCFS_HEAP_H__ - -/** \defgroup heap Binary heap - * - * The binary heap is a scalable data structure created using a binary tree. It - * is capable of maintaining large sets of elements sorted usually by one or - * more element properties, but really based on anything that can be used as a - * binary predicate in order to determine the relevant ordering of any two nodes - * that belong to the set. There is no search operation, rather the intention is - * for the element of the lowest priority which will always be at the root of - * the tree (as this is an implementation of a min-heap) to be removed by users - * for consumption. - * - * Users of the heap should embed a \e cfs_binheap_node_t object instance on - * every object of the set that they wish the binary heap instance to handle, - * and (at a minimum) provide a cfs_binheap_ops_t::hop_compare() implementation - * which is used by the heap as the binary predicate during its internal sorting - * operations. - * - * The current implementation enforces no locking scheme, and so assumes the - * user caters for locking between calls to insert, delete and lookup - * operations. Since the only consumer for the data structure at this point - * are NRS policies, and these operate on a per-CPT basis, binary heap instances - * are tied to a specific CPT. - * @{ - */ - -/** - * Binary heap node. - * - * Objects of this type are embedded into objects of the ordered set that is to - * be maintained by a \e cfs_binheap_t instance. - */ -typedef struct { - /** Index into the binary tree */ - unsigned int chn_index; -} cfs_binheap_node_t; - -#define CBH_SHIFT 9 -#define CBH_SIZE (1 << CBH_SHIFT) /* # ptrs per level */ -#define CBH_MASK (CBH_SIZE - 1) -#define CBH_NOB (CBH_SIZE * sizeof(cfs_binheap_node_t *)) - -#define CBH_POISON 0xdeadbeef - -/** - * Binary heap flags. - */ -enum { - CBH_FLAG_ATOMIC_GROW = 1, -}; - -struct cfs_binheap; - -/** - * Binary heap operations. - */ -typedef struct { - /** - * Called right before inserting a node into the binary heap. - * - * Implementing this operation is optional. - * - * \param[in] h The heap - * \param[in] e The node - * - * \retval 0 success - * \retval != 0 error - */ - int (*hop_enter)(struct cfs_binheap *h, - cfs_binheap_node_t *e); - /** - * Called right after removing a node from the binary heap. - * - * Implementing this operation is optional. - * - * \param[in] h The heap - * \param[in] e The node - */ - void (*hop_exit)(struct cfs_binheap *h, - cfs_binheap_node_t *e); - /** - * A binary predicate which is called during internal heap sorting - * operations, and used in order to determine the relevant ordering of - * two heap nodes. - * - * Implementing this operation is mandatory. - * - * \param[in] a The first heap node - * \param[in] b The second heap node - * - * \retval 0 Node a > node b - * \retval 1 Node a < node b - * - * \see cfs_binheap_bubble() - * \see cfs_biheap_sink() - */ - int (*hop_compare)(cfs_binheap_node_t *a, - cfs_binheap_node_t *b); -} cfs_binheap_ops_t; - -/** - * Binary heap object. - * - * Sorts elements of type \e cfs_binheap_node_t - */ -typedef struct cfs_binheap { - /** Triple indirect */ - cfs_binheap_node_t ****cbh_elements3; - /** double indirect */ - cfs_binheap_node_t ***cbh_elements2; - /** single indirect */ - cfs_binheap_node_t **cbh_elements1; - /** # elements referenced */ - unsigned int cbh_nelements; - /** high water mark */ - unsigned int cbh_hwm; - /** user flags */ - unsigned int cbh_flags; - /** operations table */ - cfs_binheap_ops_t *cbh_ops; - /** private data */ - void *cbh_private; - /** associated CPT table */ - struct cfs_cpt_table *cbh_cptab; - /** associated CPT id of this cfs_binheap_t::cbh_cptab */ - int cbh_cptid; -} cfs_binheap_t; - -void cfs_binheap_destroy(cfs_binheap_t *h); -cfs_binheap_t *cfs_binheap_create(cfs_binheap_ops_t *ops, unsigned int flags, - unsigned count, void *arg, - struct cfs_cpt_table *cptab, int cptid); -cfs_binheap_node_t *cfs_binheap_find(cfs_binheap_t *h, unsigned int idx); -int cfs_binheap_insert(cfs_binheap_t *h, cfs_binheap_node_t *e); -void cfs_binheap_remove(cfs_binheap_t *h, cfs_binheap_node_t *e); - -static inline int -cfs_binheap_size(cfs_binheap_t *h) -{ - return h->cbh_nelements; -} - -static inline int -cfs_binheap_is_empty(cfs_binheap_t *h) -{ - return h->cbh_nelements == 0; -} - -static inline cfs_binheap_node_t * -cfs_binheap_root(cfs_binheap_t *h) -{ - return cfs_binheap_find(h, 0); -} - -static inline cfs_binheap_node_t * -cfs_binheap_remove_root(cfs_binheap_t *h) -{ - cfs_binheap_node_t *e = cfs_binheap_find(h, 0); - - if (e != NULL) - cfs_binheap_remove(h, e); - return e; -} - -/** @} heap */ - -#endif /* __LIBCFS_HEAP_H__ */ diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_ioctl.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_ioctl.h index 87f2d901c7c1..3ee38782ad8c 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_ioctl.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_ioctl.h @@ -75,8 +75,7 @@ struct libcfs_ioctl_hdr { __u32 ioc_version; }; -struct libcfs_debug_ioctl_data -{ +struct libcfs_debug_ioctl_data { struct libcfs_ioctl_hdr hdr; unsigned int subs; unsigned int debug; diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h index a38209506d6c..978d3e2f16d3 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h @@ -83,6 +83,5 @@ static inline void cfs_memory_pressure_restore(int old) memory_pressure_set(); else memory_pressure_clr(); - return; } #endif diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h index 82a269cee6dd..2817112c0633 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_private.h @@ -453,8 +453,7 @@ int cfs_match_nid(lnet_nid_t nid, struct list_head *list); * Support for temporary event tracing with minimal Heisenberg effect. * -------------------------------------------------------------------- */ -struct libcfs_device_userstate -{ +struct libcfs_device_userstate { int ldu_memhog_pages; struct page *ldu_memhog_root_page; }; diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h index 1344139c46c3..5de6da085712 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_time.h @@ -94,7 +94,7 @@ static inline void cfs_slow_warning(unsigned long now, int seconds, char *msg) /* \ * XXX nikita: non-portable initializer \ */ \ - static time_t __next_message = 0; \ + static time_t __next_message; \ int result; \ \ if (cfs_time_after(cfs_time_current(), __next_message)) \ diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h index ccc55fc41a9e..4fe50841e8e3 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/libcfs.h @@ -78,15 +78,14 @@ #include <linux/unistd.h> #include <linux/vmalloc.h> #include <net/sock.h> -#include <asm/atomic.h> +#include <linux/atomic.h> #include <asm/div64.h> -#include <asm/timex.h> -#include <asm/uaccess.h> +#include <linux/timex.h> +#include <linux/uaccess.h> #include <stdarg.h> #include "linux-cpu.h" #include "linux-time.h" #include "linux-mem.h" -#include "portals_compat25.h" #define LUSTRE_TRACE_SIZE (THREAD_SIZE >> 5) diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h index 1158a3112bcc..0fc490bac2b5 100644 --- a/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h +++ b/drivers/staging/lustre/include/linux/libcfs/linux/linux-time.h @@ -53,8 +53,6 @@ #include <linux/time.h> #include <asm/div64.h> -#include "portals_compat25.h" - /* * post 2.5 kernels. */ @@ -108,8 +106,7 @@ static inline void cfs_duration_usec(long d, struct timeval *s) s->tv_usec = t; #else s->tv_sec = d / HZ; - s->tv_usec = ((d - (long)s->tv_sec * HZ) * \ - ONE_MILLION) / HZ; + s->tv_usec = ((d - (long)s->tv_sec * HZ) * ONE_MILLION) / HZ; #endif } diff --git a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h b/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h deleted file mode 100644 index 442d61be1c18..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/linux/portals_compat25.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef __LIBCFS_LINUX_PORTALS_COMPAT_H__ -#define __LIBCFS_LINUX_PORTALS_COMPAT_H__ - -/* XXX BUG 1511 -- remove this stanza and all callers when bug 1511 is resolved */ -#if defined(SPINLOCK_DEBUG) && SPINLOCK_DEBUG -# define SIGNAL_MASK_ASSERT() \ - LASSERT(current->sighand->siglock.magic == SPINLOCK_MAGIC) -#else -# define SIGNAL_MASK_ASSERT() -#endif -/* XXX BUG 1511 -- remove this stanza and all callers when bug 1511 is resolved */ - -#define SIGNAL_MASK_LOCK(task, flags) \ - spin_lock_irqsave(&task->sighand->siglock, flags) -#define SIGNAL_MASK_UNLOCK(task, flags) \ - spin_unlock_irqrestore(&task->sighand->siglock, flags) -#define USERMODEHELPER(path, argv, envp) \ - call_usermodehelper(path, argv, envp, 1) -#define clear_tsk_thread_flag(current, TIF_SIGPENDING) clear_tsk_thread_flag(current, \ - TIF_SIGPENDING) -# define smp_num_cpus num_online_cpus() - -#define cfs_wait_event_interruptible(wq, condition, ret) \ - ret = wait_event_interruptible(wq, condition) -#define cfs_wait_event_interruptible_exclusive(wq, condition, ret) \ - ret = wait_event_interruptible_exclusive(wq, condition) - -#define THREAD_NAME(comm, len, fmt, a...) \ - snprintf(comm, len, fmt, ## a) - -/* 2.6 alloc_page users can use page->lru */ -#define PAGE_LIST_ENTRY lru -#define PAGE_LIST(page) ((page)->lru) - -#ifndef __user -#define __user -#endif - -#ifndef __fls -#define __cfs_fls fls -#else -#define __cfs_fls __fls -#endif - -#endif /* _PORTALS_COMPAT_H */ diff --git a/drivers/staging/lustre/include/linux/libcfs/lucache.h b/drivers/staging/lustre/include/linux/libcfs/lucache.h deleted file mode 100644 index 5d6e1b9de206..000000000000 --- a/drivers/staging/lustre/include/linux/libcfs/lucache.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef _LUCACHE_H -#define _LUCACHE_H - -#include "libcfs.h" - -/** \defgroup ucache ucache - * - * @{ - */ - -#define UC_CACHE_NEW 0x01 -#define UC_CACHE_ACQUIRING 0x02 -#define UC_CACHE_INVALID 0x04 -#define UC_CACHE_EXPIRED 0x08 - -#define UC_CACHE_IS_NEW(i) ((i)->ue_flags & UC_CACHE_NEW) -#define UC_CACHE_IS_INVALID(i) ((i)->ue_flags & UC_CACHE_INVALID) -#define UC_CACHE_IS_ACQUIRING(i) ((i)->ue_flags & UC_CACHE_ACQUIRING) -#define UC_CACHE_IS_EXPIRED(i) ((i)->ue_flags & UC_CACHE_EXPIRED) -#define UC_CACHE_IS_VALID(i) ((i)->ue_flags == 0) - -#define UC_CACHE_SET_NEW(i) (i)->ue_flags |= UC_CACHE_NEW -#define UC_CACHE_SET_INVALID(i) (i)->ue_flags |= UC_CACHE_INVALID -#define UC_CACHE_SET_ACQUIRING(i) (i)->ue_flags |= UC_CACHE_ACQUIRING -#define UC_CACHE_SET_EXPIRED(i) (i)->ue_flags |= UC_CACHE_EXPIRED -#define UC_CACHE_SET_VALID(i) (i)->ue_flags = 0 - -#define UC_CACHE_CLEAR_NEW(i) (i)->ue_flags &= ~UC_CACHE_NEW -#define UC_CACHE_CLEAR_ACQUIRING(i) (i)->ue_flags &= ~UC_CACHE_ACQUIRING -#define UC_CACHE_CLEAR_INVALID(i) (i)->ue_flags &= ~UC_CACHE_INVALID -#define UC_CACHE_CLEAR_EXPIRED(i) (i)->ue_flags &= ~UC_CACHE_EXPIRED - -struct upcall_cache_entry; - -struct md_perm { - lnet_nid_t mp_nid; - __u32 mp_perm; -}; - -struct md_identity { - struct upcall_cache_entry *mi_uc_entry; - uid_t mi_uid; - gid_t mi_gid; - struct group_info *mi_ginfo; - int mi_nperms; - struct md_perm *mi_perms; -}; - -struct upcall_cache_entry { - struct list_head ue_hash; - __u64 ue_key; - atomic_t ue_refcount; - int ue_flags; - wait_queue_head_t ue_waitq; - unsigned long ue_acquire_expire; - unsigned long ue_expire; - union { - struct md_identity identity; - } u; -}; - -#define UC_CACHE_HASH_SIZE (128) -#define UC_CACHE_HASH_INDEX(id) ((id) & (UC_CACHE_HASH_SIZE - 1)) -#define UC_CACHE_UPCALL_MAXPATH (1024UL) - -struct upcall_cache; - -struct upcall_cache_ops { - void (*init_entry)(struct upcall_cache_entry *, void *args); - void (*free_entry)(struct upcall_cache *, - struct upcall_cache_entry *); - int (*upcall_compare)(struct upcall_cache *, - struct upcall_cache_entry *, - __u64 key, void *args); - int (*downcall_compare)(struct upcall_cache *, - struct upcall_cache_entry *, - __u64 key, void *args); - int (*do_upcall)(struct upcall_cache *, - struct upcall_cache_entry *); - int (*parse_downcall)(struct upcall_cache *, - struct upcall_cache_entry *, void *); -}; - -struct upcall_cache { - struct list_head uc_hashtable[UC_CACHE_HASH_SIZE]; - spinlock_t uc_lock; - rwlock_t uc_upcall_rwlock; - - char uc_name[40]; /* for upcall */ - char uc_upcall[UC_CACHE_UPCALL_MAXPATH]; - int uc_acquire_expire; /* seconds */ - int uc_entry_expire; /* seconds */ - struct upcall_cache_ops *uc_ops; -}; - -struct upcall_cache_entry *upcall_cache_get_entry(struct upcall_cache *cache, - __u64 key, void *args); -void upcall_cache_put_entry(struct upcall_cache *cache, - struct upcall_cache_entry *entry); -int upcall_cache_downcall(struct upcall_cache *cache, __u32 err, __u64 key, - void *args); -void upcall_cache_flush_idle(struct upcall_cache *cache); -void upcall_cache_flush_all(struct upcall_cache *cache); -void upcall_cache_flush_one(struct upcall_cache *cache, __u64 key, void *args); -struct upcall_cache *upcall_cache_init(const char *name, const char *upcall, - struct upcall_cache_ops *ops); -void upcall_cache_cleanup(struct upcall_cache *cache); - -#if 0 -struct upcall_cache_entry *upcall_cache_get_entry(struct upcall_cache *hash, - __u64 key, __u32 primary, - __u32 ngroups, __u32 *groups); -void upcall_cache_put_entry(struct upcall_cache *hash, - struct upcall_cache_entry *entry); -int upcall_cache_downcall(struct upcall_cache *hash, __u32 err, __u64 key, - __u32 primary, __u32 ngroups, __u32 *groups); -void upcall_cache_flush_idle(struct upcall_cache *cache); -void upcall_cache_flush_all(struct upcall_cache *cache); -struct upcall_cache *upcall_cache_init(const char *name); -void upcall_cache_cleanup(struct upcall_cache *hash); - -#endif - -/** @} ucache */ - -#endif /* _LUCACHE_H */ diff --git a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h index 5e8ea222b49f..7e89b3be1a74 100644 --- a/drivers/staging/lustre/include/linux/lnet/lib-lnet.h +++ b/drivers/staging/lustre/include/linux/lnet/lib-lnet.h @@ -94,8 +94,8 @@ static inline int lnet_md_exhausted(lnet_libmd_t *md) static inline int lnet_md_unlinkable(lnet_libmd_t *md) { /* Should unlink md when its refcount is 0 and either: - * - md has been flagged for deletion (by auto unlink or LNetM[DE]Unlink, - * in the latter case md may not be exhausted). + * - md has been flagged for deletion (by auto unlink or + * LNetM[DE]Unlink, in the latter case md may not be exhausted). * - auto unlink is on and md is exhausted. */ if (md->md_refcount != 0) @@ -644,7 +644,8 @@ lnet_ni_t *lnet_net2ni_locked(__u32 net, int cpt); lnet_ni_t *lnet_net2ni(__u32 net); int lnet_notify(lnet_ni_t *ni, lnet_nid_t peer, int alive, unsigned long when); -void lnet_notify_locked(lnet_peer_t *lp, int notifylnd, int alive, unsigned long when); +void lnet_notify_locked(lnet_peer_t *lp, int notifylnd, int alive, + unsigned long when); int lnet_add_route(__u32 net, unsigned int hops, lnet_nid_t gateway_nid, unsigned int priority); int lnet_check_routes(void); @@ -791,8 +792,8 @@ lnet_copy_iov2flat(int dlen, void *dest, unsigned int doffset, static inline void lnet_copy_kiov2flat(int dlen, void *dest, unsigned int doffset, - unsigned int nsiov, lnet_kiov_t *skiov, unsigned int soffset, - unsigned int nob) + unsigned int nsiov, lnet_kiov_t *skiov, + unsigned int soffset, unsigned int nob) { struct iovec diov = {/* .iov_base = */ dest, /* .iov_len = */ dlen}; @@ -811,8 +812,9 @@ lnet_copy_flat2iov(unsigned int ndiov, struct iovec *diov, unsigned int doffset, } static inline void -lnet_copy_flat2kiov(unsigned int ndiov, lnet_kiov_t *dkiov, unsigned int doffset, - int slen, void *src, unsigned int soffset, unsigned int nob) +lnet_copy_flat2kiov(unsigned int ndiov, lnet_kiov_t *dkiov, + unsigned int doffset, int slen, void *src, + unsigned int soffset, unsigned int nob) { struct iovec siov = {/* .iov_base = */ src, /* .iov_len = */ slen}; diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c index ab1643943496..8f5cdd584f85 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c @@ -1025,7 +1025,7 @@ kiblnd_ctl(lnet_ni_t *ni, unsigned int cmd, void *arg) struct libcfs_ioctl_data *data = arg; int rc = -EINVAL; - switch(cmd) { + switch (cmd) { case IOC_LIBCFS_GET_PEER: { lnet_nid_t nid = 0; int count = 0; @@ -1202,7 +1202,7 @@ kiblnd_map_rx_descs(kib_conn_t *conn) rx->rx_msgaddr)); KIBLND_UNMAP_ADDR_SET(rx, rx_msgunmap, rx->rx_msgaddr); - CDEBUG(D_NET,"rx %d: %p %#llx(%#llx)\n", + CDEBUG(D_NET, "rx %d: %p %#llx(%#llx)\n", i, rx->rx_msg, rx->rx_msgaddr, lnet_page2phys(pg) + pg_off); diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h index 4306d9804a10..b02b4ec1e29d 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h @@ -79,8 +79,7 @@ #define IBLND_N_SCHED 2 #define IBLND_N_SCHED_HIGH 4 -typedef struct -{ +typedef struct { int *kib_dev_failover; /* HCA failover */ unsigned int *kib_service; /* IB service number */ int *kib_min_reconnect_interval; /* first failed connection retry... */ @@ -186,8 +185,7 @@ struct kib_hca_dev; #define KIB_IFNAME_SIZE 256 #endif -typedef struct -{ +typedef struct { struct list_head ibd_list; /* chain on kib_devs */ struct list_head ibd_fail_list; /* chain on kib_failed_devs */ __u32 ibd_ifip; /* IPoIB interface IP */ @@ -203,8 +201,7 @@ typedef struct struct kib_hca_dev *ibd_hdev; } kib_dev_t; -typedef struct kib_hca_dev -{ +typedef struct kib_hca_dev { struct rdma_cm_id *ibh_cmid; /* listener cmid */ struct ib_device *ibh_ibdev; /* IB device */ int ibh_page_shift; /* page shift of current HCA */ @@ -224,8 +221,7 @@ typedef struct kib_hca_dev /** # of seconds to retry if allocation failed */ #define IBLND_POOL_RETRY 1 -typedef struct -{ +typedef struct { int ibp_npages; /* # pages */ struct page *ibp_pages[0]; /* page array */ } kib_pages_t; @@ -254,8 +250,7 @@ struct kib_net; #define IBLND_POOL_NAME_LEN 32 -typedef struct kib_poolset -{ +typedef struct kib_poolset { spinlock_t ps_lock; /* serialize */ struct kib_net *ps_net; /* network it belongs to */ char ps_name[IBLND_POOL_NAME_LEN]; /* pool set name */ @@ -272,8 +267,7 @@ typedef struct kib_poolset kib_ps_node_fini_t ps_node_fini; /* finalize node */ } kib_poolset_t; -typedef struct kib_pool -{ +typedef struct kib_pool { struct list_head po_list; /* chain on pool list */ struct list_head po_free_list; /* pre-allocated node */ kib_poolset_t *po_owner; /* pool_set of this pool */ @@ -304,8 +298,7 @@ typedef struct kib_pmr_pool { kib_pool_t ppo_pool; /* pool */ } kib_pmr_pool_t; -typedef struct -{ +typedef struct { spinlock_t fps_lock; /* serialize */ struct kib_net *fps_net; /* IB network */ struct list_head fps_pool_list; /* FMR pool list */ @@ -320,8 +313,7 @@ typedef struct unsigned long fps_next_retry; } kib_fmr_poolset_t; -typedef struct -{ +typedef struct { struct list_head fpo_list; /* chain on pool list */ struct kib_hca_dev *fpo_hdev; /* device for this pool */ kib_fmr_poolset_t *fpo_owner; /* owner of this pool */ @@ -336,8 +328,7 @@ typedef struct { kib_fmr_pool_t *fmr_pool; /* pool of FMR */ } kib_fmr_t; -typedef struct kib_net -{ +typedef struct kib_net { struct list_head ibn_list; /* chain on kib_dev_t::ibd_nets */ __u64 ibn_incarnation; /* my epoch */ int ibn_init; /* initialisation state */ @@ -372,8 +363,7 @@ struct kib_sched_info { int ibs_cpt; /* CPT id */ }; -typedef struct -{ +typedef struct { int kib_init; /* initialisation state */ int kib_shutdown; /* shut down? */ struct list_head kib_devs; /* IB devices extant */ @@ -411,60 +401,51 @@ typedef struct * These are sent in sender's byte order (i.e. receiver flips). */ -typedef struct kib_connparams -{ +typedef struct kib_connparams { __u16 ibcp_queue_depth; __u16 ibcp_max_frags; __u32 ibcp_max_msg_size; } WIRE_ATTR kib_connparams_t; -typedef struct -{ +typedef struct { lnet_hdr_t ibim_hdr; /* portals header */ char ibim_payload[0]; /* piggy-backed payload */ } WIRE_ATTR kib_immediate_msg_t; -typedef struct -{ +typedef struct { __u32 rf_nob; /* # bytes this frag */ __u64 rf_addr; /* CAVEAT EMPTOR: misaligned!! */ } WIRE_ATTR kib_rdma_frag_t; -typedef struct -{ +typedef struct { __u32 rd_key; /* local/remote key */ __u32 rd_nfrags; /* # fragments */ kib_rdma_frag_t rd_frags[0]; /* buffer frags */ } WIRE_ATTR kib_rdma_desc_t; -typedef struct -{ +typedef struct { lnet_hdr_t ibprm_hdr; /* portals header */ __u64 ibprm_cookie; /* opaque completion cookie */ } WIRE_ATTR kib_putreq_msg_t; -typedef struct -{ +typedef struct { __u64 ibpam_src_cookie; /* reflected completion cookie */ __u64 ibpam_dst_cookie; /* opaque completion cookie */ kib_rdma_desc_t ibpam_rd; /* sender's sink buffer */ } WIRE_ATTR kib_putack_msg_t; -typedef struct -{ +typedef struct { lnet_hdr_t ibgm_hdr; /* portals header */ __u64 ibgm_cookie; /* opaque completion cookie */ kib_rdma_desc_t ibgm_rd; /* rdma descriptor */ } WIRE_ATTR kib_get_msg_t; -typedef struct -{ +typedef struct { __u64 ibcm_cookie; /* opaque completion cookie */ __s32 ibcm_status; /* < 0 failure: >= 0 length */ } WIRE_ATTR kib_completion_msg_t; -typedef struct -{ +typedef struct { /* First 2 fields fixed FOR ALL TIME */ __u32 ibm_magic; /* I'm an ibnal message */ __u16 ibm_version; /* this is my version number */ @@ -574,14 +555,12 @@ typedef struct kib_tx /* transmit message */ int tx_dmadir; /* dma direction */ } kib_tx_t; -typedef struct kib_connvars -{ +typedef struct kib_connvars { /* connection-in-progress variables */ kib_msg_t cv_msg; } kib_connvars_t; -typedef struct kib_conn -{ +typedef struct kib_conn { struct kib_sched_info *ibc_sched; /* scheduler information */ struct kib_peer *ibc_peer; /* owning peer */ kib_hca_dev_t *ibc_hdev; /* HCA bound on */ @@ -629,8 +608,7 @@ typedef struct kib_conn #define IBLND_CONN_CLOSING 4 /* being closed */ #define IBLND_CONN_DISCONNECTED 5 /* disconnected */ -typedef struct kib_peer -{ +typedef struct kib_peer { struct list_head ibp_list; /* stash on global peer list */ lnet_nid_t ibp_nid; /* who's on the other end(s) */ lnet_ni_t *ibp_ni; /* LNet interface */ diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c index 306d72876432..86f1a91e896f 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -1487,7 +1487,7 @@ kiblnd_send (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg) switch (type) { default: LBUG(); - return (-EIO); + return -EIO; case LNET_MSG_ACK: LASSERT (payload_nob == 0); @@ -2080,7 +2080,7 @@ kiblnd_connreq_done(kib_conn_t *conn, int status) active = (conn->ibc_state == IBLND_CONN_ACTIVE_CONNECT); - CDEBUG(D_NET,"%s: active(%d), version(%x), status(%d)\n", + CDEBUG(D_NET, "%s: active(%d), version(%x), status(%d)\n", libcfs_nid2str(peer->ibp_nid), active, conn->ibc_version, status); @@ -2848,7 +2848,7 @@ kiblnd_cm_callback(struct rdma_cm_id *cmid, struct rdma_cm_event *event) case RDMA_CM_EVENT_ADDR_RESOLVED: peer = (kib_peer_t *)cmid->context; - CDEBUG(D_NET,"%s Addr resolved: %d\n", + CDEBUG(D_NET, "%s Addr resolved: %d\n", libcfs_nid2str(peer->ibp_nid), event->status); if (event->status != 0) { @@ -2878,7 +2878,7 @@ kiblnd_cm_callback(struct rdma_cm_id *cmid, struct rdma_cm_event *event) case RDMA_CM_EVENT_ROUTE_RESOLVED: peer = (kib_peer_t *)cmid->context; - CDEBUG(D_NET,"%s Route resolved: %d\n", + CDEBUG(D_NET, "%s Route resolved: %d\n", libcfs_nid2str(peer->ibp_nid), event->status); if (event->status == 0) diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h index f7cce9d9b7ba..a29d4da6e343 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h @@ -93,8 +93,7 @@ typedef struct /* in-use interface */ char ksni_name[IFNAMSIZ]; /* interface name */ } ksock_interface_t; -typedef struct -{ +typedef struct { /* "stuck" socket timeout (seconds) */ int *ksnd_timeout; /* # scheduler threads in each pool while starting */ @@ -126,8 +125,7 @@ typedef struct int *ksnd_zc_recv_min_nfrags; /* minimum # of fragments to enable ZC receive */ } ksock_tunables_t; -typedef struct -{ +typedef struct { __u64 ksnn_incarnation; /* my epoch */ spinlock_t ksnn_lock; /* serialise */ struct list_head ksnn_list; /* chain on global list */ @@ -142,8 +140,7 @@ typedef struct /** reserved thread for accepting & creating new connd */ #define SOCKNAL_CONND_RESV 1 -typedef struct -{ +typedef struct { int ksnd_init; /* initialisation state */ int ksnd_nnets; /* # networks set up */ struct list_head ksnd_nets; /* list of nets */ @@ -257,8 +254,7 @@ typedef union { #define SOCKNAL_RX_LNET_PAYLOAD 5 /* reading lnet payload (to deliver here) */ #define SOCKNAL_RX_SLOP 6 /* skipping body */ -typedef struct ksock_conn -{ +typedef struct ksock_conn { struct ksock_peer *ksnc_peer; /* owning peer */ struct ksock_route *ksnc_route; /* owning route */ struct list_head ksnc_list; /* stash on peer's conn list */ @@ -313,8 +309,7 @@ typedef struct ksock_conn unsigned long ksnc_tx_last_post; /* time stamp of the last posted TX */ } ksock_conn_t; -typedef struct ksock_route -{ +typedef struct ksock_route { struct list_head ksnr_list; /* chain on peer route list */ struct list_head ksnr_connd_list; /* chain on ksnr_connd_routes */ struct ksock_peer *ksnr_peer; /* owning peer */ @@ -334,8 +329,7 @@ typedef struct ksock_route #define SOCKNAL_KEEPALIVE_PING 1 /* cookie for keepalive ping */ -typedef struct ksock_peer -{ +typedef struct ksock_peer { struct list_head ksnp_list; /* stash on global peer list */ unsigned long ksnp_last_alive; /* when (in jiffies) I was last alive */ lnet_process_id_t ksnp_id; /* who's on the other end(s) */ @@ -358,8 +352,7 @@ typedef struct ksock_peer __u32 ksnp_passive_ips[LNET_MAX_INTERFACES]; /* preferred local interfaces */ } ksock_peer_t; -typedef struct ksock_connreq -{ +typedef struct ksock_connreq { struct list_head ksncr_list; /* stash on ksnd_connd_connreqs */ lnet_ni_t *ksncr_ni; /* chosen NI */ struct socket *ksncr_sock; /* accepted socket */ @@ -372,8 +365,7 @@ extern ksock_tunables_t ksocknal_tunables; #define SOCKNAL_MATCH_YES 1 /* TX matches type of connection */ #define SOCKNAL_MATCH_MAY 2 /* TX can be sent on the connection, but not preferred */ -typedef struct ksock_proto -{ +typedef struct ksock_proto { int pro_version; /* version number of protocol */ int (*pro_send_hello)(ksock_conn_t *, ksock_hello_msg_t *); /* handshake function */ int (*pro_recv_hello)(ksock_conn_t *, ksock_hello_msg_t *, int);/* handshake function */ diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index 521439954fcb..bcfee7c21942 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -107,7 +107,7 @@ ksocknal_free_tx (ksock_tx_t *tx) } } -int +static int ksocknal_send_iov (ksock_conn_t *conn, ksock_tx_t *tx) { struct iovec *iov = tx->tx_iov; @@ -144,7 +144,7 @@ ksocknal_send_iov (ksock_conn_t *conn, ksock_tx_t *tx) return rc; } -int +static int ksocknal_send_kiov (ksock_conn_t *conn, ksock_tx_t *tx) { lnet_kiov_t *kiov = tx->tx_kiov; @@ -182,7 +182,7 @@ ksocknal_send_kiov (ksock_conn_t *conn, ksock_tx_t *tx) return rc; } -int +static int ksocknal_transmit (ksock_conn_t *conn, ksock_tx_t *tx) { int rc; @@ -232,7 +232,7 @@ ksocknal_transmit (ksock_conn_t *conn, ksock_tx_t *tx) rc = -EAGAIN; /* Check if EAGAIN is due to memory pressure */ - if(rc == -EAGAIN && ksocknal_lib_memory_pressure(conn)) + if (rc == -EAGAIN && ksocknal_lib_memory_pressure(conn)) rc = -ENOMEM; break; @@ -248,7 +248,7 @@ ksocknal_transmit (ksock_conn_t *conn, ksock_tx_t *tx) return rc; } -int +static int ksocknal_recv_iov (ksock_conn_t *conn) { struct iovec *iov = conn->ksnc_rx_iov; @@ -281,7 +281,7 @@ ksocknal_recv_iov (ksock_conn_t *conn) if (nob < (int)iov->iov_len) { iov->iov_len -= nob; - iov->iov_base = (void *)((char *)iov->iov_base + nob); + iov->iov_base += nob; return -EAGAIN; } @@ -293,7 +293,7 @@ ksocknal_recv_iov (ksock_conn_t *conn) return rc; } -int +static int ksocknal_recv_kiov (ksock_conn_t *conn) { lnet_kiov_t *kiov = conn->ksnc_rx_kiov; @@ -337,7 +337,7 @@ ksocknal_recv_kiov (ksock_conn_t *conn) return 1; } -int +static int ksocknal_receive (ksock_conn_t *conn) { /* Return 1 on success, 0 on EOF, < 0 on error. @@ -499,7 +499,7 @@ ksocknal_uncheck_zc_req(ksock_tx_t *tx) ksocknal_tx_decref(tx); } -int +static int ksocknal_process_transmit (ksock_conn_t *conn, ksock_tx_t *tx) { int rc; @@ -579,7 +579,7 @@ ksocknal_process_transmit (ksock_conn_t *conn, ksock_tx_t *tx) return rc; } -void +static void ksocknal_launch_connection_locked (ksock_route_t *route) { @@ -1109,7 +1109,7 @@ ksocknal_new_packet (ksock_conn_t *conn, int nob_to_skip) return 0; } -int +static int ksocknal_process_receive (ksock_conn_t *conn) { lnet_hdr_t *lhdr; @@ -1537,9 +1537,9 @@ int ksocknal_scheduler(void *arg) nloops = 0; if (!did_something) { /* wait for something to do */ - cfs_wait_event_interruptible_exclusive( + rc = wait_event_interruptible_exclusive( sched->kss_waitq, - !ksocknal_sched_cansleep(sched), rc); + !ksocknal_sched_cansleep(sched)); LASSERT (rc == 0); } else { cond_resched(); @@ -1594,8 +1594,8 @@ void ksocknal_write_callback (ksock_conn_t *conn) conn->ksnc_tx_ready = 1; - if (!conn->ksnc_tx_scheduled && // not being progressed - !list_empty(&conn->ksnc_tx_queue)){//packets to send + if (!conn->ksnc_tx_scheduled && /* not being progressed */ + !list_empty(&conn->ksnc_tx_queue)) { /* packets to send */ list_add_tail (&conn->ksnc_tx_list, &sched->kss_tx_conns); conn->ksnc_tx_scheduled = 1; @@ -1608,7 +1608,7 @@ void ksocknal_write_callback (ksock_conn_t *conn) spin_unlock_bh(&sched->kss_lock); } -ksock_proto_t * +static ksock_proto_t * ksocknal_parse_proto_version (ksock_hello_msg_t *hello) { __u32 version = 0; @@ -1672,11 +1672,10 @@ ksocknal_send_hello (lnet_ni_t *ni, ksock_conn_t *conn, return conn->ksnc_proto->pro_send_hello(conn, hello); } -int +static int ksocknal_invert_type(int type) { - switch (type) - { + switch (type) { case SOCKLND_CONN_ANY: case SOCKLND_CONN_CONTROL: return type; @@ -1837,7 +1836,7 @@ ksocknal_recv_hello (lnet_ni_t *ni, ksock_conn_t *conn, return 0; } -int +static int ksocknal_connect (ksock_route_t *route) { LIST_HEAD (zombies); @@ -2244,7 +2243,7 @@ ksocknal_connd (void *arg) return 0; } -ksock_conn_t * +static ksock_conn_t * ksocknal_find_timed_out_conn (ksock_peer_t *peer) { /* We're called with a shared lock on ksnd_global_lock */ @@ -2354,7 +2353,7 @@ ksocknal_flush_stale_txs(ksock_peer_t *peer) ksocknal_txlist_done(peer->ksnp_ni, &stale_txs, 1); } -int +static int ksocknal_send_keepalive_locked(ksock_peer_t *peer) { ksock_sched_t *sched; @@ -2415,7 +2414,7 @@ ksocknal_send_keepalive_locked(ksock_peer_t *peer) } -void +static void ksocknal_check_peer_timeouts (int idx) { struct list_head *peers = &ksocknal_data.ksnd_peers[idx]; diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.h index f14a60ce0916..7a793d2d3582 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib-linux.h @@ -63,7 +63,6 @@ #include <linux/syscalls.h> #include "../../../include/linux/libcfs/libcfs.h" -#include "../../../include/linux/libcfs/linux/portals_compat25.h" #include <linux/crc32.h> static inline __u32 ksocknal_csum(__u32 crc, unsigned char const *p, size_t len) diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_modparams.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_modparams.c index 54c0019904ff..66d78c9be650 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_modparams.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_modparams.c @@ -33,7 +33,7 @@ static int peer_credits = 8; module_param(peer_credits, int, 0444); MODULE_PARM_DESC(peer_credits, "# concurrent sends to 1 peer"); -static int peer_buffer_credits = 0; +static int peer_buffer_credits; module_param(peer_buffer_credits, int, 0444); MODULE_PARM_DESC(peer_buffer_credits, "# per-peer router buffer credits"); @@ -85,7 +85,7 @@ static int rx_buffer_size = DEFAULT_BUFFER_SIZE; module_param(rx_buffer_size, int, 0644); MODULE_PARM_DESC(rx_buffer_size, "socket rx buffer size (0 for system default)"); -static int nagle = 0; +static int nagle; module_param(nagle, int, 0644); MODULE_PARM_DESC(nagle, "enable NAGLE?"); @@ -110,11 +110,11 @@ static int keepalive_intvl = 5; module_param(keepalive_intvl, int, 0644); MODULE_PARM_DESC(keepalive_intvl, "seconds between probes"); -static int enable_csum = 0; +static int enable_csum; module_param(enable_csum, int, 0644); MODULE_PARM_DESC(enable_csum, "enable check sum"); -static int inject_csum_error = 0; +static int inject_csum_error; module_param(inject_csum_error, int, 0644); MODULE_PARM_DESC(inject_csum_error, "set non-zero to inject a checksum error"); @@ -126,7 +126,7 @@ static unsigned int zc_min_payload = (16 << 10); module_param(zc_min_payload, int, 0644); MODULE_PARM_DESC(zc_min_payload, "minimum payload size to zero copy"); -static unsigned int zc_recv = 0; +static unsigned int zc_recv; module_param(zc_recv, int, 0644); MODULE_PARM_DESC(zc_recv, "enable ZC recv for Chelsio driver"); diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c index 050a58d08809..9dde548070af 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_proto.c @@ -495,7 +495,8 @@ ksocknal_send_hello_v1 (ksock_conn_t *conn, ksock_hello_msg_t *hello) hdr->msg.hello.type = cpu_to_le32 (hello->kshm_ctype); hdr->msg.hello.incarnation = cpu_to_le64 (hello->kshm_src_incarnation); - rc = libcfs_sock_write(sock, hdr, sizeof(*hdr),lnet_acceptor_timeout()); + rc = libcfs_sock_write(sock, hdr, sizeof(*hdr), + lnet_acceptor_timeout()); if (rc != 0) { CNETERR("Error %d sending HELLO hdr to %pI4h/%d\n", @@ -568,7 +569,8 @@ ksocknal_send_hello_v2 (ksock_conn_t *conn, ksock_hello_msg_t *hello) } static int -ksocknal_recv_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello,int timeout) +ksocknal_recv_hello_v1(ksock_conn_t *conn, ksock_hello_msg_t *hello, + int timeout) { struct socket *sock = conn->ksnc_sock; lnet_hdr_t *hdr; @@ -756,8 +758,7 @@ ksocknal_unpack_msg_v2(ksock_msg_t *msg) return; /* Do nothing */ } -ksock_proto_t ksocknal_protocol_v1x = -{ +ksock_proto_t ksocknal_protocol_v1x = { .pro_version = KSOCK_PROTO_V1, .pro_send_hello = ksocknal_send_hello_v1, .pro_recv_hello = ksocknal_recv_hello_v1, @@ -770,8 +771,7 @@ ksock_proto_t ksocknal_protocol_v1x = .pro_match_tx = ksocknal_match_tx }; -ksock_proto_t ksocknal_protocol_v2x = -{ +ksock_proto_t ksocknal_protocol_v2x = { .pro_version = KSOCK_PROTO_V2, .pro_send_hello = ksocknal_send_hello_v2, .pro_recv_hello = ksocknal_recv_hello_v2, @@ -784,8 +784,7 @@ ksock_proto_t ksocknal_protocol_v2x = .pro_match_tx = ksocknal_match_tx }; -ksock_proto_t ksocknal_protocol_v3x = -{ +ksock_proto_t ksocknal_protocol_v3x = { .pro_version = KSOCK_PROTO_V3, .pro_send_hello = ksocknal_send_hello_v2, .pro_recv_hello = ksocknal_recv_hello_v2, diff --git a/drivers/staging/lustre/lnet/lnet/acceptor.c b/drivers/staging/lustre/lnet/lnet/acceptor.c index 5dfb887a03ae..72fd1bf70ca0 100644 --- a/drivers/staging/lustre/lnet/lnet/acceptor.c +++ b/drivers/staging/lustre/lnet/lnet/acceptor.c @@ -434,11 +434,11 @@ accept2secure(const char *acc, long *sec) return 1; } else if (!strcmp(acc, "none")) { return 0; - } else { - LCONSOLE_ERROR_MSG(0x124, "Can't parse 'accept=\"%s\"'\n", - acc); - return -EINVAL; } + + LCONSOLE_ERROR_MSG(0x124, "Can't parse 'accept=\"%s\"'\n", + acc); + return -EINVAL; } int diff --git a/drivers/staging/lustre/lnet/lnet/api-ni.c b/drivers/staging/lustre/lnet/lnet/api-ni.c index b28734a76fac..60bc2ae4fdf1 100644 --- a/drivers/staging/lustre/lnet/lnet/api-ni.c +++ b/drivers/staging/lustre/lnet/lnet/api-ni.c @@ -73,8 +73,7 @@ lnet_get_networks(void) int rc; if (*networks != 0 && *ip2nets != 0) { - LCONSOLE_ERROR_MSG(0x101, "Please specify EITHER 'networks' or " - "'ip2nets' but not both at once\n"); + LCONSOLE_ERROR_MSG(0x101, "Please specify EITHER 'networks' or 'ip2nets' but not both at once\n"); return NULL; } @@ -177,7 +176,7 @@ lnet_create_locks(void) return -ENOMEM; } -static void lnet_assert_wire_constants (void) +static void lnet_assert_wire_constants(void) { /* Wire protocol assertions generated by 'wirecheck' * running on Linux robert.bartonsoftware.com 2.6.8-1.521 @@ -185,93 +184,93 @@ static void lnet_assert_wire_constants (void) * with gcc version 3.3.3 20040412 (Red Hat Linux 3.3.3-7) */ /* Constants... */ - CLASSERT (LNET_PROTO_TCP_MAGIC == 0xeebc0ded); - CLASSERT (LNET_PROTO_TCP_VERSION_MAJOR == 1); - CLASSERT (LNET_PROTO_TCP_VERSION_MINOR == 0); - CLASSERT (LNET_MSG_ACK == 0); - CLASSERT (LNET_MSG_PUT == 1); - CLASSERT (LNET_MSG_GET == 2); - CLASSERT (LNET_MSG_REPLY == 3); - CLASSERT (LNET_MSG_HELLO == 4); + CLASSERT(LNET_PROTO_TCP_MAGIC == 0xeebc0ded); + CLASSERT(LNET_PROTO_TCP_VERSION_MAJOR == 1); + CLASSERT(LNET_PROTO_TCP_VERSION_MINOR == 0); + CLASSERT(LNET_MSG_ACK == 0); + CLASSERT(LNET_MSG_PUT == 1); + CLASSERT(LNET_MSG_GET == 2); + CLASSERT(LNET_MSG_REPLY == 3); + CLASSERT(LNET_MSG_HELLO == 4); /* Checks for struct ptl_handle_wire_t */ - CLASSERT ((int)sizeof(lnet_handle_wire_t) == 16); - CLASSERT ((int)offsetof(lnet_handle_wire_t, wh_interface_cookie) == 0); - CLASSERT ((int)sizeof(((lnet_handle_wire_t *)0)->wh_interface_cookie) == 8); - CLASSERT ((int)offsetof(lnet_handle_wire_t, wh_object_cookie) == 8); - CLASSERT ((int)sizeof(((lnet_handle_wire_t *)0)->wh_object_cookie) == 8); + CLASSERT((int)sizeof(lnet_handle_wire_t) == 16); + CLASSERT((int)offsetof(lnet_handle_wire_t, wh_interface_cookie) == 0); + CLASSERT((int)sizeof(((lnet_handle_wire_t *)0)->wh_interface_cookie) == 8); + CLASSERT((int)offsetof(lnet_handle_wire_t, wh_object_cookie) == 8); + CLASSERT((int)sizeof(((lnet_handle_wire_t *)0)->wh_object_cookie) == 8); /* Checks for struct lnet_magicversion_t */ - CLASSERT ((int)sizeof(lnet_magicversion_t) == 8); - CLASSERT ((int)offsetof(lnet_magicversion_t, magic) == 0); - CLASSERT ((int)sizeof(((lnet_magicversion_t *)0)->magic) == 4); - CLASSERT ((int)offsetof(lnet_magicversion_t, version_major) == 4); - CLASSERT ((int)sizeof(((lnet_magicversion_t *)0)->version_major) == 2); - CLASSERT ((int)offsetof(lnet_magicversion_t, version_minor) == 6); - CLASSERT ((int)sizeof(((lnet_magicversion_t *)0)->version_minor) == 2); + CLASSERT((int)sizeof(lnet_magicversion_t) == 8); + CLASSERT((int)offsetof(lnet_magicversion_t, magic) == 0); + CLASSERT((int)sizeof(((lnet_magicversion_t *)0)->magic) == 4); + CLASSERT((int)offsetof(lnet_magicversion_t, version_major) == 4); + CLASSERT((int)sizeof(((lnet_magicversion_t *)0)->version_major) == 2); + CLASSERT((int)offsetof(lnet_magicversion_t, version_minor) == 6); + CLASSERT((int)sizeof(((lnet_magicversion_t *)0)->version_minor) == 2); /* Checks for struct lnet_hdr_t */ - CLASSERT ((int)sizeof(lnet_hdr_t) == 72); - CLASSERT ((int)offsetof(lnet_hdr_t, dest_nid) == 0); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->dest_nid) == 8); - CLASSERT ((int)offsetof(lnet_hdr_t, src_nid) == 8); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->src_nid) == 8); - CLASSERT ((int)offsetof(lnet_hdr_t, dest_pid) == 16); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->dest_pid) == 4); - CLASSERT ((int)offsetof(lnet_hdr_t, src_pid) == 20); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->src_pid) == 4); - CLASSERT ((int)offsetof(lnet_hdr_t, type) == 24); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->type) == 4); - CLASSERT ((int)offsetof(lnet_hdr_t, payload_length) == 28); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->payload_length) == 4); - CLASSERT ((int)offsetof(lnet_hdr_t, msg) == 32); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg) == 40); + CLASSERT((int)sizeof(lnet_hdr_t) == 72); + CLASSERT((int)offsetof(lnet_hdr_t, dest_nid) == 0); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->dest_nid) == 8); + CLASSERT((int)offsetof(lnet_hdr_t, src_nid) == 8); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->src_nid) == 8); + CLASSERT((int)offsetof(lnet_hdr_t, dest_pid) == 16); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->dest_pid) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, src_pid) == 20); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->src_pid) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, type) == 24); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->type) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, payload_length) == 28); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->payload_length) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, msg) == 32); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg) == 40); /* Ack */ - CLASSERT ((int)offsetof(lnet_hdr_t, msg.ack.dst_wmd) == 32); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.ack.dst_wmd) == 16); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.ack.match_bits) == 48); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.ack.match_bits) == 8); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.ack.mlength) == 56); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.ack.mlength) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, msg.ack.dst_wmd) == 32); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.ack.dst_wmd) == 16); + CLASSERT((int)offsetof(lnet_hdr_t, msg.ack.match_bits) == 48); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.ack.match_bits) == 8); + CLASSERT((int)offsetof(lnet_hdr_t, msg.ack.mlength) == 56); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.ack.mlength) == 4); /* Put */ - CLASSERT ((int)offsetof(lnet_hdr_t, msg.put.ack_wmd) == 32); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.put.ack_wmd) == 16); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.put.match_bits) == 48); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.put.match_bits) == 8); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.put.hdr_data) == 56); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.put.hdr_data) == 8); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.put.ptl_index) == 64); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.put.ptl_index) == 4); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.put.offset) == 68); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.put.offset) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, msg.put.ack_wmd) == 32); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.put.ack_wmd) == 16); + CLASSERT((int)offsetof(lnet_hdr_t, msg.put.match_bits) == 48); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.put.match_bits) == 8); + CLASSERT((int)offsetof(lnet_hdr_t, msg.put.hdr_data) == 56); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.put.hdr_data) == 8); + CLASSERT((int)offsetof(lnet_hdr_t, msg.put.ptl_index) == 64); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.put.ptl_index) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, msg.put.offset) == 68); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.put.offset) == 4); /* Get */ - CLASSERT ((int)offsetof(lnet_hdr_t, msg.get.return_wmd) == 32); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.get.return_wmd) == 16); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.get.match_bits) == 48); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.get.match_bits) == 8); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.get.ptl_index) == 56); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.get.ptl_index) == 4); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.get.src_offset) == 60); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.get.src_offset) == 4); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.get.sink_length) == 64); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.get.sink_length) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, msg.get.return_wmd) == 32); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.get.return_wmd) == 16); + CLASSERT((int)offsetof(lnet_hdr_t, msg.get.match_bits) == 48); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.get.match_bits) == 8); + CLASSERT((int)offsetof(lnet_hdr_t, msg.get.ptl_index) == 56); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.get.ptl_index) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, msg.get.src_offset) == 60); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.get.src_offset) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, msg.get.sink_length) == 64); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.get.sink_length) == 4); /* Reply */ - CLASSERT ((int)offsetof(lnet_hdr_t, msg.reply.dst_wmd) == 32); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.reply.dst_wmd) == 16); + CLASSERT((int)offsetof(lnet_hdr_t, msg.reply.dst_wmd) == 32); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.reply.dst_wmd) == 16); /* Hello */ - CLASSERT ((int)offsetof(lnet_hdr_t, msg.hello.incarnation) == 32); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.hello.incarnation) == 8); - CLASSERT ((int)offsetof(lnet_hdr_t, msg.hello.type) == 40); - CLASSERT ((int)sizeof(((lnet_hdr_t *)0)->msg.hello.type) == 4); + CLASSERT((int)offsetof(lnet_hdr_t, msg.hello.incarnation) == 32); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.hello.incarnation) == 8); + CLASSERT((int)offsetof(lnet_hdr_t, msg.hello.type) == 40); + CLASSERT((int)sizeof(((lnet_hdr_t *)0)->msg.hello.type) == 4); } static lnd_t * -lnet_find_lnd_by_type (int type) +lnet_find_lnd_by_type(int type) { lnd_t *lnd; struct list_head *tmp; @@ -288,15 +287,15 @@ lnet_find_lnd_by_type (int type) } void -lnet_register_lnd (lnd_t *lnd) +lnet_register_lnd(lnd_t *lnd) { LNET_MUTEX_LOCK(&the_lnet.ln_lnd_mutex); - LASSERT (the_lnet.ln_init); - LASSERT (libcfs_isknown_lnd(lnd->lnd_type)); - LASSERT (lnet_find_lnd_by_type(lnd->lnd_type) == NULL); + LASSERT(the_lnet.ln_init); + LASSERT(libcfs_isknown_lnd(lnd->lnd_type)); + LASSERT(lnet_find_lnd_by_type(lnd->lnd_type) == NULL); - list_add_tail (&lnd->lnd_list, &the_lnet.ln_lnds); + list_add_tail(&lnd->lnd_list, &the_lnet.ln_lnds); lnd->lnd_refcount = 0; CDEBUG(D_NET, "%s LND registered\n", libcfs_lnd2str(lnd->lnd_type)); @@ -306,15 +305,15 @@ lnet_register_lnd (lnd_t *lnd) EXPORT_SYMBOL(lnet_register_lnd); void -lnet_unregister_lnd (lnd_t *lnd) +lnet_unregister_lnd(lnd_t *lnd) { LNET_MUTEX_LOCK(&the_lnet.ln_lnd_mutex); - LASSERT (the_lnet.ln_init); - LASSERT (lnet_find_lnd_by_type(lnd->lnd_type) == lnd); - LASSERT (lnd->lnd_refcount == 0); + LASSERT(the_lnet.ln_init); + LASSERT(lnet_find_lnd_by_type(lnd->lnd_type) == lnd); + LASSERT(lnd->lnd_refcount == 0); - list_del (&lnd->lnd_list); + list_del(&lnd->lnd_list); CDEBUG(D_NET, "%s LND unregistered\n", libcfs_lnd2str(lnd->lnd_type)); LNET_MUTEX_UNLOCK(&the_lnet.ln_lnd_mutex); @@ -367,35 +366,34 @@ EXPORT_SYMBOL(lnet_counters_reset); #ifdef LNET_USE_LIB_FREELIST int -lnet_freelist_init (lnet_freelist_t *fl, int n, int size) +lnet_freelist_init(lnet_freelist_t *fl, int n, int size) { char *space; - LASSERT (n > 0); + LASSERT(n > 0); - size += offsetof (lnet_freeobj_t, fo_contents); + size += offsetof(lnet_freeobj_t, fo_contents); LIBCFS_ALLOC(space, n * size); if (space == NULL) - return (-ENOMEM); + return -ENOMEM; - INIT_LIST_HEAD (&fl->fl_list); + INIT_LIST_HEAD(&fl->fl_list); fl->fl_objs = space; fl->fl_nobjs = n; fl->fl_objsize = size; - do - { - memset (space, 0, size); - list_add ((struct list_head *)space, &fl->fl_list); + do { + memset(space, 0, size); + list_add((struct list_head *)space, &fl->fl_list); space += size; } while (--n != 0); - return (0); + return 0; } void -lnet_freelist_fini (lnet_freelist_t *fl) +lnet_freelist_fini(lnet_freelist_t *fl) { struct list_head *el; int count; @@ -407,16 +405,16 @@ lnet_freelist_fini (lnet_freelist_t *fl) for (el = fl->fl_list.next; el != &fl->fl_list; el = el->next) count++; - LASSERT (count == fl->fl_nobjs); + LASSERT(count == fl->fl_nobjs); LIBCFS_FREE(fl->fl_objs, fl->fl_nobjs * fl->fl_objsize); - memset (fl, 0, sizeof (*fl)); + memset(fl, 0, sizeof(*fl)); } #endif /* LNET_USE_LIB_FREELIST */ static __u64 -lnet_create_interface_cookie (void) +lnet_create_interface_cookie(void) { /* NB the interface cookie in wire handles guards against delayed * replies and ACKs appearing valid after reboot. Initialisation time, @@ -424,6 +422,7 @@ lnet_create_interface_cookie (void) * easily good enough. */ struct timeval tv; __u64 cookie; + do_gettimeofday(&tv); cookie = tv.tv_sec; cookie *= 1000000; @@ -615,11 +614,11 @@ lnet_prepare(lnet_pid_t requested_pid) struct lnet_res_container **recs; int rc = 0; - LASSERT (the_lnet.ln_refcount == 0); + LASSERT(the_lnet.ln_refcount == 0); the_lnet.ln_routing = 0; - LASSERT ((requested_pid & LNET_PID_USERFLAG) == 0); + LASSERT((requested_pid & LNET_PID_USERFLAG) == 0); the_lnet.ln_pid = requested_pid; INIT_LIST_HEAD(&the_lnet.ln_test_peers); @@ -684,7 +683,7 @@ lnet_prepare(lnet_pid_t requested_pid) } int -lnet_unprepare (void) +lnet_unprepare(void) { /* NB no LNET_LOCK since this is the last reference. All LND instances * have shut down already, so it is safe to unlink and free all @@ -875,7 +874,7 @@ lnet_islocalnid(lnet_nid_t nid) } int -lnet_count_acceptor_nis (void) +lnet_count_acceptor_nis(void) { /* Return the # of NIs that need the acceptor. */ int count = 0; @@ -914,7 +913,7 @@ lnet_ni_tq_credits(lnet_ni_t *ni) } static void -lnet_shutdown_lndnis (void) +lnet_shutdown_lndnis(void) { int i; int islo; @@ -1004,7 +1003,7 @@ lnet_shutdown_lndnis (void) islo = ni->ni_lnd->lnd_type == LOLND; - LASSERT (!in_interrupt ()); + LASSERT(!in_interrupt()); (ni->ni_lnd->lnd_shutdown)(ni); /* can't deref lnd anymore now; it might have unregistered @@ -1031,7 +1030,7 @@ lnet_shutdown_lndnis (void) } static int -lnet_startup_lndnis (void) +lnet_startup_lndnis(void) { lnd_t *lnd; struct lnet_ni *ni; @@ -1056,7 +1055,7 @@ lnet_startup_lndnis (void) ni = list_entry(nilist.next, lnet_ni_t, ni_list); lnd_type = LNET_NETTYP(LNET_NIDNET(ni->ni_nid)); - LASSERT (libcfs_isknown_lnd(lnd_type)); + LASSERT(libcfs_isknown_lnd(lnd_type)); if (lnd_type == CIBLND || lnd_type == OPENIBLND || @@ -1097,8 +1096,7 @@ lnet_startup_lndnis (void) LNET_MUTEX_UNLOCK(&the_lnet.ln_lnd_mutex); if (rc != 0) { - LCONSOLE_ERROR_MSG(0x105, "Error %d starting up LNI %s" - "\n", + LCONSOLE_ERROR_MSG(0x105, "Error %d starting up LNI %s\n", rc, libcfs_lnd2str(lnd->lnd_type)); lnet_net_lock(LNET_LOCK_EX); lnd->lnd_refcount--; @@ -1106,7 +1104,7 @@ lnet_startup_lndnis (void) goto failed; } - LASSERT (ni->ni_peertimeout <= 0 || lnd->lnd_query != NULL); + LASSERT(ni->ni_peertimeout <= 0 || lnd->lnd_query != NULL); list_del(&ni->ni_list); @@ -1124,7 +1122,7 @@ lnet_startup_lndnis (void) if (lnd->lnd_type == LOLND) { lnet_ni_addref(ni); - LASSERT (the_lnet.ln_loni == NULL); + LASSERT(the_lnet.ln_loni == NULL); the_lnet.ln_loni = ni; continue; } @@ -1154,8 +1152,7 @@ lnet_startup_lndnis (void) if (the_lnet.ln_eq_waitni != NULL && nicount > 1) { lnd_type = the_lnet.ln_eq_waitni->ni_lnd->lnd_type; - LCONSOLE_ERROR_MSG(0x109, "LND %s can only run single-network" - "\n", + LCONSOLE_ERROR_MSG(0x109, "LND %s can only run single-network\n", libcfs_lnd2str(lnd_type)); goto failed; } @@ -1201,8 +1198,7 @@ LNetInit(void) LASSERT(the_lnet.ln_cpt_number > 0); if (the_lnet.ln_cpt_number > LNET_CPT_MAX) { /* we are under risk of consuming all lh_cookie */ - CERROR("Can't have %d CPTs for LNet (max allowed is %d), " - "please change setting of CPT-table and retry\n", + CERROR("Can't have %d CPTs for LNet (max allowed is %d), please change setting of CPT-table and retry\n", the_lnet.ln_cpt_number, LNET_CPT_MAX); return -1; } @@ -1289,7 +1285,7 @@ LNetNIInit(lnet_pid_t requested_pid) LNET_MUTEX_LOCK(&the_lnet.ln_api_mutex); - LASSERT (the_lnet.ln_init); + LASSERT(the_lnet.ln_init); CDEBUG(D_OTHER, "refs %d\n", the_lnet.ln_refcount); if (the_lnet.ln_refcount > 0) { @@ -1356,7 +1352,7 @@ LNetNIInit(lnet_pid_t requested_pid) failed1: lnet_unprepare(); failed0: - LASSERT (rc < 0); + LASSERT(rc < 0); out: LNET_MUTEX_UNLOCK(&the_lnet.ln_api_mutex); return rc; @@ -1377,13 +1373,13 @@ LNetNIFini(void) { LNET_MUTEX_LOCK(&the_lnet.ln_api_mutex); - LASSERT (the_lnet.ln_init); - LASSERT (the_lnet.ln_refcount > 0); + LASSERT(the_lnet.ln_init); + LASSERT(the_lnet.ln_refcount > 0); if (the_lnet.ln_refcount != 1) { the_lnet.ln_refcount--; } else { - LASSERT (!the_lnet.ln_niinit_self); + LASSERT(!the_lnet.ln_niinit_self); lnet_proc_fini(); lnet_router_checker_stop(); @@ -1424,8 +1420,8 @@ LNetCtl(unsigned int cmd, void *arg) lnet_ni_t *ni; int rc; - LASSERT (the_lnet.ln_init); - LASSERT (the_lnet.ln_refcount > 0); + LASSERT(the_lnet.ln_init); + LASSERT(the_lnet.ln_refcount > 0); switch (cmd) { case IOC_LIBCFS_GET_NI: @@ -1595,7 +1591,7 @@ lnet_create_ping_info(void) if (rc == -ENOENT) break; - LASSERT (rc == 0); + LASSERT(rc == 0); } infosz = offsetof(lnet_ping_info_t, pi_ni[n]); @@ -1614,7 +1610,7 @@ lnet_create_ping_info(void) lnet_ni_status_t *ns = &pinfo->pi_ni[i]; rc = LNetGetId(i, &id); - LASSERT (rc == 0); + LASSERT(rc == 0); ns->ns_nid = id.nid; ns->ns_status = LNET_NI_STATUS_UP; @@ -1718,10 +1714,10 @@ lnet_ping_target_init(void) failed_2: rc2 = LNetMEUnlink(meh); - LASSERT (rc2 == 0); + LASSERT(rc2 == 0); failed_1: rc2 = LNetEQFree(the_lnet.ln_ping_target_eq); - LASSERT (rc2 == 0); + LASSERT(rc2 == 0); failed_0: lnet_destroy_ping_info(); return rc; @@ -1744,7 +1740,7 @@ lnet_ping_target_fini(void) timeout_ms, &event, &which); /* I expect overflow... */ - LASSERT (rc >= 0 || rc == -EOVERFLOW); + LASSERT(rc >= 0 || rc == -EOVERFLOW); if (rc == 0) { /* timed out: provide a diagnostic */ @@ -1759,13 +1755,13 @@ lnet_ping_target_fini(void) } rc = LNetEQFree(the_lnet.ln_ping_target_eq); - LASSERT (rc == 0); + LASSERT(rc == 0); lnet_destroy_ping_info(); cfs_restore_sigs(blocked); } int -lnet_ping (lnet_process_id_t id, int timeout_ms, lnet_process_id_t *ids, int n_ids) +lnet_ping(lnet_process_id_t id, int timeout_ms, lnet_process_id_t *ids, int n_ids) { lnet_handle_eq_t eqh; lnet_handle_md_t mdh; @@ -1827,7 +1823,7 @@ lnet_ping (lnet_process_id_t id, int timeout_ms, lnet_process_id_t *ids, int n_i /* Don't CERROR; this could be deliberate! */ rc2 = LNetMDUnlink(mdh); - LASSERT (rc2 == 0); + LASSERT(rc2 == 0); /* NB must wait for the UNLINK event below... */ unlinked = 1; @@ -1849,7 +1845,7 @@ lnet_ping (lnet_process_id_t id, int timeout_ms, lnet_process_id_t *ids, int n_i (rc2 <= 0) ? -1 : event.status, (rc2 > 0 && event.unlinked) ? " unlinked" : ""); - LASSERT (rc2 != -EOVERFLOW); /* can't miss anything */ + LASSERT(rc2 != -EOVERFLOW); /* can't miss anything */ if (rc2 <= 0 || event.status != 0) { /* timeout or error */ @@ -1885,7 +1881,7 @@ lnet_ping (lnet_process_id_t id, int timeout_ms, lnet_process_id_t *ids, int n_i } nob = rc; - LASSERT (nob >= 0 && nob <= infosz); + LASSERT(nob >= 0 && nob <= infosz); rc = -EPROTO; /* if I can't parse... */ @@ -1940,7 +1936,7 @@ lnet_ping (lnet_process_id_t id, int timeout_ms, lnet_process_id_t *ids, int n_i rc2 = LNetEQFree(eqh); if (rc2 != 0) CERROR("rc2 %d\n", rc2); - LASSERT (rc2 == 0); + LASSERT(rc2 == 0); out_0: LIBCFS_FREE(info, infosz); diff --git a/drivers/staging/lustre/lnet/lnet/config.c b/drivers/staging/lustre/lnet/lnet/config.c index 7c8b9476bfbb..af171e25a5ec 100644 --- a/drivers/staging/lustre/lnet/lnet/config.c +++ b/drivers/staging/lustre/lnet/lnet/config.c @@ -47,7 +47,7 @@ static int lnet_tbnob; /* track text buf allocation */ #define LNET_MAX_TEXTBUF_NOB (64<<10) /* bound allocation */ #define LNET_SINGLE_TEXTBUF_NOB (4<<10) -void +static void lnet_syntax(char *name, char *str, int offset, int width) { static char dots[LNET_SINGLE_TEXTBUF_NOB]; @@ -64,7 +64,7 @@ lnet_syntax(char *name, char *str, int offset, int width) (width < 1) ? 0 : width - 1, dashes); } -int +static int lnet_issep(char c) { switch (c) { @@ -77,7 +77,7 @@ lnet_issep(char c) } } -int +static int lnet_net_unique(__u32 net, struct list_head *nilist) { struct list_head *tmp; @@ -108,7 +108,7 @@ lnet_ni_free(struct lnet_ni *ni) LIBCFS_FREE(ni, sizeof(*ni)); } -lnet_ni_t * +static lnet_ni_t * lnet_ni_alloc(__u32 net, struct cfs_expr_list *el, struct list_head *nilist) { struct lnet_tx_queue *tq; @@ -365,7 +365,7 @@ lnet_parse_networks(struct list_head *nilist, char *networks) return -EINVAL; } -lnet_text_buf_t * +static lnet_text_buf_t * lnet_new_text_buf(int str_len) { lnet_text_buf_t *ltb; @@ -394,14 +394,14 @@ lnet_new_text_buf(int str_len) return ltb; } -void +static void lnet_free_text_buf(lnet_text_buf_t *ltb) { lnet_tbnob -= ltb->ltb_size; LIBCFS_FREE(ltb, ltb->ltb_size); } -void +static void lnet_free_text_bufs(struct list_head *tbs) { lnet_text_buf_t *ltb; @@ -414,22 +414,7 @@ lnet_free_text_bufs(struct list_head *tbs) } } -void -lnet_print_text_bufs(struct list_head *tbs) -{ - struct list_head *tmp; - lnet_text_buf_t *ltb; - - list_for_each(tmp, tbs) { - ltb = list_entry(tmp, lnet_text_buf_t, ltb_list); - - CDEBUG(D_WARNING, "%s\n", ltb->ltb_text); - } - - CDEBUG(D_WARNING, "%d allocated\n", lnet_tbnob); -} - -int +static int lnet_str2tbs_sep(struct list_head *tbs, char *str) { struct list_head pending; @@ -487,7 +472,7 @@ lnet_str2tbs_sep(struct list_head *tbs, char *str) return 0; } -int +static int lnet_expand1tb(struct list_head *list, char *str, char *sep1, char *sep2, char *item, int itemlen) @@ -512,7 +497,7 @@ lnet_expand1tb(struct list_head *list, return 0; } -int +static int lnet_str2tbs_expand(struct list_head *tbs, char *str) { char num[16]; @@ -592,7 +577,7 @@ lnet_str2tbs_expand(struct list_head *tbs, char *str) return -1; } -int +static int lnet_parse_hops(char *str, unsigned int *hops) { int len = strlen(str); @@ -605,7 +590,7 @@ lnet_parse_hops(char *str, unsigned int *hops) #define LNET_PRIORITY_SEPARATOR (':') -int +static int lnet_parse_priority(char *str, unsigned int *priority, char **token) { int nob; @@ -635,7 +620,7 @@ lnet_parse_priority(char *str, unsigned int *priority, char **token) return 0; } -int +static int lnet_parse_route(char *str, int *im_a_router) { /* static scratch buffer OK (single threaded) */ @@ -778,7 +763,7 @@ lnet_parse_route(char *str, int *im_a_router) return myrc; } -int +static int lnet_parse_route_tbs(struct list_head *tbs, int *im_a_router) { lnet_text_buf_t *ltb; @@ -819,7 +804,7 @@ lnet_parse_routes(char *routes, int *im_a_router) return rc; } -int +static int lnet_match_network_token(char *token, int len, __u32 *ipaddrs, int nip) { LIST_HEAD(list); @@ -838,7 +823,7 @@ lnet_match_network_token(char *token, int len, __u32 *ipaddrs, int nip) return rc; } -int +static int lnet_match_network_tokens(char *net_entry, __u32 *ipaddrs, int nip) { static char tokens[LNET_SINGLE_TEXTBUF_NOB]; @@ -895,7 +880,7 @@ lnet_match_network_tokens(char *net_entry, __u32 *ipaddrs, int nip) return 1; } -__u32 +static __u32 lnet_netspec2net(char *netspec) { char *bracket = strchr(netspec, '('); @@ -912,7 +897,7 @@ lnet_netspec2net(char *netspec) return net; } -int +static int lnet_splitnets(char *source, struct list_head *nets) { int offset = 0; @@ -992,7 +977,7 @@ lnet_splitnets(char *source, struct list_head *nets) } } -int +static int lnet_match_networks(char **networksp, char *ip2nets, __u32 *ipaddrs, int nip) { static char networks[LNET_SINGLE_TEXTBUF_NOB]; @@ -1112,13 +1097,13 @@ lnet_match_networks(char **networksp, char *ip2nets, __u32 *ipaddrs, int nip) return count; } -void +static void lnet_ipaddr_free_enumeration(__u32 *ipaddrs, int nip) { LIBCFS_FREE(ipaddrs, nip * sizeof(*ipaddrs)); } -int +static int lnet_ipaddr_enumerate(__u32 **ipaddrsp) { int up; @@ -1187,7 +1172,7 @@ lnet_ipaddr_enumerate(__u32 **ipaddrsp) int lnet_parse_ip2nets(char **networksp, char *ip2nets) { - __u32 *ipaddrs; + __u32 *ipaddrs = NULL; int nip = lnet_ipaddr_enumerate(&ipaddrs); int rc; diff --git a/drivers/staging/lustre/lnet/lnet/lib-eq.c b/drivers/staging/lustre/lnet/lnet/lib-eq.c index bd45478e9948..863cc3735edf 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-eq.c +++ b/drivers/staging/lustre/lnet/lnet/lib-eq.c @@ -72,8 +72,8 @@ LNetEQAlloc(unsigned int count, lnet_eq_handler_t callback, { lnet_eq_t *eq; - LASSERT (the_lnet.ln_init); - LASSERT (the_lnet.ln_refcount > 0); + LASSERT(the_lnet.ln_init); + LASSERT(the_lnet.ln_refcount > 0); /* We need count to be a power of 2 so that when eq_{enq,deq}_seq * overflow, they don't skip entries, so the queue has the same @@ -82,10 +82,7 @@ LNetEQAlloc(unsigned int count, lnet_eq_handler_t callback, count = cfs_power2_roundup(count); if (callback != LNET_EQ_HANDLER_NONE && count != 0) { - CWARN("EQ callback is guaranteed to get every event, " - "do you still want to set eqcount %d for polling " - "event which will have locking overhead? " - "Please contact with developer to confirm\n", count); + CWARN("EQ callback is guaranteed to get every event, do you still want to set eqcount %d for polling event which will have locking overhead? Please contact with developer to confirm\n", count); } /* count can be 0 if only need callback, we can eliminate @@ -287,7 +284,7 @@ lnet_eq_dequeue_event(lnet_eq_t *eq, lnet_event_t *ev) * EQ has been dropped due to limited space in the EQ. */ int -LNetEQGet (lnet_handle_eq_t eventq, lnet_event_t *event) +LNetEQGet(lnet_handle_eq_t eventq, lnet_event_t *event) { int which; @@ -313,7 +310,7 @@ EXPORT_SYMBOL(LNetEQGet); * EQ has been dropped due to limited space in the EQ. */ int -LNetEQWait (lnet_handle_eq_t eventq, lnet_event_t *event) +LNetEQWait(lnet_handle_eq_t eventq, lnet_event_t *event) { int which; @@ -400,8 +397,8 @@ LNetEQPoll(lnet_handle_eq_t *eventqs, int neq, int timeout_ms, int rc; int i; - LASSERT (the_lnet.ln_init); - LASSERT (the_lnet.ln_refcount > 0); + LASSERT(the_lnet.ln_init); + LASSERT(the_lnet.ln_refcount > 0); if (neq < 1) return -ENOENT; diff --git a/drivers/staging/lustre/lnet/lnet/lib-md.c b/drivers/staging/lustre/lnet/lnet/lib-md.c index 1f386e09b530..e4d906a65635 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-md.c +++ b/drivers/staging/lustre/lnet/lnet/lib-md.c @@ -52,7 +52,8 @@ lnet_md_unlink(lnet_libmd_t *md) md->md_flags |= LNET_MD_FLAG_ZOMBIE; - /* Disassociate from ME (if any), and unlink it if it was created + /* Disassociate from ME (if any), + * and unlink it if it was created * with LNET_UNLINK */ if (me != NULL) { /* detach MD from portal */ @@ -109,11 +110,12 @@ lnet_md_build(lnet_libmd_t *lmd, lnet_md_t *umd, int unlink) lmd->md_niov = niov = umd->length; memcpy(lmd->md_iov.iov, umd->start, - niov * sizeof (lmd->md_iov.iov[0])); + niov * sizeof(lmd->md_iov.iov[0])); for (i = 0; i < (int)niov; i++) { /* We take the base address on trust */ - if (lmd->md_iov.iov[i].iov_len <= 0) /* invalid length */ + /* invalid length */ + if (lmd->md_iov.iov[i].iov_len <= 0) return -EINVAL; total_length += lmd->md_iov.iov[i].iov_len; @@ -123,18 +125,18 @@ lnet_md_build(lnet_libmd_t *lmd, lnet_md_t *umd, int unlink) if ((umd->options & LNET_MD_MAX_SIZE) != 0 && /* max size used */ (umd->max_size < 0 || - umd->max_size > total_length)) // illegal max_size + umd->max_size > total_length)) /* illegal max_size */ return -EINVAL; } else if ((umd->options & LNET_MD_KIOV) != 0) { lmd->md_niov = niov = umd->length; memcpy(lmd->md_iov.kiov, umd->start, - niov * sizeof (lmd->md_iov.kiov[0])); + niov * sizeof(lmd->md_iov.kiov[0])); for (i = 0; i < (int)niov; i++) { /* We take the page pointer on trust */ if (lmd->md_iov.kiov[i].kiov_offset + - lmd->md_iov.kiov[i].kiov_len > PAGE_CACHE_SIZE ) + lmd->md_iov.kiov[i].kiov_len > PAGE_CACHE_SIZE) return -EINVAL; /* invalid length */ total_length += lmd->md_iov.kiov[i].kiov_len; @@ -144,7 +146,7 @@ lnet_md_build(lnet_libmd_t *lmd, lnet_md_t *umd, int unlink) if ((umd->options & LNET_MD_MAX_SIZE) != 0 && /* max size used */ (umd->max_size < 0 || - umd->max_size > total_length)) // illegal max_size + umd->max_size > total_length)) /* illegal max_size */ return -EINVAL; } else { /* contiguous */ lmd->md_length = umd->length; @@ -154,7 +156,7 @@ lnet_md_build(lnet_libmd_t *lmd, lnet_md_t *umd, int unlink) if ((umd->options & LNET_MD_MAX_SIZE) != 0 && /* max size used */ (umd->max_size < 0 || - umd->max_size > (int)umd->length)) // illegal max_size + umd->max_size > (int)umd->length)) /* illegal max_size */ return -EINVAL; } @@ -206,7 +208,8 @@ lnet_md_deconstruct(lnet_libmd_t *lmd, lnet_md_t *umd) * and that's all. */ umd->start = lmd->md_start; - umd->length = ((lmd->md_options & (LNET_MD_IOVEC | LNET_MD_KIOV)) == 0) ? + umd->length = ((lmd->md_options & + (LNET_MD_IOVEC | LNET_MD_KIOV)) == 0) ? lmd->md_length : lmd->md_niov; umd->threshold = lmd->md_threshold; umd->max_size = lmd->md_max_size; @@ -263,15 +266,15 @@ int LNetMDAttach(lnet_handle_me_t meh, lnet_md_t umd, lnet_unlink_t unlink, lnet_handle_md_t *handle) { - LIST_HEAD (matches); - LIST_HEAD (drops); + LIST_HEAD(matches); + LIST_HEAD(drops); struct lnet_me *me; struct lnet_libmd *md; int cpt; int rc; - LASSERT (the_lnet.ln_init); - LASSERT (the_lnet.ln_refcount > 0); + LASSERT(the_lnet.ln_init); + LASSERT(the_lnet.ln_refcount > 0); if (lnet_md_validate(&umd) != 0) return -EINVAL; @@ -347,8 +350,8 @@ LNetMDBind(lnet_md_t umd, lnet_unlink_t unlink, lnet_handle_md_t *handle) int cpt; int rc; - LASSERT (the_lnet.ln_init); - LASSERT (the_lnet.ln_refcount > 0); + LASSERT(the_lnet.ln_init); + LASSERT(the_lnet.ln_refcount > 0); if (lnet_md_validate(&umd) != 0) return -EINVAL; @@ -416,7 +419,7 @@ EXPORT_SYMBOL(LNetMDBind); * \retval -ENOENT If \a mdh does not point to a valid MD object. */ int -LNetMDUnlink (lnet_handle_md_t mdh) +LNetMDUnlink(lnet_handle_md_t mdh) { lnet_event_t ev; lnet_libmd_t *md; diff --git a/drivers/staging/lustre/lnet/lnet/lib-ptl.c b/drivers/staging/lustre/lnet/lnet/lib-ptl.c index 91767c9e15dd..720c73be4d3c 100644 --- a/drivers/staging/lustre/lnet/lnet/lib-ptl.c +++ b/drivers/staging/lustre/lnet/lnet/lib-ptl.c @@ -712,7 +712,7 @@ lnet_ptl_attach_md(lnet_me_t *me, lnet_libmd_t *md, lnet_ptl_unlock(ptl); } -void +static void lnet_ptl_cleanup(struct lnet_portal *ptl) { struct lnet_match_table *mtable; @@ -750,7 +750,7 @@ lnet_ptl_cleanup(struct lnet_portal *ptl) ptl->ptl_mtables = NULL; } -int +static int lnet_ptl_setup(struct lnet_portal *ptl, int index) { struct lnet_match_table *mtable; diff --git a/drivers/staging/lustre/lnet/lnet/router.c b/drivers/staging/lustre/lnet/lnet/router.c index ac38ad271071..b5b8fb576bfb 100644 --- a/drivers/staging/lustre/lnet/lnet/router.c +++ b/drivers/staging/lustre/lnet/lnet/router.c @@ -321,7 +321,7 @@ lnet_add_route(__u32 net, unsigned int hops, lnet_nid_t gateway, LNET_NETTYP(net) == LOLND || LNET_NIDNET(gateway) == net || hops < 1 || hops > 255) - return (-EINVAL); + return -EINVAL; if (lnet_islocalnet(net)) /* it's a local network */ return 0; /* ignore the route entry */ diff --git a/drivers/staging/lustre/lnet/lnet/router_proc.c b/drivers/staging/lustre/lnet/lnet/router_proc.c index 166c1e647e2b..6e8f7e2bbcfc 100644 --- a/drivers/staging/lustre/lnet/lnet/router_proc.c +++ b/drivers/staging/lustre/lnet/lnet/router_proc.c @@ -90,9 +90,10 @@ enum { #define LNET_PROC_VERSION(v) ((unsigned int)((v) & LNET_PROC_VER_MASK)) -static int proc_call_handler(void *data, int write, loff_t *ppos, void *buffer, - size_t *lenp, int (*handler)(void *data, int write, - loff_t pos, void *buffer, int len)) +static int proc_call_handler(void *data, int write, loff_t *ppos, + void __user *buffer, size_t *lenp, + int (*handler)(void *data, int write, + loff_t pos, void __user *buffer, int len)) { int rc = handler(data, write, *ppos, buffer, *lenp); @@ -109,7 +110,7 @@ static int proc_call_handler(void *data, int write, loff_t *ppos, void *buffer, } static int __proc_lnet_stats(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { int rc; lnet_counters_t *ctrs; @@ -592,7 +593,7 @@ int proc_lnet_peers(struct ctl_table *table, int write, void __user *buffer, } static int __proc_lnet_buffers(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { char *s; char *tmpstr; @@ -815,7 +816,7 @@ static struct lnet_portal_rotors portal_rotors[] = { extern int portal_rotor; static int __proc_lnet_portal_rotor(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { const int buf_len = 128; char *buf; diff --git a/drivers/staging/lustre/lnet/selftest/brw_test.c b/drivers/staging/lustre/lnet/selftest/brw_test.c index bcce919c0433..a94f336d578c 100644 --- a/drivers/staging/lustre/lnet/selftest/brw_test.c +++ b/drivers/staging/lustre/lnet/selftest/brw_test.c @@ -66,7 +66,7 @@ brw_client_fini(sfw_test_instance_t *tsi) } } -int +static int brw_client_init(sfw_test_instance_t *tsi) { sfw_session_t *sn = tsi->tsi_batch->bat_session; @@ -131,7 +131,7 @@ brw_client_init(sfw_test_instance_t *tsi) #define BRW_MAGIC 0xeeb0eeb1eeb2eeb3ULL #define BRW_MSIZE sizeof(__u64) -int +static int brw_inject_one_error(void) { struct timeval tv; @@ -147,7 +147,7 @@ brw_inject_one_error(void) return brw_inject_errors--; } -void +static void brw_fill_page(struct page *pg, int pattern, __u64 magic) { char *addr = page_address(pg); @@ -178,7 +178,7 @@ brw_fill_page(struct page *pg, int pattern, __u64 magic) return; } -int +static int brw_check_page(struct page *pg, int pattern, __u64 magic) { char *addr = page_address(pg); @@ -221,7 +221,7 @@ bad_data: return 1; } -void +static void brw_fill_bulk(srpc_bulk_t *bk, int pattern, __u64 magic) { int i; diff --git a/drivers/staging/lustre/lnet/selftest/console.c b/drivers/staging/lustre/lnet/selftest/console.c index 89e1b4bd5a50..5dad9f1f9462 100644 --- a/drivers/staging/lustre/lnet/selftest/console.c +++ b/drivers/staging/lustre/lnet/selftest/console.c @@ -910,7 +910,7 @@ lstcon_batch_list(int index, int len, char *name_up) list_for_each_entry(bat, &console_session.ses_bat_list, bat_link) { if (index-- == 0) { - return copy_to_user(name_up,bat->bat_name, len) ? + return copy_to_user(name_up, bat->bat_name, len) ? -EFAULT: 0; } } @@ -1977,7 +1977,7 @@ out: } srpc_service_t lstcon_acceptor_service; -void lstcon_init_acceptor_service(void) +static void lstcon_init_acceptor_service(void) { /* initialize selftest console acceptor service table */ lstcon_acceptor_service.sv_name = "join session"; diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c index 7e83dff2fcb4..df04ab7de835 100644 --- a/drivers/staging/lustre/lnet/selftest/framework.c +++ b/drivers/staging/lustre/lnet/selftest/framework.c @@ -1286,7 +1286,7 @@ sfw_handle_server_rpc(struct srpc_server_rpc *rpc) goto out; } - switch(sv->sv_id) { + switch (sv->sv_id) { default: LBUG (); case SRPC_SERVICE_TEST: @@ -1592,8 +1592,7 @@ sfw_post_rpc (srpc_client_rpc_t *rpc) return; } -static srpc_service_t sfw_services[] = -{ +static srpc_service_t sfw_services[] = { { /* sv_id */ SRPC_SERVICE_DEBUG, /* sv_name */ "debug", diff --git a/drivers/staging/lustre/lustre/Makefile b/drivers/staging/lustre/lustre/Makefile index d1eb0bdef06b..35d8b0b2dff4 100644 --- a/drivers/staging/lustre/lustre/Makefile +++ b/drivers/staging/lustre/lustre/Makefile @@ -1,2 +1,2 @@ -obj-$(CONFIG_LUSTRE_FS) += libcfs/ lvfs/ obdclass/ ptlrpc/ fld/ osc/ mgc/ \ +obj-$(CONFIG_LUSTRE_FS) += libcfs/ obdclass/ ptlrpc/ fld/ osc/ mgc/ \ fid/ lov/ mdc/ lmv/ llite/ obdecho/ diff --git a/drivers/staging/lustre/lustre/fid/fid_request.c b/drivers/staging/lustre/lustre/fid/fid_request.c index 992d07591b08..64b1d80c64b0 100644 --- a/drivers/staging/lustre/lustre/fid/fid_request.c +++ b/drivers/staging/lustre/lustre/fid/fid_request.c @@ -113,7 +113,7 @@ static int seq_client_rpc(struct lu_client_seq *seq, if (seq->lcs_type == LUSTRE_SEQ_METADATA) mdc_put_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL); if (rc) - GOTO(out_req, rc); + goto out_req; out = req_capsule_server_get(&req->rq_pill, &RMF_SEQ_RANGE); *output = *out; @@ -121,13 +121,15 @@ static int seq_client_rpc(struct lu_client_seq *seq, if (!range_is_sane(output)) { CERROR("%s: Invalid range received from server: " DRANGE"\n", seq->lcs_name, PRANGE(output)); - GOTO(out_req, rc = -EINVAL); + rc = -EINVAL; + goto out_req; } if (range_is_exhausted(output)) { CERROR("%s: Range received from server is exhausted: " DRANGE"]\n", seq->lcs_name, PRANGE(output)); - GOTO(out_req, rc = -EINVAL); + rc = -EINVAL; + goto out_req; } CDEBUG_LIMIT(debug_mask, "%s: Allocated %s-sequence "DRANGE"]\n", @@ -187,7 +189,7 @@ static int seq_client_alloc_meta(const struct lu_env *env, /* Allocate new sequence for client. */ static int seq_client_alloc_seq(const struct lu_env *env, - struct lu_client_seq *seq, seqno_t *seqnr) + struct lu_client_seq *seq, u64 *seqnr) { int rc; @@ -249,7 +251,7 @@ static void seq_fid_alloc_fini(struct lu_client_seq *seq) * Allocate the whole seq to the caller. **/ int seq_client_get_seq(const struct lu_env *env, - struct lu_client_seq *seq, seqno_t *seqnr) + struct lu_client_seq *seq, u64 *seqnr) { wait_queue_t link; int rc; @@ -313,7 +315,7 @@ int seq_client_alloc_fid(const struct lu_env *env, seq->lcs_fid.f_oid = seq->lcs_width; while (1) { - seqno_t seqnr; + u64 seqnr; if (!fid_is_zero(&seq->lcs_fid) && fid_oid(&seq->lcs_fid) < seq->lcs_width) { @@ -430,7 +432,7 @@ static int seq_client_proc_init(struct lu_client_seq *seq) if (rc) { CERROR("%s: Can't init sequence manager proc, rc %d\n", seq->lcs_name, rc); - GOTO(out_cleanup, rc); + goto out_cleanup; } return 0; @@ -508,8 +510,10 @@ int client_fid_init(struct obd_device *obd, return -ENOMEM; OBD_ALLOC(prefix, MAX_OBD_NAME + 5); - if (prefix == NULL) - GOTO(out_free_seq, rc = -ENOMEM); + if (prefix == NULL) { + rc = -ENOMEM; + goto out_free_seq; + } snprintf(prefix, MAX_OBD_NAME + 5, "cli-%s", obd->obd_name); @@ -517,7 +521,7 @@ int client_fid_init(struct obd_device *obd, rc = seq_client_init(cli->cl_seq, exp, type, prefix, NULL); OBD_FREE(prefix, MAX_OBD_NAME + 5); if (rc) - GOTO(out_free_seq, rc); + goto out_free_seq; return rc; out_free_seq: diff --git a/drivers/staging/lustre/lustre/fid/lproc_fid.c b/drivers/staging/lustre/lustre/fid/lproc_fid.c index 92a27fa9667c..6a21f078fefa 100644 --- a/drivers/staging/lustre/lustre/fid/lproc_fid.c +++ b/drivers/staging/lustre/lustre/fid/lproc_fid.c @@ -48,7 +48,6 @@ #include "../include/obd.h" #include "../include/obd_class.h" #include "../include/dt_object.h" -#include "../include/md_object.h" #include "../include/obd_support.h" #include "../include/lustre_req_layout.h" #include "../include/lustre_fid.h" @@ -84,8 +83,8 @@ static int lprocfs_fid_write_common(const char __user *buffer, size_t count, /* of the form "[0x0000000240000400 - 0x000000028000400]" */ rc = sscanf(kernbuf, "[%llx - %llx]\n", - (long long unsigned *)&tmp.lsr_start, - (long long unsigned *)&tmp.lsr_end); + (unsigned long long *)&tmp.lsr_start, + (unsigned long long *)&tmp.lsr_end); if (!range_is_sane(&tmp) || range_is_zero(&tmp) || tmp.lsr_start < range->lsr_start || tmp.lsr_end > range->lsr_end) return -EINVAL; diff --git a/drivers/staging/lustre/lustre/fld/fld_cache.c b/drivers/staging/lustre/lustre/fld/fld_cache.c index 759a233a7028..5d95d0b358b8 100644 --- a/drivers/staging/lustre/lustre/fld/fld_cache.c +++ b/drivers/staging/lustre/lustre/fld/fld_cache.c @@ -54,7 +54,6 @@ #include "../include/lprocfs_status.h" #include "../include/dt_object.h" -#include "../include/md_object.h" #include "../include/lustre_req_layout.h" #include "../include/lustre_fld.h" #include "fld_internal.h" @@ -263,8 +262,8 @@ void fld_cache_punch_hole(struct fld_cache *cache, struct fld_cache_entry *f_new) { const struct lu_seq_range *range = &f_new->fce_range; - const seqno_t new_start = range->lsr_start; - const seqno_t new_end = range->lsr_end; + const u64 new_start = range->lsr_start; + const u64 new_end = range->lsr_end; struct fld_cache_entry *fldt; OBD_ALLOC_GFP(fldt, sizeof(*fldt), GFP_ATOMIC); @@ -302,9 +301,9 @@ static void fld_cache_overlap_handle(struct fld_cache *cache, struct fld_cache_entry *f_new) { const struct lu_seq_range *range = &f_new->fce_range; - const seqno_t new_start = range->lsr_start; - const seqno_t new_end = range->lsr_end; - const mdsno_t mdt = range->lsr_index; + const u64 new_start = range->lsr_start; + const u64 new_end = range->lsr_end; + const u32 mdt = range->lsr_index; /* this is overlap case, these case are checking overlapping with * prev range only. fixup will handle overlapping with next range. */ @@ -386,8 +385,8 @@ int fld_cache_insert_nolock(struct fld_cache *cache, struct fld_cache_entry *n; struct list_head *head; struct list_head *prev = NULL; - const seqno_t new_start = f_new->fce_range.lsr_start; - const seqno_t new_end = f_new->fce_range.lsr_end; + const u64 new_start = f_new->fce_range.lsr_start; + const u64 new_end = f_new->fce_range.lsr_end; __u32 new_flags = f_new->fce_range.lsr_flags; /* @@ -516,7 +515,7 @@ struct fld_cache_entry * lookup \a seq sequence for range in fld cache. */ int fld_cache_lookup(struct fld_cache *cache, - const seqno_t seq, struct lu_seq_range *range) + const u64 seq, struct lu_seq_range *range) { struct fld_cache_entry *flde; struct fld_cache_entry *prev = NULL; diff --git a/drivers/staging/lustre/lustre/fld/fld_internal.h b/drivers/staging/lustre/lustre/fld/fld_internal.h index 5da0c1da0d39..8806b6096953 100644 --- a/drivers/staging/lustre/lustre/fld/fld_internal.h +++ b/drivers/staging/lustre/lustre/fld/fld_internal.h @@ -167,7 +167,7 @@ void fld_cache_delete(struct fld_cache *cache, void fld_cache_delete_nolock(struct fld_cache *cache, const struct lu_seq_range *range); int fld_cache_lookup(struct fld_cache *cache, - const seqno_t seq, struct lu_seq_range *range); + const u64 seq, struct lu_seq_range *range); struct fld_cache_entry* fld_cache_entry_lookup(struct fld_cache *cache, struct lu_seq_range *range); diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index 8e512f9c3db0..0d361ff43212 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -53,7 +53,6 @@ #include "../include/lprocfs_status.h" #include "../include/dt_object.h" -#include "../include/md_object.h" #include "../include/lustre_req_layout.h" #include "../include/lustre_fld.h" #include "../include/lustre_mdc.h" @@ -110,15 +109,14 @@ static void fld_exit_request(struct client_obd *cli) client_obd_list_unlock(&cli->cl_loi_list_lock); } -static int fld_rrb_hash(struct lu_client_fld *fld, - seqno_t seq) +static int fld_rrb_hash(struct lu_client_fld *fld, u64 seq) { LASSERT(fld->lcf_count > 0); return do_div(seq, fld->lcf_count); } static struct lu_fld_target * -fld_rrb_scan(struct lu_client_fld *fld, seqno_t seq) +fld_rrb_scan(struct lu_client_fld *fld, u64 seq) { struct lu_fld_target *target; int hash; @@ -173,7 +171,7 @@ struct lu_fld_hash fld_hash[] = { }; static struct lu_fld_target * -fld_client_get_target(struct lu_client_fld *fld, seqno_t seq) +fld_client_get_target(struct lu_client_fld *fld, u64 seq) { struct lu_fld_target *target; @@ -294,7 +292,7 @@ static int fld_client_proc_init(struct lu_client_fld *fld) if (rc) { CERROR("%s: Can't init FLD proc, rc %d\n", fld->lcf_name, rc); - GOTO(out_cleanup, rc); + goto out_cleanup; } return 0; @@ -364,12 +362,12 @@ int fld_client_init(struct lu_client_fld *fld, if (IS_ERR(fld->lcf_cache)) { rc = PTR_ERR(fld->lcf_cache); fld->lcf_cache = NULL; - GOTO(out, rc); + goto out; } rc = fld_client_proc_init(fld); if (rc) - GOTO(out, rc); + goto out; out: if (rc) fld_client_fini(fld); @@ -428,6 +426,7 @@ int fld_client_rpc(struct obd_export *exp, ptlrpc_request_set_replen(req); req->rq_request_portal = FLD_REQUEST_PORTAL; + req->rq_reply_portal = MDC_REPLY_PORTAL; ptlrpc_at_set_req_timeout(req); if (fld_op == FLD_LOOKUP && @@ -442,18 +441,20 @@ int fld_client_rpc(struct obd_export *exp, if (fld_op != FLD_LOOKUP) mdc_put_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL); if (rc) - GOTO(out_req, rc); + goto out_req; prange = req_capsule_server_get(&req->rq_pill, &RMF_FLD_MDFLD); - if (prange == NULL) - GOTO(out_req, rc = -EFAULT); + if (prange == NULL) { + rc = -EFAULT; + goto out_req; + } *range = *prange; out_req: ptlrpc_req_finished(req); return rc; } -int fld_client_lookup(struct lu_client_fld *fld, seqno_t seq, mdsno_t *mds, +int fld_client_lookup(struct lu_client_fld *fld, u64 seq, u32 *mds, __u32 flags, const struct lu_env *env) { struct lu_seq_range res = { 0 }; diff --git a/drivers/staging/lustre/lustre/fld/lproc_fld.c b/drivers/staging/lustre/lustre/fld/lproc_fld.c index 7f6bcc63c5eb..95e7de18d2f1 100644 --- a/drivers/staging/lustre/lustre/fld/lproc_fld.c +++ b/drivers/staging/lustre/lustre/fld/lproc_fld.c @@ -49,7 +49,6 @@ #include "../include/obd.h" #include "../include/obd_class.h" #include "../include/dt_object.h" -#include "../include/md_object.h" #include "../include/obd_support.h" #include "../include/lustre_req_layout.h" #include "../include/lustre_fld.h" diff --git a/drivers/staging/lustre/lustre/include/cl_object.h b/drivers/staging/lustre/lustre/include/cl_object.h index e51cd690f907..d56c8bea89c4 100644 --- a/drivers/staging/lustre/lustre/include/cl_object.h +++ b/drivers/staging/lustre/lustre/include/cl_object.h @@ -98,7 +98,7 @@ * super-class definitions. */ #include "lu_object.h" -#include "lvfs.h" +#include "linux/lustre_compat25.h" #include <linux/mutex.h> #include <linux/radix-tree.h> @@ -2508,7 +2508,7 @@ struct cl_req_operations { void (*cro_attr_set)(const struct lu_env *env, const struct cl_req_slice *slice, const struct cl_object *obj, - struct cl_req_attr *attr, obd_valid flags); + struct cl_req_attr *attr, u64 flags); /** * Called top-to-bottom from cl_req_completion() to notify layers that * transfer completed. Has to free all state allocated by @@ -3182,7 +3182,7 @@ void cl_req_page_add (const struct lu_env *env, struct cl_req *req, void cl_req_page_done (const struct lu_env *env, struct cl_page *page); int cl_req_prep (const struct lu_env *env, struct cl_req *req); void cl_req_attr_set (const struct lu_env *env, struct cl_req *req, - struct cl_req_attr *attr, obd_valid flags); + struct cl_req_attr *attr, u64 flags); void cl_req_completion(const struct lu_env *env, struct cl_req *req, int ioret); /** \defgroup cl_sync_io cl_sync_io diff --git a/drivers/staging/lustre/lustre/include/interval_tree.h b/drivers/staging/lustre/lustre/include/interval_tree.h index 1815783edae6..bf9027d5f773 100644 --- a/drivers/staging/lustre/lustre/include/interval_tree.h +++ b/drivers/staging/lustre/lustre/include/interval_tree.h @@ -112,7 +112,7 @@ enum interval_iter interval_search(struct interval_node *root, enum interval_iter interval_iterate(struct interval_node *root, interval_callback_t func, void *data); enum interval_iter interval_iterate_reverse(struct interval_node *root, - interval_callback_t func,void *data); + interval_callback_t func, void *data); void interval_expand(struct interval_node *root, struct interval_node_extent *ext, diff --git a/drivers/staging/lustre/lustre/include/lclient.h b/drivers/staging/lustre/lustre/include/lclient.h index 386a36c00f57..b3b841f4d6e6 100644 --- a/drivers/staging/lustre/lustre/include/lclient.h +++ b/drivers/staging/lustre/lustre/include/lclient.h @@ -279,7 +279,7 @@ int ccc_req_init(const struct lu_env *env, struct cl_device *dev, void ccc_umount(const struct lu_env *env, struct cl_device *dev); int ccc_global_init(struct lu_device_type *device_type); void ccc_global_fini(struct lu_device_type *device_type); -int ccc_object_init0(const struct lu_env *env,struct ccc_object *vob, +int ccc_object_init0(const struct lu_env *env, struct ccc_object *vob, const struct cl_object_conf *conf); int ccc_object_init(const struct lu_env *env, struct lu_object *obj, const struct lu_object_conf *conf); @@ -319,11 +319,12 @@ int ccc_transient_page_prep(const struct lu_env *env, struct cl_io *io); void ccc_lock_delete(const struct lu_env *env, const struct cl_lock_slice *slice); -void ccc_lock_fini(const struct lu_env *env,struct cl_lock_slice *slice); -int ccc_lock_enqueue(const struct lu_env *env,const struct cl_lock_slice *slice, +void ccc_lock_fini(const struct lu_env *env, struct cl_lock_slice *slice); +int ccc_lock_enqueue(const struct lu_env *env, + const struct cl_lock_slice *slice, struct cl_io *io, __u32 enqflags); -int ccc_lock_unuse(const struct lu_env *env,const struct cl_lock_slice *slice); -int ccc_lock_wait(const struct lu_env *env,const struct cl_lock_slice *slice); +int ccc_lock_unuse(const struct lu_env *env, const struct cl_lock_slice *slice); +int ccc_lock_wait(const struct lu_env *env, const struct cl_lock_slice *slice); int ccc_lock_fits_into(const struct lu_env *env, const struct cl_lock_slice *slice, const struct cl_lock_descr *need, @@ -348,9 +349,10 @@ int ccc_prep_size(const struct lu_env *env, struct cl_object *obj, struct cl_io *io, loff_t start, size_t count, int *exceed); void ccc_req_completion(const struct lu_env *env, const struct cl_req_slice *slice, int ioret); -void ccc_req_attr_set(const struct lu_env *env,const struct cl_req_slice *slice, +void ccc_req_attr_set(const struct lu_env *env, + const struct cl_req_slice *slice, const struct cl_object *obj, - struct cl_req_attr *oa, obd_valid flags); + struct cl_req_attr *oa, u64 flags); struct lu_device *ccc2lu_dev (struct ccc_device *vdv); struct lu_object *ccc2lu (struct ccc_object *vob); diff --git a/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h b/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h deleted file mode 100644 index cb76b5d6f71a..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lprocfs_status.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2002, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/include/linux/lprocfs_status.h - * - * Top level header file for LProc SNMP - * - * Author: Hariharan Thantry thantry@users.sourceforge.net - */ -#ifndef _LINUX_LPROCFS_SNMP_H -#define _LINUX_LPROCFS_SNMP_H - -#ifndef _LPROCFS_SNMP_H -#error Do not #include this file directly. #include <lprocfs_status.h> instead -#endif - -#include <linux/proc_fs.h> -#include <linux/seq_file.h> -#include <linux/smp.h> -#include <linux/rwsem.h> -#include "../../../include/linux/libcfs/libcfs.h" -#include <linux/statfs.h> - - -#endif /* LPROCFS_SNMP_H */ diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_acl.h b/drivers/staging/lustre/lustre/include/linux/lustre_acl.h deleted file mode 100644 index b17273d403bb..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lustre_acl.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - */ -/* - * Copyright (c) 2011, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/lustre/include/lustre_acl.h - * - * MDS data structures. - * See also lustre_idl.h for wire formats of requests. - */ - -#ifndef _LUSTRE_LINUX_ACL_H -#define _LUSTRE_LINUX_ACL_H - -#ifndef _LUSTRE_ACL_H -#error Should not include directly. use #include <lustre_acl.h> instead -#endif - -#include <linux/fs.h> -#include <linux/dcache.h> - -#include <linux/posix_acl_xattr.h> -#define LUSTRE_POSIX_ACL_MAX_ENTRIES 32 -#define LUSTRE_POSIX_ACL_MAX_SIZE \ - (sizeof(posix_acl_xattr_header) + \ - LUSTRE_POSIX_ACL_MAX_ENTRIES * sizeof(posix_acl_xattr_entry)) - -#include "lustre_intent.h" -#include <linux/xattr.h> /* XATTR_{REPLACE,CREATE} */ - -#ifndef LUSTRE_POSIX_ACL_MAX_SIZE -# define LUSTRE_POSIX_ACL_MAX_SIZE 0 -#endif - -#endif /* _LUSTRE_LINUX_ACL_H */ diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_common.h b/drivers/staging/lustre/lustre/include/linux/lustre_common.h deleted file mode 100644 index d1783a33d8ca..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lustre_common.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef LUSTRE_COMMON_H -#define LUSTRE_COMMON_H - -#include <linux/sched.h> - -static inline int cfs_cleanup_group_info(void) -{ - struct group_info *ginfo; - - ginfo = groups_alloc(0); - if (!ginfo) - return -ENOMEM; - - set_current_groups(ginfo); - put_group_info(ginfo); - - return 0; -} - -#define ll_inode_blksize(a) (1<<(a)->i_blkbits) - -#endif diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h b/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h index 8621bac5058b..e94ab343ab25 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h +++ b/drivers/staging/lustre/lustre/include/linux/lustre_compat25.h @@ -39,7 +39,6 @@ #include <linux/fs_struct.h> #include <linux/namei.h> -#include "../../../include/linux/libcfs/linux/portals_compat25.h" #include "lustre_patchless_compat.h" @@ -99,17 +98,19 @@ static inline void ll_set_fs_pwd(struct fs_struct *fs, struct vfsmount *mnt, #define FS_HAS_FIEMAP (0) #endif -#define ll_vfs_rmdir(dir,entry,mnt) vfs_rmdir(dir,entry) -#define ll_vfs_mkdir(inode,dir,mnt,mode) vfs_mkdir(inode,dir,mode) -#define ll_vfs_link(old,mnt,dir,new,mnt1) vfs_link(old,dir,new) -#define ll_vfs_unlink(inode,entry,mnt) vfs_unlink(inode,entry) -#define ll_vfs_mknod(dir,entry,mnt,mode,dev) vfs_mknod(dir,entry,mode,dev) -#define ll_security_inode_unlink(dir,entry,mnt) security_inode_unlink(dir,entry) +#define ll_vfs_rmdir(dir, entry, mnt) vfs_rmdir(dir, entry) +#define ll_vfs_mkdir(inode, dir, mnt, mode) vfs_mkdir(inode, dir, mode) +#define ll_vfs_link(old, mnt, dir, new, mnt1) vfs_link(old, dir, new) +#define ll_vfs_unlink(inode, entry, mnt) vfs_unlink(inode, entry) +#define ll_vfs_mknod(dir, entry, mnt, mode, dev) \ + vfs_mknod(dir, entry, mode, dev) +#define ll_security_inode_unlink(dir, entry, mnt) \ + security_inode_unlink(dir, entry) #define ll_vfs_rename(old, old_dir, mnt, new, new_dir, mnt1) \ vfs_rename(old, old_dir, new, new_dir, NULL, 0) -#define cfs_bio_io_error(a,b) bio_io_error((a)) -#define cfs_bio_endio(a,b,c) bio_endio((a),(c)) +#define cfs_bio_io_error(a, b) bio_io_error((a)) +#define cfs_bio_endio(a, b, c) bio_endio((a), (c)) #define cfs_fs_pwd(fs) ((fs)->pwd.dentry) #define cfs_fs_mnt(fs) ((fs)->pwd.mnt) diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_dlm.h b/drivers/staging/lustre/lustre/include/linux/lustre_dlm.h deleted file mode 100644 index 207df03f6149..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lustre_dlm.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2002, 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 _LINUX_LUSTRE_DLM_H__ -#define _LINUX_LUSTRE_DLM_H__ - -#ifndef _LUSTRE_DLM_H__ -#error Do not #include this file directly. #include <lprocfs_status.h> instead -#endif - -# include <linux/proc_fs.h> -# include <asm/processor.h> -# include <linux/bit_spinlock.h> - -#endif diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h b/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h deleted file mode 100644 index d5c97beb66f5..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lustre_fsfilt.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2002, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/include/linux/lustre_fsfilt.h - * - * Filesystem interface helper. - */ - -#ifndef _LINUX_LUSTRE_FSFILT_H -#define _LINUX_LUSTRE_FSFILT_H - -#ifndef _LUSTRE_FSFILT_H -#error Do not #include this file directly. #include <lustre_fsfilt.h> instead -#endif - - -#include "../obd.h" -#include "../obd_class.h" - -typedef void (*fsfilt_cb_t)(struct obd_device *obd, __u64 last_rcvd, - void *data, int error); - -struct fsfilt_operations { - struct list_head fs_list; - struct module *fs_owner; - char *fs_type; - char *(* fs_getlabel)(struct super_block *sb); - void *(* fs_start)(struct inode *inode, int op, void *desc_private, - int logs); - int (* fs_commit)(struct inode *inode, void *handle,int force_sync); - int (* fs_map_inode_pages)(struct inode *inode, struct page **page, - int pages, unsigned long *blocks, - int create, struct mutex *sem); - int (* fs_write_record)(struct file *, void *, int size, loff_t *, - int force_sync); - int (* fs_read_record)(struct file *, void *, int size, loff_t *); - int (* fs_setup)(struct super_block *sb); -}; - -extern int fsfilt_register_ops(struct fsfilt_operations *fs_ops); -extern void fsfilt_unregister_ops(struct fsfilt_operations *fs_ops); -extern struct fsfilt_operations *fsfilt_get_ops(const char *type); -extern void fsfilt_put_ops(struct fsfilt_operations *fs_ops); - -static inline char *fsfilt_get_label(struct obd_device *obd, - struct super_block *sb) -{ - if (obd->obd_fsops->fs_getlabel == NULL) - return NULL; - if (obd->obd_fsops->fs_getlabel(sb)[0] == '\0') - return NULL; - - return obd->obd_fsops->fs_getlabel(sb); -} - -#define FSFILT_OP_UNLINK 1 -#define FSFILT_OP_CANCEL_UNLINK 10 - -#define __fsfilt_check_slow(obd, start, msg) \ -do { \ - if (time_before(jiffies, start + 15 * HZ)) \ - break; \ - else if (time_before(jiffies, start + 30 * HZ)) \ - CDEBUG(D_VFSTRACE, "%s: slow %s %lus\n", obd->obd_name, \ - msg, (jiffies-start) / HZ); \ - else if (time_before(jiffies, start + DISK_TIMEOUT * HZ)) \ - CWARN("%s: slow %s %lus\n", obd->obd_name, msg, \ - (jiffies - start) / HZ); \ - else \ - CERROR("%s: slow %s %lus\n", obd->obd_name, msg, \ - (jiffies - start) / HZ); \ -} while (0) - -#define fsfilt_check_slow(obd, start, msg) \ -do { \ - __fsfilt_check_slow(obd, start, msg); \ - start = jiffies; \ -} while (0) - -static inline void *fsfilt_start_log(struct obd_device *obd, - struct inode *inode, int op, - struct obd_trans_info *oti, int logs) -{ - unsigned long now = jiffies; - void *parent_handle = oti ? oti->oti_handle : NULL; - void *handle; - - handle = obd->obd_fsops->fs_start(inode, op, parent_handle, logs); - CDEBUG(D_INFO, "started handle %p (%p)\n", handle, parent_handle); - - if (oti != NULL) { - if (parent_handle == NULL) { - oti->oti_handle = handle; - } else if (handle != parent_handle) { - CERROR("mismatch: parent %p, handle %p, oti %p\n", - parent_handle, handle, oti); - LBUG(); - } - } - fsfilt_check_slow(obd, now, "journal start"); - return handle; -} - -static inline int fsfilt_commit(struct obd_device *obd, struct inode *inode, - void *handle, int force_sync) -{ - unsigned long now = jiffies; - int rc = obd->obd_fsops->fs_commit(inode, handle, force_sync); - CDEBUG(D_INFO, "committing handle %p\n", handle); - - fsfilt_check_slow(obd, now, "journal start"); - - return rc; -} - -static inline int fsfilt_read_record(struct obd_device *obd, struct file *file, - void *buf, loff_t size, loff_t *offs) -{ - return obd->obd_fsops->fs_read_record(file, buf, size, offs); -} - -static inline int fsfilt_write_record(struct obd_device *obd, struct file *file, - void *buf, loff_t size, loff_t *offs, - int force_sync) -{ - return obd->obd_fsops->fs_write_record(file, buf, size,offs,force_sync); -} - -static inline int fsfilt_setup(struct obd_device *obd, struct super_block *fs) -{ - if (obd->obd_fsops->fs_setup) - return obd->obd_fsops->fs_setup(fs); - return 0; -} - - - - -#endif diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_handles.h b/drivers/staging/lustre/lustre/include/linux/lustre_handles.h deleted file mode 100644 index 459b2380600f..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lustre_handles.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2003, 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 __LINUX_LUSTRE_HANDLES_H_ -#define __LINUX_LUSTRE_HANDLES_H_ - -#ifndef __LUSTRE_HANDLES_H_ -#error Do not #include this file directly. #include <lustre_handles.h> instead -#endif - -#include <asm/types.h> -#include <asm/atomic.h> -#include <linux/list.h> -#include <linux/spinlock.h> -#include <linux/types.h> - -#include <linux/rcupdate.h> /* for rcu_head{} */ -typedef struct rcu_head cfs_rcu_head_t; - - -#endif diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_lib.h b/drivers/staging/lustre/lustre/include/linux/lustre_lib.h deleted file mode 100644 index 0a4c65ae9242..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lustre_lib.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2001, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/include/linux/lustre_lib.h - * - * Basic Lustre library routines. - */ - -#ifndef _LINUX_LUSTRE_LIB_H -#define _LINUX_LUSTRE_LIB_H - -#ifndef _LUSTRE_LIB_H -#error Do not #include this file directly. #include <lustre_lib.h> instead -#endif - -# include <linux/rwsem.h> -# include <linux/sched.h> -# include <linux/signal.h> -# include <linux/types.h> -#include "lustre_compat25.h" -#include "lustre_common.h" - -#ifndef LP_POISON -# define LI_POISON 0x5a5a5a5a -#if BITS_PER_LONG > 32 -# define LL_POISON 0x5a5a5a5a5a5a5a5aL -#else -# define LL_POISON 0x5a5a5a5aL -#endif -# define LP_POISON ((void *)LL_POISON) -#endif - -/* This macro is only for compatibility reasons with older Linux Lustre user - * tools. New ioctls should NOT use this macro as the ioctl "size". Instead - * the ioctl should get a "size" argument which is the actual data type used - * by the ioctl, to ensure the ioctl interface is versioned correctly. */ -#define OBD_IOC_DATA_TYPE long - -#define LUSTRE_FATAL_SIGS (sigmask(SIGKILL) | sigmask(SIGINT) | \ - sigmask(SIGTERM) | sigmask(SIGQUIT) | \ - sigmask(SIGALRM)) - -/* initialize ost_lvb according to inode */ -static inline void inode_init_lvb(struct inode *inode, struct ost_lvb *lvb) -{ - lvb->lvb_size = i_size_read(inode); - lvb->lvb_blocks = inode->i_blocks; - lvb->lvb_mtime = LTIME_S(inode->i_mtime); - lvb->lvb_atime = LTIME_S(inode->i_atime); - lvb->lvb_ctime = LTIME_S(inode->i_ctime); -} - -#endif /* _LUSTRE_LIB_H */ diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_lite.h b/drivers/staging/lustre/lustre/include/linux/lustre_lite.h index 99eed4987635..a7658a99a08d 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_lite.h +++ b/drivers/staging/lustre/lustre/include/linux/lustre_lite.h @@ -52,7 +52,6 @@ #include <linux/rbtree.h> #include "../../include/linux/lustre_compat25.h" -#include "../../include/linux/lustre_common.h" #include <linux/pagemap.h> /* lprocfs.c */ diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_log.h b/drivers/staging/lustre/lustre/include/linux/lustre_log.h deleted file mode 100644 index e9c8e56737d2..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lustre_log.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2003, 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. - * - * lustre/include/linux/lustre_log.h - * - * Generic infrastructure for managing a collection of logs. - * These logs are used for: - * - orphan recovery: OST adds record on create - * - mtime/size consistency: the OST adds a record on first write - * - open/unlinked objects: OST adds a record on destroy - * - * - mds unlink log: the MDS adds an entry upon delete - * - * - raid1 replication log between OST's - * - MDS replication logs - */ - -#ifndef _LINUX_LUSTRE_LOG_H -#define _LINUX_LUSTRE_LOG_H - -#ifndef _LUSTRE_LOG_H -#error Do not #include this file directly. #include <lustre_log.h> instead -#endif - -#define LUSTRE_LOG_SERVER - -#endif diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_net.h b/drivers/staging/lustre/lustre/include/linux/lustre_net.h deleted file mode 100644 index 05de4d87db9a..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lustre_net.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2002, 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 _LINUX_LUSTRE_NET_H -#define _LINUX_LUSTRE_NET_H - -#ifndef _LUSTRE_NET_H -#error Do not #include this file directly. #include <lustre_net.h> instead -#endif - -#include <linux/workqueue.h> - -/* XXX Liang: should be moved to other header instead of here */ -#ifndef WITH_GROUP_INFO -#define WITH_GROUP_INFO -#endif - -#endif diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_quota.h b/drivers/staging/lustre/lustre/include/linux/lustre_quota.h deleted file mode 100644 index a39505014c82..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lustre_quota.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2007, 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 _LINUX_LUSTRE_QUOTA_H -#define _LINUX_LUSTRE_QUOTA_H - -#ifndef _LUSTRE_QUOTA_H -#error Do not #include this file directly. #include <lustre_quota.h> instead -#endif - -#include <linux/fs.h> -#include <linux/quota.h> -#include <linux/quotaops.h> - -#endif /* _LUSTRE_QUOTA_H */ diff --git a/drivers/staging/lustre/lustre/include/linux/lvfs.h b/drivers/staging/lustre/lustre/include/linux/lvfs.h deleted file mode 100644 index dd1be9c39829..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lvfs.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2003, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/include/linux/lvfs.h - * - * lustre VFS/process permission interface - */ - -#ifndef __LINUX_LVFS_H__ -#define __LINUX_LVFS_H__ - -#ifndef __LVFS_H__ -#error Do not #include this file directly. #include <lvfs.h> instead -#endif - -#include "lustre_compat25.h" -#include "lustre_common.h" -#include "lvfs_linux.h" - -#define LLOG_LVFS - -/* simple.c */ - -struct lvfs_ucred { - kuid_t luc_uid; - kgid_t luc_gid; - kuid_t luc_fsuid; - kgid_t luc_fsgid; - kernel_cap_t luc_cap; - __u32 luc_umask; - struct group_info *luc_ginfo; - struct md_identity *luc_identity; -}; - -struct lvfs_callback_ops { - struct dentry *(*l_fid2dentry)(__u64 id_ino, __u32 gen, __u64 gr, void *data); -}; - -#define OBD_RUN_CTXT_MAGIC 0xC0FFEEAA -#define OBD_CTXT_DEBUG /* development-only debugging */ -struct lvfs_run_ctxt { - struct vfsmount *pwdmnt; - struct dentry *pwd; - mm_segment_t fs; - struct lvfs_ucred luc; - int ngroups; - struct lvfs_callback_ops cb_ops; - struct group_info *group_info; - struct dt_device *dt; -#ifdef OBD_CTXT_DEBUG - __u32 magic; -#endif -}; - -#ifdef OBD_CTXT_DEBUG -#define OBD_SET_CTXT_MAGIC(ctxt) (ctxt)->magic = OBD_RUN_CTXT_MAGIC -#else -#define OBD_SET_CTXT_MAGIC(ctxt) do {} while(0) -#endif - - -int lustre_rename(struct dentry *dir, struct vfsmount *mnt, char *oldname, - char *newname); - -static inline void l_dput(struct dentry *de) -{ - if (!de || IS_ERR(de)) - return; - //shrink_dcache_parent(de); - LASSERT(d_count(de) > 0); - dput(de); -} - -/* We need to hold the inode semaphore over the dcache lookup itself, or we - * run the risk of entering the filesystem lookup path concurrently on SMP - * systems, and instantiating two inodes for the same entry. We still - * protect against concurrent addition/removal races with the DLM locking. - */ -static inline struct dentry *ll_lookup_one_len(const char *fid_name, - struct dentry *dparent, - int fid_namelen) -{ - struct dentry *dchild; - - mutex_lock(&dparent->d_inode->i_mutex); - dchild = lookup_one_len(fid_name, dparent, fid_namelen); - mutex_unlock(&dparent->d_inode->i_mutex); - - if (IS_ERR(dchild) || dchild->d_inode == NULL) - return dchild; - - if (is_bad_inode(dchild->d_inode)) { - CERROR("bad inode returned %lu/%u\n", - dchild->d_inode->i_ino, dchild->d_inode->i_generation); - dput(dchild); - dchild = ERR_PTR(-ENOENT); - } - return dchild; -} - - -#endif diff --git a/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h b/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h deleted file mode 100644 index fff22ec1f869..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/lvfs_linux.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2003, 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 __LVFS_LINUX_H__ -#define __LVFS_LINUX_H__ - -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/fs.h> -#include <linux/namei.h> -#include <linux/sched.h> - -#include "../lvfs.h" - -struct lvfs_run_ctxt; -struct file *l_dentry_open(struct lvfs_run_ctxt *, struct dentry *, - int flags); - -struct l_linux_dirent { - struct list_head lld_list; - ino_t lld_ino; - unsigned long lld_off; - char lld_name[LL_FID_NAMELEN]; -}; -struct l_readdir_callback { - struct l_linux_dirent *lrc_dirent; - struct list_head *lrc_list; -}; - -#endif /* __LVFS_LINUX_H__ */ diff --git a/drivers/staging/lustre/lustre/include/linux/obd.h b/drivers/staging/lustre/lustre/include/linux/obd.h index 2a3a88cbb192..9d7e28ace42d 100644 --- a/drivers/staging/lustre/lustre/include/linux/obd.h +++ b/drivers/staging/lustre/lustre/include/linux/obd.h @@ -48,7 +48,7 @@ # include <linux/sched.h> /* for struct task_struct, for current.h */ # include <linux/proc_fs.h> # include <linux/mount.h> -#include "lustre_intent.h" +#include "../lustre_intent.h" struct ll_iattr { struct iattr iattr; diff --git a/drivers/staging/lustre/lustre/include/linux/obd_class.h b/drivers/staging/lustre/lustre/include/linux/obd_class.h deleted file mode 100644 index 021ead6639fc..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/obd_class.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef __LINUX_CLASS_OBD_H -#define __LINUX_CLASS_OBD_H - -#ifndef __CLASS_OBD_H -#error Do not #include this file directly. #include <obd_class.h> instead -#endif - -#include <asm/uaccess.h> -#include <linux/types.h> -#include <linux/fs.h> -#include <linux/time.h> -#include <linux/timer.h> - -/* obdo.c */ -void obdo_from_la(struct obdo *dst, struct lu_attr *la, __u64 valid); -void la_from_obdo(struct lu_attr *la, struct obdo *dst, obd_flag valid); -void obdo_refresh_inode(struct inode *dst, struct obdo *src, obd_flag valid); -void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid); -#define ll_inode_flags(inode) (inode->i_flags) - - -#endif /* __LINUX_OBD_CLASS_H */ diff --git a/drivers/staging/lustre/lustre/include/linux/obd_support.h b/drivers/staging/lustre/lustre/include/linux/obd_support.h deleted file mode 100644 index ea03b8434f62..000000000000 --- a/drivers/staging/lustre/lustre/include/linux/obd_support.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#ifndef _LINUX_OBD_SUPPORT -#define _LINUX_OBD_SUPPORT - -#ifndef _OBD_SUPPORT -#error Do not #include this file directly. #include <obd_support.h> instead -#endif - -#ifdef CONFIG_X86 -#include <asm/cpufeature.h> -#endif -#include <asm/processor.h> -#include <linux/seq_file.h> -#include <linux/module.h> -#include <linux/slab.h> -#include <linux/highmem.h> -#include <linux/swap.h> -#include "../../include/linux/lustre_compat25.h" -#include "lustre_common.h" -#include "../../../include/linux/libcfs/libcfs.h" -#include "../lustre/lustre_idl.h" - - -# include <linux/types.h> -# include <linux/blkdev.h> -# include "../lvfs.h" - -#endif diff --git a/drivers/staging/lustre/lustre/include/lprocfs_status.h b/drivers/staging/lustre/lustre/include/lprocfs_status.h index 16b3d6887ff6..ccb6cd42a67d 100644 --- a/drivers/staging/lustre/lustre/include/lprocfs_status.h +++ b/drivers/staging/lustre/lustre/include/lprocfs_status.h @@ -42,7 +42,11 @@ #ifndef _LPROCFS_SNMP_H #define _LPROCFS_SNMP_H -#include "linux/lprocfs_status.h" +#include <linux/proc_fs.h> +#include <linux/seq_file.h> +#include <linux/spinlock.h> +#include <linux/types.h> + #include "lustre/lustre_idl.h" struct lprocfs_vars { @@ -351,7 +355,7 @@ struct obd_histogram; /* Days / hours / mins / seconds format */ struct dhms { - int d,h,m,s; + int d, h, m, s; }; static inline void s2dhms(struct dhms *ts, time_t secs) { @@ -607,7 +611,7 @@ extern int lprocfs_rd_atomic(struct seq_file *m, void *data); extern int lprocfs_wr_atomic(struct file *file, const char __user *buffer, unsigned long count, void *data); extern int lprocfs_rd_uint(struct seq_file *m, void *data); -extern int lprocfs_wr_uint(struct file *file, const char *buffer, +extern int lprocfs_wr_uint(struct file *file, const char __user *buffer, unsigned long count, void *data); extern int lprocfs_rd_uuid(struct seq_file *m, void *data); extern int lprocfs_rd_name(struct seq_file *m, void *data); @@ -673,7 +677,7 @@ extern int lprocfs_seq_release(struct inode *, struct file *); up_read(&(obd)->u.cli.cl_sem); \ return -ENODEV; \ } \ -} while(0) +} while (0) #define LPROCFS_CLIMP_EXIT(obd) \ up_read(&(obd)->u.cli.cl_sem); @@ -864,7 +868,8 @@ static inline void lprocfs_free_md_stats(struct obd_device *obddev) struct obd_export; static inline int lprocfs_add_clear_entry(struct obd_export *exp) { return 0; } -static inline int lprocfs_exp_setup(struct obd_export *exp,lnet_nid_t *peer_nid, +static inline int lprocfs_exp_setup(struct obd_export *exp, + lnet_nid_t *peer_nid, int *newnid) { return 0; } static inline int lprocfs_exp_cleanup(struct obd_export *exp) diff --git a/drivers/staging/lustre/lustre/include/lu_object.h b/drivers/staging/lustre/lustre/include/lu_object.h index d5c368bab5bd..6015ee5c4b64 100644 --- a/drivers/staging/lustre/lustre/include/lu_object.h +++ b/drivers/staging/lustre/lustre/include/lu_object.h @@ -404,11 +404,11 @@ struct lu_attr { /** size in bytes */ __u64 la_size; /** modification time in seconds since Epoch */ - obd_time la_mtime; + s64 la_mtime; /** access time in seconds since Epoch */ - obd_time la_atime; + s64 la_atime; /** change time in seconds since Epoch */ - obd_time la_ctime; + s64 la_ctime; /** 512-byte blocks allocated to object */ __u64 la_blocks; /** permission bits and file type */ @@ -1146,8 +1146,8 @@ struct lu_context_key { struct __##mod##__dummy_fini {;} /* semicolon catcher */ #define LU_KEY_INIT_FINI(mod, type) \ - LU_KEY_INIT(mod,type); \ - LU_KEY_FINI(mod,type) + LU_KEY_INIT(mod, type); \ + LU_KEY_FINI(mod, type) #define LU_CONTEXT_KEY_DEFINE(mod, tags) \ struct lu_context_key mod##_thread_key = { \ diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h index 757146273724..7b7457cf70e3 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_idl.h @@ -128,7 +128,7 @@ //#define PTLBD_BULK_PORTAL 21 #define MDS_SETATTR_PORTAL 22 #define MDS_READPAGE_PORTAL 23 -#define MDS_MDS_PORTAL 24 +#define OUT_PORTAL 24 #define MGC_REPLY_PORTAL 25 #define MGS_REQUEST_PORTAL 26 @@ -165,22 +165,6 @@ #define LUSTRE_LOG_VERSION 0x00050000 #define LUSTRE_MGS_VERSION 0x00060000 -typedef __u32 mdsno_t; -typedef __u64 seqno_t; -typedef __u64 obd_id; -typedef __u64 obd_seq; -typedef __s64 obd_time; -typedef __u64 obd_size; -typedef __u64 obd_off; -typedef __u64 obd_blocks; -typedef __u64 obd_valid; -typedef __u32 obd_blksize; -typedef __u32 obd_mode; -typedef __u32 obd_uid; -typedef __u32 obd_gid; -typedef __u32 obd_flag; -typedef __u32 obd_count; - /** * Describes a range of sequence, lsr_start is included but lsr_end is * not in the range. @@ -337,49 +321,6 @@ enum lma_incompat { }; #define LMA_INCOMPAT_SUPP (LMAI_AGENT | LMAI_REMOTE_PARENT) -extern void lustre_lma_swab(struct lustre_mdt_attrs *lma); -extern void lustre_lma_init(struct lustre_mdt_attrs *lma, - const struct lu_fid *fid, __u32 incompat); -/** - * SOM on-disk attributes stored in a separate xattr. - */ -struct som_attrs { - /** Bitfield for supported data in this structure. For future use. */ - __u32 som_compat; - - /** Incompat feature list. The supported feature mask is available in - * SOM_INCOMPAT_SUPP */ - __u32 som_incompat; - - /** IO Epoch SOM attributes belongs to */ - __u64 som_ioepoch; - /** total file size in objects */ - __u64 som_size; - /** total fs blocks in objects */ - __u64 som_blocks; - /** mds mount id the size is valid for */ - __u64 som_mountid; -}; -extern void lustre_som_swab(struct som_attrs *attrs); - -#define SOM_INCOMPAT_SUPP 0x0 - -/** - * HSM on-disk attributes stored in a separate xattr. - */ -struct hsm_attrs { - /** Bitfield for supported data in this structure. For future use. */ - __u32 hsm_compat; - - /** HSM flags, see hsm_flags enum below */ - __u32 hsm_flags; - /** backend archive id associated with the file */ - __u64 hsm_arch_id; - /** version associated with the last archiving, if any */ - __u64 hsm_arch_ver; -}; -extern void lustre_hsm_swab(struct hsm_attrs *attrs); - /** * fid constants */ @@ -413,7 +354,7 @@ static inline void fid_zero(struct lu_fid *fid) memset(fid, 0, sizeof(*fid)); } -static inline obd_id fid_ver_oid(const struct lu_fid *fid) +static inline __u64 fid_ver_oid(const struct lu_fid *fid) { return ((__u64)fid_ver(fid) << 32 | fid_oid(fid)); } @@ -477,7 +418,7 @@ enum dot_lustre_oid { FID_OID_DOT_LUSTRE_OBF = 2UL, }; -static inline int fid_seq_is_mdt0(obd_seq seq) +static inline int fid_seq_is_mdt0(__u64 seq) { return (seq == FID_SEQ_OST_MDT0); } @@ -487,7 +428,7 @@ static inline int fid_seq_is_mdt(const __u64 seq) return seq == FID_SEQ_OST_MDT0 || seq >= FID_SEQ_NORMAL; }; -static inline int fid_seq_is_echo(obd_seq seq) +static inline int fid_seq_is_echo(__u64 seq) { return (seq == FID_SEQ_ECHO); } @@ -497,7 +438,7 @@ static inline int fid_is_echo(const struct lu_fid *fid) return fid_seq_is_echo(fid_seq(fid)); } -static inline int fid_seq_is_llog(obd_seq seq) +static inline int fid_seq_is_llog(__u64 seq) { return (seq == FID_SEQ_LLOG); } @@ -597,13 +538,13 @@ static inline int fid_is_norm(const struct lu_fid *fid) } /* convert an OST objid into an IDIF FID SEQ number */ -static inline obd_seq fid_idif_seq(obd_id id, __u32 ost_idx) +static inline __u64 fid_idif_seq(__u64 id, __u32 ost_idx) { return FID_SEQ_IDIF | (ost_idx << 16) | ((id >> 32) & 0xffff); } /* convert a packed IDIF FID into an OST objid */ -static inline obd_id fid_idif_id(obd_seq seq, __u32 oid, __u32 ver) +static inline __u64 fid_idif_id(__u64 seq, __u32 oid, __u32 ver) { return ((__u64)ver << 48) | ((seq & 0xffff) << 32) | oid; } @@ -615,7 +556,7 @@ static inline __u32 fid_idif_ost_idx(const struct lu_fid *fid) } /* extract OST sequence (group) from a wire ost_id (id/seq) pair */ -static inline obd_seq ostid_seq(const struct ost_id *ostid) +static inline __u64 ostid_seq(const struct ost_id *ostid) { if (fid_seq_is_mdt0(ostid->oi.oi_seq)) return FID_SEQ_OST_MDT0; @@ -630,7 +571,7 @@ static inline obd_seq ostid_seq(const struct ost_id *ostid) } /* extract OST objid from a wire ost_id (id/seq) pair */ -static inline obd_id ostid_id(const struct ost_id *ostid) +static inline __u64 ostid_id(const struct ost_id *ostid) { if (fid_seq_is_mdt0(ostid_seq(ostid))) return ostid->oi.oi_id & IDIF_OID_MASK; @@ -1371,8 +1312,9 @@ extern void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb); #define CLIENT_CONNECT_MDT_REQD (OBD_CONNECT_IBITS | OBD_CONNECT_FID | \ OBD_CONNECT_FULL20) -#define OBD_OCD_VERSION(major,minor,patch,fix) (((major)<<24) + ((minor)<<16) +\ - ((patch)<<8) + (fix)) +#define OBD_OCD_VERSION(major, minor, patch, fix) (((major)<<24) + \ + ((minor)<<16) + \ + ((patch)<<8) + (fix)) #define OBD_OCD_VERSION_MAJOR(version) ((int)((version)>>24)&255) #define OBD_OCD_VERSION_MINOR(version) ((int)((version)>>16)&255) #define OBD_OCD_VERSION_PATCH(version) ((int)((version)>>8)&255) @@ -1857,9 +1799,9 @@ extern void lustre_swab_niobuf_remote (struct niobuf_remote *nbr); struct ost_lvb_v1 { __u64 lvb_size; - obd_time lvb_mtime; - obd_time lvb_atime; - obd_time lvb_ctime; + __s64 lvb_mtime; + __s64 lvb_atime; + __s64 lvb_ctime; __u64 lvb_blocks; }; @@ -1867,9 +1809,9 @@ extern void lustre_swab_ost_lvb_v1(struct ost_lvb_v1 *lvb); struct ost_lvb { __u64 lvb_size; - obd_time lvb_mtime; - obd_time lvb_atime; - obd_time lvb_ctime; + __s64 lvb_mtime; + __s64 lvb_atime; + __s64 lvb_ctime; __u64 lvb_blocks; __u32 lvb_mtime_ns; __u32 lvb_atime_ns; @@ -2250,9 +2192,9 @@ struct mdt_body { struct lustre_handle handle; __u64 valid; __u64 size; /* Offset, in the case of MDS_READPAGE */ - obd_time mtime; - obd_time atime; - obd_time ctime; + __s64 mtime; + __s64 atime; + __s64 ctime; __u64 blocks; /* XID, in the case of MDS_READPAGE */ __u64 ioepoch; __u64 t_state; /* transient file state defined in @@ -2335,9 +2277,9 @@ struct mdt_rec_setattr { __u32 sa_gid; __u64 sa_size; __u64 sa_blocks; - obd_time sa_mtime; - obd_time sa_atime; - obd_time sa_ctime; + __s64 sa_mtime; + __s64 sa_atime; + __s64 sa_ctime; __u32 sa_attr_flags; __u32 sa_mode; __u32 sa_bias; /* some operation flags */ @@ -2466,7 +2408,7 @@ struct mdt_rec_create { struct lu_fid cr_fid1; struct lu_fid cr_fid2; struct lustre_handle cr_old_handle; /* handle in case of open replay */ - obd_time cr_time; + __s64 cr_time; __u64 cr_rdev; __u64 cr_ioepoch; __u64 cr_padding_1; /* rr_blocks */ @@ -2506,7 +2448,7 @@ struct mdt_rec_link { __u32 lk_suppgid2_h; struct lu_fid lk_fid1; struct lu_fid lk_fid2; - obd_time lk_time; + __s64 lk_time; __u64 lk_padding_1; /* rr_atime */ __u64 lk_padding_2; /* rr_ctime */ __u64 lk_padding_3; /* rr_size */ @@ -2533,7 +2475,7 @@ struct mdt_rec_unlink { __u32 ul_suppgid2_h; struct lu_fid ul_fid1; struct lu_fid ul_fid2; - obd_time ul_time; + __s64 ul_time; __u64 ul_padding_2; /* rr_atime */ __u64 ul_padding_3; /* rr_ctime */ __u64 ul_padding_4; /* rr_size */ @@ -2560,7 +2502,7 @@ struct mdt_rec_rename { __u32 rn_suppgid2_h; struct lu_fid rn_fid1; struct lu_fid rn_fid2; - obd_time rn_time; + __s64 rn_time; __u64 rn_padding_1; /* rr_atime */ __u64 rn_padding_2; /* rr_ctime */ __u64 rn_padding_3; /* rr_size */ @@ -2590,7 +2532,7 @@ struct mdt_rec_setxattr { __u32 sx_padding_2; __u32 sx_padding_3; __u64 sx_valid; - obd_time sx_time; + __s64 sx_time; __u64 sx_padding_5; /* rr_ctime */ __u64 sx_padding_6; /* rr_size */ __u64 sx_padding_7; /* rr_blocks */ @@ -2623,9 +2565,9 @@ struct mdt_rec_reint { __u32 rr_suppgid2_h; struct lu_fid rr_fid1; struct lu_fid rr_fid2; - obd_time rr_mtime; - obd_time rr_atime; - obd_time rr_ctime; + __s64 rr_mtime; + __s64 rr_atime; + __s64 rr_ctime; __u64 rr_size; __u64 rr_blocks; __u32 rr_bias; @@ -2871,7 +2813,7 @@ extern void lustre_swab_ldlm_request (struct ldlm_request *rq); /* If LDLM_ENQUEUE, 1 slot is already occupied, 1 is available. * Otherwise, 2 are available. */ -#define ldlm_request_bufsize(count,type) \ +#define ldlm_request_bufsize(count, type) \ ({ \ int _avail = LDLM_LOCKREQ_HANDLES; \ _avail -= (type == LDLM_ENQUEUE ? LDLM_ENQUEUE_CANCEL_OFF : 0); \ @@ -2979,8 +2921,8 @@ struct cfg_marker { __u32 cm_flags; __u32 cm_vers; /* lustre release version number */ __u32 cm_padding; /* 64 bit align */ - obd_time cm_createtime; /*when this record was first created */ - obd_time cm_canceltime; /*when this record is no longer valid*/ + __s64 cm_createtime; /*when this record was first created */ + __s64 cm_canceltime; /*when this record is no longer valid*/ char cm_tgtname[MTI_NAME_MAXLEN]; char cm_comment[MTI_NAME_MAXLEN]; }; @@ -3084,16 +3026,16 @@ struct llog_logid_rec { struct llog_unlink_rec { struct llog_rec_hdr lur_hdr; - obd_id lur_oid; - obd_count lur_oseq; - obd_count lur_count; + __u64 lur_oid; + __u32 lur_oseq; + __u32 lur_count; struct llog_rec_tail lur_tail; } __attribute__((packed)); struct llog_unlink64_rec { struct llog_rec_hdr lur_hdr; struct lu_fid lur_fid; - obd_count lur_count; /* to destroy the lost precreated */ + __u32 lur_count; /* to destroy the lost precreated */ __u32 lur_padding1; __u64 lur_padding2; __u64 lur_padding3; @@ -3238,7 +3180,7 @@ enum llog_flag { struct llog_log_hdr { struct llog_rec_hdr llh_hdr; - obd_time llh_timestamp; + __s64 llh_timestamp; __u32 llh_count; __u32 llh_bitmap_offset; __u32 llh_size; @@ -3296,25 +3238,25 @@ struct llogd_conn_body { /* Note: 64-bit types are 64-bit aligned in structure */ struct obdo { - obd_valid o_valid; /* hot fields in this obdo */ - struct ost_id o_oi; - obd_id o_parent_seq; - obd_size o_size; /* o_size-o_blocks == ost_lvb */ - obd_time o_mtime; - obd_time o_atime; - obd_time o_ctime; - obd_blocks o_blocks; /* brw: cli sent cached bytes */ - obd_size o_grant; + __u64 o_valid; /* hot fields in this obdo */ + struct ost_id o_oi; + __u64 o_parent_seq; + __u64 o_size; /* o_size-o_blocks == ost_lvb */ + __s64 o_mtime; + __s64 o_atime; + __s64 o_ctime; + __u64 o_blocks; /* brw: cli sent cached bytes */ + __u64 o_grant; /* 32-bit fields start here: keep an even number of them via padding */ - obd_blksize o_blksize; /* optimal IO blocksize */ - obd_mode o_mode; /* brw: cli sent cache remain */ - obd_uid o_uid; - obd_gid o_gid; - obd_flag o_flags; - obd_count o_nlink; /* brw: checksum */ - obd_count o_parent_oid; - obd_count o_misc; /* brw: o_dropped */ + __u32 o_blksize; /* optimal IO blocksize */ + __u32 o_mode; /* brw: cli sent cache remain */ + __u32 o_uid; + __u32 o_gid; + __u32 o_flags; + __u32 o_nlink; /* brw: checksum */ + __u32 o_parent_oid; + __u32 o_misc; /* brw: o_dropped */ __u64 o_ioepoch; /* epoch in ost writes */ __u32 o_stripe_idx; /* holds stripe idx */ @@ -3363,7 +3305,7 @@ static inline void lustre_get_wire_obdo(struct obd_connect_data *ocd, struct obdo *lobdo, const struct obdo *wobdo) { - obd_flag local_flags = 0; + __u32 local_flags = 0; if (lobdo->o_valid & OBD_MD_FLFLAGS) local_flags = lobdo->o_flags & OBD_FL_LOCAL_MASK; @@ -3401,7 +3343,7 @@ struct ll_fiemap_info_key { }; extern void lustre_swab_ost_body (struct ost_body *b); -extern void lustre_swab_ost_last_id(obd_id *id); +extern void lustre_swab_ost_last_id(__u64 *id); extern void lustre_swab_fiemap(struct ll_user_fiemap *fiemap); extern void lustre_swab_lov_user_md_v1(struct lov_user_md_v1 *lum); diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h index a69b27a78042..89794fdfec9d 100644 --- a/drivers/staging/lustre/lustre/include/lustre/lustre_user.h +++ b/drivers/staging/lustre/lustre/include/lustre/lustre_user.h @@ -841,7 +841,7 @@ struct ioc_data_version { version. Dirty caches are left unchanged. */ #ifndef offsetof -# define offsetof(typ,memb) ((unsigned long)((char *)&(((typ *)0)->memb))) +# define offsetof(typ, memb) ((unsigned long)((char *)&(((typ *)0)->memb))) #endif #define dot_lustre_name ".lustre" @@ -997,12 +997,25 @@ static inline void *hur_data(struct hsm_user_request *hur) return &(hur->hur_user_item[hur->hur_request.hr_itemcount]); } -/** Compute the current length of the provided hsm_user_request. */ -static inline int hur_len(struct hsm_user_request *hur) +/** + * Compute the current length of the provided hsm_user_request. This returns -1 + * instead of an errno because ssize_t is defined to be only [ -1, SSIZE_MAX ] + * + * return -1 on bounds check error. + */ +static inline ssize_t hur_len(struct hsm_user_request *hur) { - return offsetof(struct hsm_user_request, - hur_user_item[hur->hur_request.hr_itemcount]) + - hur->hur_request.hr_data_len; + __u64 size; + + /* can't overflow a __u64 since hr_itemcount is only __u32 */ + size = offsetof(struct hsm_user_request, hur_user_item[0]) + + (__u64)hur->hur_request.hr_itemcount * + sizeof(hur->hur_user_item[0]) + hur->hur_request.hr_data_len; + + if (size != (ssize_t)size) + return -1; + + return size; } /****** HSM RPCs to copytool *****/ @@ -1061,8 +1074,7 @@ static inline char *hai_dump_data_field(struct hsm_action_item *hai, ptr = buffer; sz = len; data_len = hai->hai_len - sizeof(*hai); - for (i = 0 ; (i < data_len) && (sz > 0) ; i++) - { + for (i = 0 ; (i < data_len) && (sz > 0) ; i++) { int cnt; cnt = snprintf(ptr, sz, "%.2X", @@ -1098,7 +1110,7 @@ static inline int cfs_size_round (int val) #endif /* Return pointer to first hai in action list */ -static inline struct hsm_action_item * hai_zero(struct hsm_action_list *hal) +static inline struct hsm_action_item *hai_zero(struct hsm_action_list *hal) { return (struct hsm_action_item *)(hal->hal_fsname + cfs_size_round(strlen(hal-> \ @@ -1106,7 +1118,7 @@ static inline struct hsm_action_item * hai_zero(struct hsm_action_list *hal) + 1)); } /* Return pointer to next hai */ -static inline struct hsm_action_item * hai_next(struct hsm_action_item *hai) +static inline struct hsm_action_item *hai_next(struct hsm_action_item *hai) { return (struct hsm_action_item *)((char *)hai + cfs_size_round(hai->hai_len)); diff --git a/drivers/staging/lustre/lustre/include/lustre_acl.h b/drivers/staging/lustre/lustre/include/lustre_acl.h index 0b6ea0782229..aa4cfa7b749d 100644 --- a/drivers/staging/lustre/lustre/include/lustre_acl.h +++ b/drivers/staging/lustre/lustre/include/lustre_acl.h @@ -37,6 +37,13 @@ #ifndef _LUSTRE_ACL_H #define _LUSTRE_ACL_H -#include "linux/lustre_acl.h" +#include <linux/fs.h> +#include <linux/dcache.h> +#include <linux/posix_acl_xattr.h> + +#define LUSTRE_POSIX_ACL_MAX_ENTRIES 32 +#define LUSTRE_POSIX_ACL_MAX_SIZE \ + (sizeof(posix_acl_xattr_header) + \ + LUSTRE_POSIX_ACL_MAX_ENTRIES * sizeof(posix_acl_xattr_entry)) #endif diff --git a/drivers/staging/lustre/lustre/include/lustre_cfg.h b/drivers/staging/lustre/lustre/include/lustre_cfg.h index 03017fe49d46..7b385b87261a 100644 --- a/drivers/staging/lustre/lustre/include/lustre_cfg.h +++ b/drivers/staging/lustre/lustre/include/lustre_cfg.h @@ -290,4 +290,4 @@ static inline int lustre_cfg_sanity_check(void *buf, int len) /** @} cfg */ -#endif // _LUSTRE_CFG_H +#endif /* _LUSTRE_CFG_H */ diff --git a/drivers/staging/lustre/lustre/include/lustre_disk.h b/drivers/staging/lustre/lustre/include/lustre_disk.h index 7f191eed2a81..515b835ce14d 100644 --- a/drivers/staging/lustre/lustre/include/lustre_disk.h +++ b/drivers/staging/lustre/lustre/include/lustre_disk.h @@ -545,4 +545,4 @@ int mgc_fsname2resid(char *fsname, struct ldlm_res_id *res_id, int type); /** @} disk */ -#endif // _LUSTRE_DISK_H +#endif /* _LUSTRE_DISK_H */ diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h index 30b1812f4bf6..14ac46f45fd1 100644 --- a/drivers/staging/lustre/lustre/include/lustre_dlm.h +++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h @@ -48,8 +48,6 @@ #ifndef _LUSTRE_DLM_H__ #define _LUSTRE_DLM_H__ -#include "linux/lustre_dlm.h" - #include "lustre_lib.h" #include "lustre_net.h" #include "lustre_import.h" @@ -1072,7 +1070,7 @@ extern char *ldlm_it2str(int it); ((libcfs_debug & (mask)) != 0 && \ (libcfs_subsystem_debug & DEBUG_SUBSYSTEM) != 0)) \ _ldlm_lock_debug(lock, msgdata, fmt, ##a); \ -} while(0) +} while (0) void _ldlm_lock_debug(struct ldlm_lock *lock, struct libcfs_debug_msg_data *data, diff --git a/drivers/staging/lustre/lustre/include/lustre_export.h b/drivers/staging/lustre/lustre/include/lustre_export.h index e5f8e86cd887..9c06a49f12a4 100644 --- a/drivers/staging/lustre/lustre/include/lustre_export.h +++ b/drivers/staging/lustre/lustre/include/lustre_export.h @@ -125,14 +125,14 @@ struct nid_stat { #define nidstat_getref(nidstat) \ do { \ atomic_inc(&(nidstat)->nid_exp_ref_count); \ -} while(0) +} while (0) #define nidstat_putref(nidstat) \ do { \ atomic_dec(&(nidstat)->nid_exp_ref_count); \ LASSERTF(atomic_read(&(nidstat)->nid_exp_ref_count) >= 0, \ "stat %p nid_exp_ref_count < 0\n", nidstat); \ -} while(0) +} while (0) enum obd_option { OBD_OPT_FORCE = 0x0001, diff --git a/drivers/staging/lustre/lustre/include/lustre_fid.h b/drivers/staging/lustre/lustre/include/lustre_fid.h index ffb00f171240..2d6fbb4b1b39 100644 --- a/drivers/staging/lustre/lustre/include/lustre_fid.h +++ b/drivers/staging/lustre/lustre/include/lustre_fid.h @@ -469,7 +469,7 @@ void seq_client_flush(struct lu_client_seq *seq); int seq_client_alloc_fid(const struct lu_env *env, struct lu_client_seq *seq, struct lu_fid *fid); int seq_client_get_seq(const struct lu_env *env, struct lu_client_seq *seq, - seqno_t *seqnr); + u64 *seqnr); int seq_site_fini(const struct lu_env *env, struct seq_server_site *ss); /* Fids common stuff */ int fid_is_local(const struct lu_env *env, diff --git a/drivers/staging/lustre/lustre/include/lustre_fld.h b/drivers/staging/lustre/lustre/include/lustre_fld.h index ce6330f9bb50..64c504849a22 100644 --- a/drivers/staging/lustre/lustre/include/lustre_fld.h +++ b/drivers/staging/lustre/lustre/include/lustre_fld.h @@ -137,15 +137,14 @@ void fld_client_fini(struct lu_client_fld *fld); void fld_client_flush(struct lu_client_fld *fld); -int fld_client_lookup(struct lu_client_fld *fld, seqno_t seq, mdsno_t *mds, +int fld_client_lookup(struct lu_client_fld *fld, u64 seq, u32 *mds, __u32 flags, const struct lu_env *env); int fld_client_create(struct lu_client_fld *fld, struct lu_seq_range *range, const struct lu_env *env); -int fld_client_delete(struct lu_client_fld *fld, - seqno_t seq, +int fld_client_delete(struct lu_client_fld *fld, u64 seq, const struct lu_env *env); int fld_client_add_target(struct lu_client_fld *fld, diff --git a/drivers/staging/lustre/lustre/include/lustre_fsfilt.h b/drivers/staging/lustre/lustre/include/lustre_fsfilt.h deleted file mode 100644 index 9749c3f5568e..000000000000 --- a/drivers/staging/lustre/lustre/include/lustre_fsfilt.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/include/lustre_fsfilt.h - * - * Filesystem interface helper. - */ - -#ifndef _LUSTRE_FSFILT_H -#define _LUSTRE_FSFILT_H - -#include "../include/linux/lustre_fsfilt.h" - -#define LU221_BAD_TIME (0x80000000U + 24 * 3600) - -#endif diff --git a/drivers/staging/lustre/lustre/include/lustre_handles.h b/drivers/staging/lustre/lustre/include/lustre_handles.h index 94989c5e361f..726bbd3eaf55 100644 --- a/drivers/staging/lustre/lustre/include/lustre_handles.h +++ b/drivers/staging/lustre/lustre/include/lustre_handles.h @@ -42,7 +42,11 @@ * @{ */ -#include "linux/lustre_handles.h" +#include <linux/atomic.h> +#include <linux/list.h> +#include <linux/rcupdate.h> +#include <linux/spinlock.h> +#include <linux/types.h> #include "../../include/linux/libcfs/libcfs.h" @@ -69,7 +73,7 @@ struct portals_handle { struct portals_handle_ops *h_ops; /* newly added fields to handle the RCU issue. -jxiong */ - cfs_rcu_head_t h_rcu; + struct rcu_head h_rcu; spinlock_t h_lock; unsigned int h_size:31; unsigned int h_in:1; @@ -84,7 +88,7 @@ void class_handle_hash(struct portals_handle *, void class_handle_unhash(struct portals_handle *); void class_handle_hash_back(struct portals_handle *); void *class_handle2object(__u64 cookie); -void class_handle_free_cb(cfs_rcu_head_t *); +void class_handle_free_cb(struct rcu_head *rcu); int class_handle_init(void); void class_handle_cleanup(void); diff --git a/drivers/staging/lustre/lustre/include/lustre_idmap.h b/drivers/staging/lustre/lustre/include/lustre_idmap.h deleted file mode 100644 index 5624b8bae919..000000000000 --- a/drivers/staging/lustre/lustre/include/lustre_idmap.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/lustre/include/lustre_idmap.h - * - * MDS data structures. - * See also lustre_idl.h for wire formats of requests. - */ - -#ifndef _LUSTRE_IDMAP_H -#define _LUSTRE_IDMAP_H - -/** \defgroup idmap idmap - * - * @{ - */ - -#include "../../include/linux/libcfs/libcfs.h" - -#define CFS_NGROUPS_PER_BLOCK ((int)(PAGE_CACHE_SIZE / sizeof(gid_t))) - -#define CFS_GROUP_AT(gi, i) \ - ((gi)->blocks[(i) / CFS_NGROUPS_PER_BLOCK][(i) % CFS_NGROUPS_PER_BLOCK]) - -enum { - CFS_IC_NOTHING = 0, /* convert nothing */ - CFS_IC_ALL = 1, /* convert all items */ - CFS_IC_MAPPED = 2, /* convert mapped uid/gid */ - CFS_IC_UNMAPPED = 3 /* convert unmapped uid/gid */ -}; - -#define CFS_IDMAP_NOTFOUND (-1) - -#define CFS_IDMAP_HASHSIZE 32 - -enum lustre_idmap_idx { - RMT_UIDMAP_IDX, - LCL_UIDMAP_IDX, - RMT_GIDMAP_IDX, - LCL_GIDMAP_IDX, - CFS_IDMAP_N_HASHES -}; - -struct lustre_idmap_table { - spinlock_t lit_lock; - struct list_head lit_idmaps[CFS_IDMAP_N_HASHES][CFS_IDMAP_HASHSIZE]; -}; - -struct lu_ucred; - -extern void lustre_groups_from_list(struct group_info *ginfo, gid_t *glist); -extern void lustre_groups_sort(struct group_info *group_info); -extern int lustre_in_group_p(struct lu_ucred *mu, gid_t grp); - -extern int lustre_idmap_add(struct lustre_idmap_table *t, - uid_t ruid, uid_t luid, - gid_t rgid, gid_t lgid); -extern int lustre_idmap_del(struct lustre_idmap_table *t, - uid_t ruid, uid_t luid, - gid_t rgid, gid_t lgid); -extern int lustre_idmap_lookup_uid(struct lu_ucred *mu, - struct lustre_idmap_table *t, - int reverse, uid_t uid); -extern int lustre_idmap_lookup_gid(struct lu_ucred *mu, - struct lustre_idmap_table *t, - int reverse, gid_t gid); -extern struct lustre_idmap_table *lustre_idmap_init(void); -extern void lustre_idmap_fini(struct lustre_idmap_table *t); - -/** @} idmap */ - -#endif diff --git a/drivers/staging/lustre/lustre/include/lustre_import.h b/drivers/staging/lustre/lustre/include/lustre_import.h index 8304a55b92f9..51f3e98f94e2 100644 --- a/drivers/staging/lustre/lustre/include/lustre_import.h +++ b/drivers/staging/lustre/lustre/include/lustre_import.h @@ -103,9 +103,9 @@ enum lustre_imp_state { }; /** Returns test string representation of numeric import state \a state */ -static inline char * ptlrpc_import_state_name(enum lustre_imp_state state) +static inline char *ptlrpc_import_state_name(enum lustre_imp_state state) { - static char* import_state_names[] = { + static char *import_state_names[] = { "<UNKNOWN>", "CLOSED", "NEW", "DISCONN", "CONNECTING", "REPLAY", "REPLAY_LOCKS", "REPLAY_WAIT", "RECOVER", "FULL", "EVICTED", @@ -346,21 +346,24 @@ static inline unsigned int at_timeout2est(unsigned int val) return (max((val << 2) / 5, 5U) - 4); } -static inline void at_reset(struct adaptive_timeout *at, int val) { +static inline void at_reset(struct adaptive_timeout *at, int val) +{ spin_lock(&at->at_lock); at->at_current = val; at->at_worst_ever = val; at->at_worst_time = get_seconds(); spin_unlock(&at->at_lock); } -static inline void at_init(struct adaptive_timeout *at, int val, int flags) { +static inline void at_init(struct adaptive_timeout *at, int val, int flags) +{ memset(at, 0, sizeof(*at)); spin_lock_init(&at->at_lock); at->at_flags = flags; at_reset(at, val); } extern unsigned int at_min; -static inline int at_get(struct adaptive_timeout *at) { +static inline int at_get(struct adaptive_timeout *at) +{ return (at->at_current > at_min) ? at->at_current : at_min; } int at_measured(struct adaptive_timeout *at, unsigned int val); diff --git a/drivers/staging/lustre/lustre/include/linux/lustre_intent.h b/drivers/staging/lustre/lustre/include/lustre_intent.h index c491d52d86a2..c491d52d86a2 100644 --- a/drivers/staging/lustre/lustre/include/linux/lustre_intent.h +++ b/drivers/staging/lustre/lustre/include/lustre_intent.h diff --git a/drivers/staging/lustre/lustre/include/lustre_lib.h b/drivers/staging/lustre/lustre/include/lustre_lib.h index de493fabab46..12c7590e61fa 100644 --- a/drivers/staging/lustre/lustre/include/lustre_lib.h +++ b/drivers/staging/lustre/lustre/include/lustre_lib.h @@ -46,27 +46,36 @@ * @{ */ +#include <linux/sched.h> +#include <linux/signal.h> +#include <linux/types.h> #include "../../include/linux/libcfs/libcfs.h" #include "lustre/lustre_idl.h" #include "lustre_ver.h" #include "lustre_cfg.h" -#include "linux/lustre_lib.h" /* target.c */ +struct kstatfs; struct ptlrpc_request; struct obd_export; struct lu_target; struct l_wait_info; #include "lustre_ha.h" #include "lustre_net.h" -#include "lvfs.h" +#define LI_POISON 0x5a5a5a5a +#if BITS_PER_LONG > 32 +# define LL_POISON 0x5a5a5a5a5a5a5a5aL +#else +# define LL_POISON 0x5a5a5a5aL +#endif +#define LP_POISON ((void *)LL_POISON) int target_pack_pool_reply(struct ptlrpc_request *req); int do_set_info_async(struct obd_import *imp, int opcode, int version, - obd_count keylen, void *key, - obd_count vallen, void *val, + u32 keylen, void *key, + u32 vallen, void *val, struct ptlrpc_request_set *set); #define OBD_RECOVERY_MAX_TIME (obd_timeout * 18) /* b13079 */ @@ -133,8 +142,8 @@ struct obd_ioctl_data { struct obdo ioc_obdo1; struct obdo ioc_obdo2; - obd_size ioc_count; - obd_off ioc_offset; + u64 ioc_count; + u64 ioc_offset; __u32 ioc_dev; __u32 ioc_command; @@ -269,6 +278,8 @@ static inline void obd_ioctl_freedata(char *buf, int len) * we change _IOR to _IOWR so BSD will copyin obd_ioctl_data * for us. Does this change affect Linux? (XXX Liang) */ +#define OBD_IOC_DATA_TYPE long + #define OBD_IOC_CREATE _IOWR('f', 101, OBD_IOC_DATA_TYPE) #define OBD_IOC_DESTROY _IOW ('f', 104, OBD_IOC_DATA_TYPE) #define OBD_IOC_PREALLOCATE _IOWR('f', 105, OBD_IOC_DATA_TYPE) @@ -508,6 +519,10 @@ struct l_wait_info { #define LWI_INTR(cb, data) LWI_TIMEOUT_INTR(0, NULL, cb, data) +#define LUSTRE_FATAL_SIGS (sigmask(SIGKILL) | sigmask(SIGINT) | \ + sigmask(SIGTERM) | sigmask(SIGQUIT) | \ + sigmask(SIGALRM)) + /* * wait for @condition to become true, but no longer than timeout, specified diff --git a/drivers/staging/lustre/lustre/include/lustre_linkea.h b/drivers/staging/lustre/lustre/include/lustre_linkea.h deleted file mode 100644 index 500ace30cfbf..000000000000 --- a/drivers/staging/lustre/lustre/include/lustre_linkea.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * version 2 along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 021110-1307, USA - * - * GPL HEADER END - */ -/* - * Copyright (c) 2013, Intel Corporation. - * Use is subject to license terms. - * - * Author: di wang <di.wang@intel.com> - */ - -struct linkea_data { - /** - * Buffer to keep link EA body. - */ - struct lu_buf *ld_buf; - /** - * The matched header, entry and its length in the EA - */ - struct link_ea_header *ld_leh; - struct link_ea_entry *ld_lee; - int ld_reclen; -}; - -int linkea_data_new(struct linkea_data *ldata, struct lu_buf *buf); -int linkea_init(struct linkea_data *ldata); -void linkea_entry_unpack(const struct link_ea_entry *lee, int *reclen, - struct lu_name *lname, struct lu_fid *pfid); -int linkea_add_buf(struct linkea_data *ldata, const struct lu_name *lname, - const struct lu_fid *pfid); -void linkea_del_buf(struct linkea_data *ldata, const struct lu_name *lname); -int linkea_links_find(struct linkea_data *ldata, const struct lu_name *lname, - const struct lu_fid *pfid); - -#define LINKEA_NEXT_ENTRY(ldata) \ - (struct link_ea_entry *)((char *)ldata.ld_lee + ldata.ld_reclen) - -#define LINKEA_FIRST_ENTRY(ldata) \ - (struct link_ea_entry *)(ldata.ld_leh + 1) diff --git a/drivers/staging/lustre/lustre/include/lustre_lite.h b/drivers/staging/lustre/lustre/include/lustre_lite.h index eee900638720..df557c22abbe 100644 --- a/drivers/staging/lustre/lustre/include/lustre_lite.h +++ b/drivers/staging/lustre/lustre/include/lustre_lite.h @@ -45,7 +45,6 @@ #include "linux/lustre_lite.h" #include "obd_class.h" -#include "obd_ost.h" #include "lustre_net.h" #include "lustre_mds.h" #include "lustre_ha.h" @@ -60,7 +59,7 @@ struct lustre_rw_params { int lrp_lock_mode; ldlm_policy_data_t lrp_policy; - obd_flag lrp_brw_flags; + u32 lrp_brw_flags; int lrp_ast_flags; }; diff --git a/drivers/staging/lustre/lustre/include/lustre_log.h b/drivers/staging/lustre/lustre/include/lustre_log.h index d02ea24a7e40..2187fb615e9a 100644 --- a/drivers/staging/lustre/lustre/include/lustre_log.h +++ b/drivers/staging/lustre/lustre/include/lustre_log.h @@ -56,10 +56,7 @@ * @{ */ -#include "linux/lustre_log.h" - #include "obd_class.h" -#include "obd_ost.h" #include "lustre/lustre_idl.h" #include "dt_object.h" @@ -209,15 +206,6 @@ int llog_sync(struct llog_ctxt *ctxt, struct obd_export *exp, int flags); int llog_cancel(const struct lu_env *env, struct llog_ctxt *ctxt, struct llog_cookie *cookies, int flags); -int obd_llog_init(struct obd_device *obd, struct obd_llog_group *olg, - struct obd_device *disk_obd, int *idx); - -int obd_llog_finish(struct obd_device *obd, int count); - -/* llog_ioctl.c */ -int llog_ioctl(const struct lu_env *env, struct llog_ctxt *ctxt, int cmd, - struct obd_ioctl_data *data); - /* llog_net.c */ int llog_initiator_connect(struct llog_ctxt *ctxt); @@ -315,18 +303,6 @@ struct llog_handle { atomic_t lgh_refcount; }; -/* llog_lvfs.c */ -extern struct llog_operations llog_lvfs_ops; - -/* llog_osd.c */ -extern struct llog_operations llog_osd_ops; -int llog_osd_get_cat_list(const struct lu_env *env, struct dt_device *d, - int idx, int count, - struct llog_catid *idarray); -int llog_osd_put_cat_list(const struct lu_env *env, struct dt_device *d, - int idx, int count, - struct llog_catid *idarray); - #define LLOG_CTXT_FLAG_UNINITIALIZED 0x00000001 #define LLOG_CTXT_FLAG_STOP 0x00000002 @@ -461,7 +437,7 @@ static inline int llog_group_ctxt_null(struct obd_llog_group *olg, int index) static inline int llog_ctxt_null(struct obd_device *obd, int index) { - return (llog_group_ctxt_null(&obd->obd_olg, index)); + return llog_group_ctxt_null(&obd->obd_olg, index); } static inline int llog_destroy(const struct lu_env *env, diff --git a/drivers/staging/lustre/lustre/include/lustre_mdc.h b/drivers/staging/lustre/lustre/include/lustre_mdc.h index 39bbc3634b06..b1b05c8a371a 100644 --- a/drivers/staging/lustre/lustre/include/lustre_mdc.h +++ b/drivers/staging/lustre/lustre/include/lustre_mdc.h @@ -50,7 +50,7 @@ #include <linux/fs.h> #include <linux/dcache.h> -#include "linux/lustre_intent.h" +#include "lustre_intent.h" #include "lustre_handles.h" #include "../../include/linux/libcfs/libcfs.h" #include "obd_class.h" diff --git a/drivers/staging/lustre/lustre/include/lustre_net.h b/drivers/staging/lustre/lustre/include/lustre_net.h index d6af2ca3acdb..0a024d3cfeb7 100644 --- a/drivers/staging/lustre/lustre/include/lustre_net.h +++ b/drivers/staging/lustre/lustre/include/lustre_net.h @@ -55,8 +55,6 @@ * @{ */ -#include "linux/lustre_net.h" - #include "../../include/linux/libcfs/libcfs.h" // #include <obd.h> #include "../../include/linux/lnet/lnet.h" @@ -1183,276 +1181,6 @@ struct nrs_fifo_req { /** @} fifo */ /** - * \name CRR-N - * - * CRR-N, Client Round Robin over NIDs - * @{ - */ - -/** - * private data structure for CRR-N NRS - */ -struct nrs_crrn_net { - struct ptlrpc_nrs_resource cn_res; - cfs_binheap_t *cn_binheap; - struct cfs_hash *cn_cli_hash; - /** - * Used when a new scheduling round commences, in order to synchronize - * all clients with the new round number. - */ - __u64 cn_round; - /** - * Determines the relevant ordering amongst request batches within a - * scheduling round. - */ - __u64 cn_sequence; - /** - * Round Robin quantum; the maximum number of RPCs that each request - * batch for each client can have in a scheduling round. - */ - __u16 cn_quantum; -}; - -/** - * Object representing a client in CRR-N, as identified by its NID - */ -struct nrs_crrn_client { - struct ptlrpc_nrs_resource cc_res; - struct hlist_node cc_hnode; - lnet_nid_t cc_nid; - /** - * The round number against which this client is currently scheduling - * requests. - */ - __u64 cc_round; - /** - * The sequence number used for requests scheduled by this client during - * the current round number. - */ - __u64 cc_sequence; - atomic_t cc_ref; - /** - * Round Robin quantum; the maximum number of RPCs the client is allowed - * to schedule in a single batch of each round. - */ - __u16 cc_quantum; - /** - * # of pending requests for this client, on all existing rounds - */ - __u16 cc_active; -}; - -/** - * CRR-N NRS request definition - */ -struct nrs_crrn_req { - /** - * Round number for this request; shared with all other requests in the - * same batch. - */ - __u64 cr_round; - /** - * Sequence number for this request; shared with all other requests in - * the same batch. - */ - __u64 cr_sequence; -}; - -/** - * CRR-N policy operations. - */ -enum nrs_ctl_crr { - /** - * Read the RR quantum size of a CRR-N policy. - */ - NRS_CTL_CRRN_RD_QUANTUM = PTLRPC_NRS_CTL_1ST_POL_SPEC, - /** - * Write the RR quantum size of a CRR-N policy. - */ - NRS_CTL_CRRN_WR_QUANTUM, -}; - -/** @} CRR-N */ - -/** - * \name ORR/TRR - * - * ORR/TRR (Object-based Round Robin/Target-based Round Robin) NRS policies - * @{ - */ - -/** - * Lower and upper byte offsets of a brw RPC - */ -struct nrs_orr_req_range { - __u64 or_start; - __u64 or_end; -}; - -/** - * RPC types supported by the ORR/TRR policies - */ -enum nrs_orr_supp { - NOS_OST_READ = (1 << 0), - NOS_OST_WRITE = (1 << 1), - NOS_OST_RW = (NOS_OST_READ | NOS_OST_WRITE), - /** - * Default value for policies. - */ - NOS_DFLT = NOS_OST_READ -}; - -/** - * As unique keys for grouping RPCs together, we use the object's OST FID for - * the ORR policy, and the OST index for the TRR policy. - * - * XXX: We waste some space for TRR policy instances by using a union, but it - * allows to consolidate some of the code between ORR and TRR, and these - * policies will probably eventually merge into one anyway. - */ -struct nrs_orr_key { - union { - /** object FID for ORR */ - struct lu_fid ok_fid; - /** OST index for TRR */ - __u32 ok_idx; - }; -}; - -/** - * The largest base string for unique hash/slab object names is - * "nrs_orr_reg_", so 13 characters. We add 3 to this to be used for the CPT - * id number, so this _should_ be more than enough for the maximum number of - * CPTs on any system. If it does happen that this statement is incorrect, - * nrs_orr_genobjname() will inevitably yield a non-unique name and cause - * kmem_cache_create() to complain (on Linux), so the erroneous situation - * will hopefully not go unnoticed. - */ -#define NRS_ORR_OBJ_NAME_MAX (sizeof("nrs_orr_reg_") + 3) - -/** - * private data structure for ORR and TRR NRS - */ -struct nrs_orr_data { - struct ptlrpc_nrs_resource od_res; - cfs_binheap_t *od_binheap; - struct cfs_hash *od_obj_hash; - struct kmem_cache *od_cache; - /** - * Used when a new scheduling round commences, in order to synchronize - * all object or OST batches with the new round number. - */ - __u64 od_round; - /** - * Determines the relevant ordering amongst request batches within a - * scheduling round. - */ - __u64 od_sequence; - /** - * RPC types that are currently supported. - */ - enum nrs_orr_supp od_supp; - /** - * Round Robin quantum; the maximum number of RPCs that each request - * batch for each object or OST can have in a scheduling round. - */ - __u16 od_quantum; - /** - * Whether to use physical disk offsets or logical file offsets. - */ - bool od_physical; - /** - * XXX: We need to provide a persistently allocated string to hold - * unique object names for this policy, since in currently supported - * versions of Linux by Lustre, kmem_cache_create() just sets a pointer - * to the name string provided. kstrdup() is used in the version of - * kmeme_cache_create() in current Linux mainline, so we may be able to - * remove this in the future. - */ - char od_objname[NRS_ORR_OBJ_NAME_MAX]; -}; - -/** - * Represents a backend-fs object or OST in the ORR and TRR policies - * respectively - */ -struct nrs_orr_object { - struct ptlrpc_nrs_resource oo_res; - struct hlist_node oo_hnode; - /** - * The round number against which requests are being scheduled for this - * object or OST - */ - __u64 oo_round; - /** - * The sequence number used for requests scheduled for this object or - * OST during the current round number. - */ - __u64 oo_sequence; - /** - * The key of the object or OST for which this structure instance is - * scheduling RPCs - */ - struct nrs_orr_key oo_key; - atomic_t oo_ref; - /** - * Round Robin quantum; the maximum number of RPCs that are allowed to - * be scheduled for the object or OST in a single batch of each round. - */ - __u16 oo_quantum; - /** - * # of pending requests for this object or OST, on all existing rounds - */ - __u16 oo_active; -}; - -/** - * ORR/TRR NRS request definition - */ -struct nrs_orr_req { - /** - * The offset range this request covers - */ - struct nrs_orr_req_range or_range; - /** - * Round number for this request; shared with all other requests in the - * same batch. - */ - __u64 or_round; - /** - * Sequence number for this request; shared with all other requests in - * the same batch. - */ - __u64 or_sequence; - /** - * For debugging purposes. - */ - struct nrs_orr_key or_key; - /** - * An ORR policy instance has filled in request information while - * enqueueing the request on the service partition's regular NRS head. - */ - unsigned int or_orr_set:1; - /** - * A TRR policy instance has filled in request information while - * enqueueing the request on the service partition's regular NRS head. - */ - unsigned int or_trr_set:1; - /** - * Request offset ranges have been filled in with logical offset - * values. - */ - unsigned int or_logical_set:1; - /** - * Request offset ranges have been filled in with physical offset - * values. - */ - unsigned int or_physical_set:1; -}; - -/** @} ORR/TRR */ - -/** * NRS request * * Instances of this object exist embedded within ptlrpc_request; the main @@ -1476,7 +1204,6 @@ struct ptlrpc_nrs_request { unsigned nr_enqueued:1; unsigned nr_started:1; unsigned nr_finalized:1; - cfs_binheap_node_t nr_node; /** * Policy-specific fields, used for determining a request's scheduling @@ -1487,12 +1214,6 @@ struct ptlrpc_nrs_request { * Fields for the FIFO policy */ struct nrs_fifo_req fifo; - /** - * CRR-N request definition - */ - struct nrs_crrn_req crr; - /** ORR and TRR share the same request definition */ - struct nrs_orr_req orr; } nr_u; /** * Externally-registering policies may want to use this to allocate @@ -1966,7 +1687,7 @@ do { \ ((libcfs_debug & (mask)) != 0 && \ (libcfs_subsystem_debug & DEBUG_SUBSYSTEM) != 0)) \ _debug_req((req), msgdata, fmt, ##a); \ -} while(0) +} while (0) /** * This is the debug print function you need to use to print request structure @@ -2912,11 +2633,13 @@ __u32 lustre_msg_calc_cksum(struct lustre_msg *msg, int compat18); # warning "remove checksum compatibility support for b1_8" __u32 lustre_msg_calc_cksum(struct lustre_msg *msg); #endif -void lustre_msg_set_handle(struct lustre_msg *msg,struct lustre_handle *handle); +void lustre_msg_set_handle(struct lustre_msg *msg, + struct lustre_handle *handle); void lustre_msg_set_type(struct lustre_msg *msg, __u32 type); void lustre_msg_set_opc(struct lustre_msg *msg, __u32 opc); void lustre_msg_set_last_xid(struct lustre_msg *msg, __u64 last_xid); -void lustre_msg_set_last_committed(struct lustre_msg *msg,__u64 last_committed); +void lustre_msg_set_last_committed(struct lustre_msg *msg, + __u64 last_committed); void lustre_msg_set_versions(struct lustre_msg *msg, __u64 *versions); void lustre_msg_set_transno(struct lustre_msg *msg, __u64 transno); void lustre_msg_set_status(struct lustre_msg *msg, __u32 status); @@ -3173,7 +2896,7 @@ int ptlrpc_add_timeout_client(int time, enum timeout_event event, struct list_head *obd_list); int ptlrpc_del_timeout_client(struct list_head *obd_list, enum timeout_event event); -struct ptlrpc_request * ptlrpc_prep_ping(struct obd_import *imp); +struct ptlrpc_request *ptlrpc_prep_ping(struct obd_import *imp); int ptlrpc_obd_ping(struct obd_device *obd); void ping_evictor_start(void); void ping_evictor_stop(void); diff --git a/drivers/staging/lustre/lustre/include/lustre_quota.h b/drivers/staging/lustre/lustre/include/lustre_quota.h index 1ae72e3ff1bf..2643f28070a2 100644 --- a/drivers/staging/lustre/lustre/include/lustre_quota.h +++ b/drivers/staging/lustre/lustre/include/lustre_quota.h @@ -32,7 +32,9 @@ * */ -#include "linux/lustre_quota.h" +#include <linux/fs.h> +#include <linux/quota.h> +#include <linux/quotaops.h> #include "dt_object.h" #include "lustre_fid.h" diff --git a/drivers/staging/lustre/lustre/include/lustre_sec.h b/drivers/staging/lustre/lustre/include/lustre_sec.h index dc31bf93a1d7..dff70a5b9bc4 100644 --- a/drivers/staging/lustre/lustre/include/lustre_sec.h +++ b/drivers/staging/lustre/lustre/include/lustre_sec.h @@ -347,9 +347,6 @@ void sptlrpc_conf_log_stop(const char *logname); void sptlrpc_conf_log_update_begin(const char *logname); void sptlrpc_conf_log_update_end(const char *logname); void sptlrpc_conf_client_adapt(struct obd_device *obd); -int sptlrpc_conf_target_get_rules(struct obd_device *obd, - struct sptlrpc_rule_set *rset, - int initial); void sptlrpc_target_choose_flavor(struct sptlrpc_rule_set *rset, enum lustre_sec_part from, lnet_nid_t nid, @@ -885,7 +882,7 @@ enum sptlrpc_bulk_hash_alg { BULK_HASH_ALG_MAX }; -const char * sptlrpc_get_hash_name(__u8 hash_alg); +const char *sptlrpc_get_hash_name(__u8 hash_alg); __u8 sptlrpc_get_hash_alg(const char *algname); enum { @@ -1060,7 +1057,7 @@ void sptlrpc_gc_del_sec(struct ptlrpc_sec *sec); void sptlrpc_gc_add_ctx(struct ptlrpc_cli_ctx *ctx); /* misc */ -const char * sec2target_str(struct ptlrpc_sec *sec); +const char *sec2target_str(struct ptlrpc_sec *sec); /* * lprocfs */ diff --git a/drivers/staging/lustre/lustre/include/lustre_ver.h b/drivers/staging/lustre/lustre/include/lustre_ver.h index dc187b8f741f..caa4da12f37a 100644 --- a/drivers/staging/lustre/lustre/include/lustre_ver.h +++ b/drivers/staging/lustre/lustre/include/lustre_ver.h @@ -10,7 +10,9 @@ #define LUSTRE_FIX 0 #define LUSTRE_VERSION_STRING "2.3.64" -#define LUSTRE_VERSION_CODE OBD_OCD_VERSION(LUSTRE_MAJOR,LUSTRE_MINOR,LUSTRE_PATCH,LUSTRE_FIX) +#define LUSTRE_VERSION_CODE OBD_OCD_VERSION(LUSTRE_MAJOR, \ + LUSTRE_MINOR, LUSTRE_PATCH, \ + LUSTRE_FIX) /* liblustre clients are only allowed to connect if their LUSTRE_FIX mismatches * by this amount (set in lustre/autoconf/lustre-version.ac). */ diff --git a/drivers/staging/lustre/lustre/include/lvfs.h b/drivers/staging/lustre/lustre/include/lvfs.h deleted file mode 100644 index 32dcd57c47cc..000000000000 --- a/drivers/staging/lustre/lustre/include/lvfs.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2007, 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. - * - * lustre/include/lvfs.h - * - * lustre VFS/process permission interface - */ - -#ifndef __LVFS_H__ -#define __LVFS_H__ - -#define LL_FID_NAMELEN (16 + 1 + 8 + 1) - -#include "../../include/linux/libcfs/libcfs.h" -#include "linux/lvfs.h" - -#include "../../include/linux/libcfs/lucache.h" - - -/* lvfs_common.c */ -struct dentry *lvfs_fid2dentry(struct lvfs_run_ctxt *, __u64, __u32, __u64 ,void *data); - -void push_ctxt(struct lvfs_run_ctxt *save, struct lvfs_run_ctxt *new_ctx, - struct lvfs_ucred *cred); -void pop_ctxt(struct lvfs_run_ctxt *saved, struct lvfs_run_ctxt *new_ctx, - struct lvfs_ucred *cred); -#endif diff --git a/drivers/staging/lustre/lustre/include/md_object.h b/drivers/staging/lustre/lustre/include/md_object.h deleted file mode 100644 index 2e5d55030a63..000000000000 --- a/drivers/staging/lustre/lustre/include/md_object.h +++ /dev/null @@ -1,903 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/include/md_object.h - * - * Extension of lu_object.h for metadata objects - */ - -#ifndef _LUSTRE_MD_OBJECT_H -#define _LUSTRE_MD_OBJECT_H - -/** \defgroup md md - * Sub-class of lu_object with methods common for "meta-data" objects in MDT - * stack. - * - * Meta-data objects implement namespace operations: you can link, unlink - * them, and treat them as directories. - * - * Examples: mdt, cmm, and mdt are implementations of md interface. - * @{ - */ - - -/* - * super-class definitions. - */ -#include "dt_object.h" - -struct md_device; -struct md_device_operations; -struct md_object; -struct obd_export; - -enum { - UCRED_INVALID = -1, - UCRED_INIT = 0, - UCRED_OLD = 1, - UCRED_NEW = 2 -}; - -enum { - MD_CAPAINFO_MAX = 5 -}; - -/** there are at most 5 fids in one operation, see rename, NOTE the last one - * is a temporary one used for is_subdir() */ -struct md_capainfo { - __u32 mc_auth; - __u32 mc_padding; - struct lu_fid mc_fid[MD_CAPAINFO_MAX]; - struct lustre_capa *mc_capa[MD_CAPAINFO_MAX]; -}; - -struct md_quota { - struct obd_export *mq_exp; -}; - -/** - * Implemented in mdd/mdd_handler.c. - * - * XXX should be moved into separate .h/.c together with all md security - * related definitions. - */ -struct md_capainfo *md_capainfo(const struct lu_env *env); -struct md_quota *md_quota(const struct lu_env *env); - -/** metadata attributes */ -enum ma_valid { - MA_INODE = (1 << 0), - MA_LOV = (1 << 1), - MA_COOKIE = (1 << 2), - MA_FLAGS = (1 << 3), - MA_LMV = (1 << 4), - MA_ACL_DEF = (1 << 5), - MA_LOV_DEF = (1 << 6), - MA_LAY_GEN = (1 << 7), - MA_HSM = (1 << 8), - MA_SOM = (1 << 9), - MA_PFID = (1 << 10) -}; - -typedef enum { - MDL_MINMODE = 0, - MDL_EX = 1, - MDL_PW = 2, - MDL_PR = 4, - MDL_CW = 8, - MDL_CR = 16, - MDL_NL = 32, - MDL_GROUP = 64, - MDL_MAXMODE -} mdl_mode_t; - -typedef enum { - MDT_NUL_LOCK = 0, - MDT_REG_LOCK = (1 << 0), - MDT_PDO_LOCK = (1 << 1) -} mdl_type_t; - -/* memory structure for hsm attributes - * for fields description see the on disk structure hsm_attrs - * which is defined in lustre_idl.h - */ -struct md_hsm { - __u32 mh_compat; - __u32 mh_flags; - __u64 mh_arch_id; - __u64 mh_arch_ver; -}; - -#define IOEPOCH_INVAL 0 - -/* memory structure for som attributes - * for fields description see the on disk structure som_attrs - * which is defined in lustre_idl.h - */ -struct md_som_data { - __u32 msd_compat; - __u32 msd_incompat; - __u64 msd_ioepoch; - __u64 msd_size; - __u64 msd_blocks; - __u64 msd_mountid; -}; - -struct md_attr { - __u64 ma_valid; - __u64 ma_need; - __u64 ma_attr_flags; - struct lu_attr ma_attr; - struct lu_fid ma_pfid; - struct md_hsm ma_hsm; - struct lov_mds_md *ma_lmm; - struct lmv_stripe_md *ma_lmv; - void *ma_acl; - struct llog_cookie *ma_cookie; - struct lustre_capa *ma_capa; - struct md_som_data *ma_som; - int ma_lmm_size; - int ma_lmv_size; - int ma_acl_size; - int ma_cookie_size; - __u16 ma_layout_gen; -}; - -/** Additional parameters for create */ -struct md_op_spec { - union { - /** symlink target */ - const char *sp_symname; - /** parent FID for cross-ref mkdir */ - const struct lu_fid *sp_pfid; - /** eadata for regular files */ - struct md_spec_reg { - /** lov objs exist already */ - const struct lu_fid *fid; - const void *eadata; - int eadatalen; - } sp_ea; - } u; - - /** Create flag from client: such as MDS_OPEN_CREAT, and others. */ - __u64 sp_cr_flags; - - /** don't create lov objects or llog cookie - this replay */ - unsigned int no_create:1, - sp_cr_lookup:1, /* do lookup sanity check or not. */ - sp_rm_entry:1; /* only remove name entry */ - - /** Current lock mode for parent dir where create is performing. */ - mdl_mode_t sp_cr_mode; - - /** to create directory */ - const struct dt_index_features *sp_feat; -}; - -/** - * Operations implemented for each md object (both directory and leaf). - */ -struct md_object_operations { - int (*moo_permission)(const struct lu_env *env, - struct md_object *pobj, struct md_object *cobj, - struct md_attr *attr, int mask); - - int (*moo_attr_get)(const struct lu_env *env, struct md_object *obj, - struct md_attr *attr); - - int (*moo_attr_set)(const struct lu_env *env, struct md_object *obj, - const struct md_attr *attr); - - int (*moo_xattr_get)(const struct lu_env *env, struct md_object *obj, - struct lu_buf *buf, const char *name); - - int (*moo_xattr_list)(const struct lu_env *env, struct md_object *obj, - struct lu_buf *buf); - - int (*moo_xattr_set)(const struct lu_env *env, struct md_object *obj, - const struct lu_buf *buf, const char *name, - int fl); - - int (*moo_xattr_del)(const struct lu_env *env, struct md_object *obj, - const char *name); - - /** This method is used to swap the layouts between 2 objects */ - int (*moo_swap_layouts)(const struct lu_env *env, - struct md_object *obj1, struct md_object *obj2, - __u64 flags); - - /** \retval number of bytes actually read upon success */ - int (*moo_readpage)(const struct lu_env *env, struct md_object *obj, - const struct lu_rdpg *rdpg); - - int (*moo_readlink)(const struct lu_env *env, struct md_object *obj, - struct lu_buf *buf); - int (*moo_changelog)(const struct lu_env *env, - enum changelog_rec_type type, int flags, - struct md_object *obj); - /** part of cross-ref operation */ - int (*moo_object_create)(const struct lu_env *env, - struct md_object *obj, - const struct md_op_spec *spec, - struct md_attr *ma); - - int (*moo_ref_add)(const struct lu_env *env, - struct md_object *obj, - const struct md_attr *ma); - - int (*moo_ref_del)(const struct lu_env *env, - struct md_object *obj, - struct md_attr *ma); - - int (*moo_open)(const struct lu_env *env, - struct md_object *obj, int flag); - - int (*moo_close)(const struct lu_env *env, struct md_object *obj, - struct md_attr *ma, int mode); - - int (*moo_capa_get)(const struct lu_env *, struct md_object *, - struct lustre_capa *, int renewal); - - int (*moo_object_sync)(const struct lu_env *, struct md_object *); - - int (*moo_file_lock)(const struct lu_env *env, struct md_object *obj, - struct lov_mds_md *lmm, struct ldlm_extent *extent, - struct lustre_handle *lockh); - int (*moo_file_unlock)(const struct lu_env *env, struct md_object *obj, - struct lov_mds_md *lmm, - struct lustre_handle *lockh); - int (*moo_object_lock)(const struct lu_env *env, struct md_object *obj, - struct lustre_handle *lh, - struct ldlm_enqueue_info *einfo, - void *policy); -}; - -/** - * Operations implemented for each directory object. - */ -struct md_dir_operations { - int (*mdo_is_subdir) (const struct lu_env *env, struct md_object *obj, - const struct lu_fid *fid, struct lu_fid *sfid); - - int (*mdo_lookup)(const struct lu_env *env, struct md_object *obj, - const struct lu_name *lname, struct lu_fid *fid, - struct md_op_spec *spec); - - mdl_mode_t (*mdo_lock_mode)(const struct lu_env *env, - struct md_object *obj, - mdl_mode_t mode); - - int (*mdo_create)(const struct lu_env *env, struct md_object *pobj, - const struct lu_name *lname, struct md_object *child, - struct md_op_spec *spec, - struct md_attr *ma); - - /** This method is used for creating data object for this meta object*/ - int (*mdo_create_data)(const struct lu_env *env, struct md_object *p, - struct md_object *o, - const struct md_op_spec *spec, - struct md_attr *ma); - - int (*mdo_rename)(const struct lu_env *env, struct md_object *spobj, - struct md_object *tpobj, const struct lu_fid *lf, - const struct lu_name *lsname, struct md_object *tobj, - const struct lu_name *ltname, struct md_attr *ma); - - int (*mdo_link)(const struct lu_env *env, struct md_object *tgt_obj, - struct md_object *src_obj, const struct lu_name *lname, - struct md_attr *ma); - - int (*mdo_unlink)(const struct lu_env *env, struct md_object *pobj, - struct md_object *cobj, const struct lu_name *lname, - struct md_attr *ma, int no_name); - - /** This method is used to compare a requested layout to an existing - * layout (struct lov_mds_md_v1/3 vs struct lov_mds_md_v1/3) */ - int (*mdo_lum_lmm_cmp)(const struct lu_env *env, - struct md_object *cobj, - const struct md_op_spec *spec, - struct md_attr *ma); - - /** partial ops for cross-ref case */ - int (*mdo_name_insert)(const struct lu_env *env, - struct md_object *obj, - const struct lu_name *lname, - const struct lu_fid *fid, - const struct md_attr *ma); - - int (*mdo_name_remove)(const struct lu_env *env, - struct md_object *obj, - const struct lu_name *lname, - const struct md_attr *ma); - - int (*mdo_rename_tgt)(const struct lu_env *env, struct md_object *pobj, - struct md_object *tobj, const struct lu_fid *fid, - const struct lu_name *lname, struct md_attr *ma); -}; - -struct md_device_operations { - /** meta-data device related handlers. */ - int (*mdo_root_get)(const struct lu_env *env, struct md_device *m, - struct lu_fid *f); - - int (*mdo_maxeasize_get)(const struct lu_env *env, struct md_device *m, - int *easize); - - int (*mdo_statfs)(const struct lu_env *env, struct md_device *m, - struct obd_statfs *sfs); - - int (*mdo_init_capa_ctxt)(const struct lu_env *env, struct md_device *m, - int mode, unsigned long timeout, __u32 alg, - struct lustre_capa_key *keys); - - int (*mdo_update_capa_key)(const struct lu_env *env, - struct md_device *m, - struct lustre_capa_key *key); - - int (*mdo_llog_ctxt_get)(const struct lu_env *env, - struct md_device *m, int idx, void **h); - - int (*mdo_iocontrol)(const struct lu_env *env, struct md_device *m, - unsigned int cmd, int len, void *data); -}; - -enum md_upcall_event { - /** Sync the md layer*/ - MD_LOV_SYNC = (1 << 0), - /** Just for split, no need trans, for replay */ - MD_NO_TRANS = (1 << 1), - MD_LOV_CONFIG = (1 << 2), - /** Trigger quota recovery */ - MD_LOV_QUOTA = (1 << 3) -}; - -struct md_upcall { - /** this lock protects upcall using against its removal - * read lock is for usage the upcall, write - for init/fini */ - struct rw_semaphore mu_upcall_sem; - /** device to call, upper layer normally */ - struct md_device *mu_upcall_dev; - /** upcall function */ - int (*mu_upcall)(const struct lu_env *env, struct md_device *md, - enum md_upcall_event ev, void *data); -}; - -struct md_device { - struct lu_device md_lu_dev; - const struct md_device_operations *md_ops; - struct md_upcall md_upcall; -}; - -static inline void md_upcall_init(struct md_device *m, void *upcl) -{ - init_rwsem(&m->md_upcall.mu_upcall_sem); - m->md_upcall.mu_upcall_dev = NULL; - m->md_upcall.mu_upcall = upcl; -} - -static inline void md_upcall_dev_set(struct md_device *m, struct md_device *up) -{ - down_write(&m->md_upcall.mu_upcall_sem); - m->md_upcall.mu_upcall_dev = up; - up_write(&m->md_upcall.mu_upcall_sem); -} - -static inline void md_upcall_fini(struct md_device *m) -{ - down_write(&m->md_upcall.mu_upcall_sem); - m->md_upcall.mu_upcall_dev = NULL; - m->md_upcall.mu_upcall = NULL; - up_write(&m->md_upcall.mu_upcall_sem); -} - -static inline int md_do_upcall(const struct lu_env *env, struct md_device *m, - enum md_upcall_event ev, void *data) -{ - int rc = 0; - down_read(&m->md_upcall.mu_upcall_sem); - if (m->md_upcall.mu_upcall_dev != NULL && - m->md_upcall.mu_upcall_dev->md_upcall.mu_upcall != NULL) { - rc = m->md_upcall.mu_upcall_dev->md_upcall.mu_upcall(env, - m->md_upcall.mu_upcall_dev, - ev, data); - } - up_read(&m->md_upcall.mu_upcall_sem); - return rc; -} - -struct md_object { - struct lu_object mo_lu; - const struct md_object_operations *mo_ops; - const struct md_dir_operations *mo_dir_ops; -}; - -/** - * seq-server site. - */ -struct seq_server_site { - struct lu_site *ss_lu; - /** - * mds number of this site. - */ - mdsno_t ss_node_id; - /** - * Fid location database - */ - struct lu_server_fld *ss_server_fld; - struct lu_client_fld *ss_client_fld; - - /** - * Server Seq Manager - */ - struct lu_server_seq *ss_server_seq; - - /** - * Controller Seq Manager - */ - struct lu_server_seq *ss_control_seq; - struct obd_export *ss_control_exp; - - /** - * Client Seq Manager - */ - struct lu_client_seq *ss_client_seq; -}; - -static inline struct md_device *lu2md_dev(const struct lu_device *d) -{ - LASSERT(IS_ERR(d) || lu_device_is_md(d)); - return container_of0(d, struct md_device, md_lu_dev); -} - -static inline struct lu_device *md2lu_dev(struct md_device *d) -{ - return &d->md_lu_dev; -} - -static inline struct md_object *lu2md(const struct lu_object *o) -{ - LASSERT(o == NULL || IS_ERR(o) || lu_device_is_md(o->lo_dev)); - return container_of0(o, struct md_object, mo_lu); -} - -static inline struct md_object *md_object_next(const struct md_object *obj) -{ - return (obj ? lu2md(lu_object_next(&obj->mo_lu)) : NULL); -} - -static inline struct md_device *md_obj2dev(const struct md_object *o) -{ - LASSERT(o == NULL || IS_ERR(o) || lu_device_is_md(o->mo_lu.lo_dev)); - return container_of0(o->mo_lu.lo_dev, struct md_device, md_lu_dev); -} - -static inline int md_device_init(struct md_device *md, struct lu_device_type *t) -{ - return lu_device_init(&md->md_lu_dev, t); -} - -static inline void md_device_fini(struct md_device *md) -{ - lu_device_fini(&md->md_lu_dev); -} - -static inline struct md_object *md_object_find_slice(const struct lu_env *env, - struct md_device *md, - const struct lu_fid *f) -{ - return lu2md(lu_object_find_slice(env, md2lu_dev(md), f, NULL)); -} - - -/** md operations */ -static inline int mo_permission(const struct lu_env *env, - struct md_object *p, - struct md_object *c, - struct md_attr *at, - int mask) -{ - LASSERT(c->mo_ops->moo_permission); - return c->mo_ops->moo_permission(env, p, c, at, mask); -} - -static inline int mo_attr_get(const struct lu_env *env, - struct md_object *m, - struct md_attr *at) -{ - LASSERT(m->mo_ops->moo_attr_get); - return m->mo_ops->moo_attr_get(env, m, at); -} - -static inline int mo_readlink(const struct lu_env *env, - struct md_object *m, - struct lu_buf *buf) -{ - LASSERT(m->mo_ops->moo_readlink); - return m->mo_ops->moo_readlink(env, m, buf); -} - -static inline int mo_changelog(const struct lu_env *env, - enum changelog_rec_type type, - int flags, struct md_object *m) -{ - LASSERT(m->mo_ops->moo_changelog); - return m->mo_ops->moo_changelog(env, type, flags, m); -} - -static inline int mo_attr_set(const struct lu_env *env, - struct md_object *m, - const struct md_attr *at) -{ - LASSERT(m->mo_ops->moo_attr_set); - return m->mo_ops->moo_attr_set(env, m, at); -} - -static inline int mo_xattr_get(const struct lu_env *env, - struct md_object *m, - struct lu_buf *buf, - const char *name) -{ - LASSERT(m->mo_ops->moo_xattr_get); - return m->mo_ops->moo_xattr_get(env, m, buf, name); -} - -static inline int mo_xattr_del(const struct lu_env *env, - struct md_object *m, - const char *name) -{ - LASSERT(m->mo_ops->moo_xattr_del); - return m->mo_ops->moo_xattr_del(env, m, name); -} - -static inline int mo_xattr_set(const struct lu_env *env, - struct md_object *m, - const struct lu_buf *buf, - const char *name, - int flags) -{ - LASSERT(m->mo_ops->moo_xattr_set); - return m->mo_ops->moo_xattr_set(env, m, buf, name, flags); -} - -static inline int mo_xattr_list(const struct lu_env *env, - struct md_object *m, - struct lu_buf *buf) -{ - LASSERT(m->mo_ops->moo_xattr_list); - return m->mo_ops->moo_xattr_list(env, m, buf); -} - -static inline int mo_swap_layouts(const struct lu_env *env, - struct md_object *o1, - struct md_object *o2, __u64 flags) -{ - LASSERT(o1->mo_ops->moo_swap_layouts); - LASSERT(o2->mo_ops->moo_swap_layouts); - if (o1->mo_ops->moo_swap_layouts != o2->mo_ops->moo_swap_layouts) - return -EPERM; - return o1->mo_ops->moo_swap_layouts(env, o1, o2, flags); -} - -static inline int mo_open(const struct lu_env *env, - struct md_object *m, - int flags) -{ - LASSERT(m->mo_ops->moo_open); - return m->mo_ops->moo_open(env, m, flags); -} - -static inline int mo_close(const struct lu_env *env, - struct md_object *m, - struct md_attr *ma, - int mode) -{ - LASSERT(m->mo_ops->moo_close); - return m->mo_ops->moo_close(env, m, ma, mode); -} - -static inline int mo_readpage(const struct lu_env *env, - struct md_object *m, - const struct lu_rdpg *rdpg) -{ - LASSERT(m->mo_ops->moo_readpage); - return m->mo_ops->moo_readpage(env, m, rdpg); -} - -static inline int mo_object_create(const struct lu_env *env, - struct md_object *m, - const struct md_op_spec *spc, - struct md_attr *at) -{ - LASSERT(m->mo_ops->moo_object_create); - return m->mo_ops->moo_object_create(env, m, spc, at); -} - -static inline int mo_ref_add(const struct lu_env *env, - struct md_object *m, - const struct md_attr *ma) -{ - LASSERT(m->mo_ops->moo_ref_add); - return m->mo_ops->moo_ref_add(env, m, ma); -} - -static inline int mo_ref_del(const struct lu_env *env, - struct md_object *m, - struct md_attr *ma) -{ - LASSERT(m->mo_ops->moo_ref_del); - return m->mo_ops->moo_ref_del(env, m, ma); -} - -static inline int mo_capa_get(const struct lu_env *env, - struct md_object *m, - struct lustre_capa *c, - int renewal) -{ - LASSERT(m->mo_ops->moo_capa_get); - return m->mo_ops->moo_capa_get(env, m, c, renewal); -} - -static inline int mo_object_sync(const struct lu_env *env, struct md_object *m) -{ - LASSERT(m->mo_ops->moo_object_sync); - return m->mo_ops->moo_object_sync(env, m); -} - -static inline int mo_file_lock(const struct lu_env *env, struct md_object *m, - struct lov_mds_md *lmm, - struct ldlm_extent *extent, - struct lustre_handle *lockh) -{ - LASSERT(m->mo_ops->moo_file_lock); - return m->mo_ops->moo_file_lock(env, m, lmm, extent, lockh); -} - -static inline int mo_file_unlock(const struct lu_env *env, struct md_object *m, - struct lov_mds_md *lmm, - struct lustre_handle *lockh) -{ - LASSERT(m->mo_ops->moo_file_unlock); - return m->mo_ops->moo_file_unlock(env, m, lmm, lockh); -} - -static inline int mo_object_lock(const struct lu_env *env, - struct md_object *m, - struct lustre_handle *lh, - struct ldlm_enqueue_info *einfo, - void *policy) -{ - LASSERT(m->mo_ops->moo_object_lock); - return m->mo_ops->moo_object_lock(env, m, lh, einfo, policy); -} - -static inline int mdo_lookup(const struct lu_env *env, - struct md_object *p, - const struct lu_name *lname, - struct lu_fid *f, - struct md_op_spec *spec) -{ - LASSERT(p->mo_dir_ops->mdo_lookup); - return p->mo_dir_ops->mdo_lookup(env, p, lname, f, spec); -} - -static inline mdl_mode_t mdo_lock_mode(const struct lu_env *env, - struct md_object *mo, - mdl_mode_t lm) -{ - if (mo->mo_dir_ops->mdo_lock_mode == NULL) - return MDL_MINMODE; - return mo->mo_dir_ops->mdo_lock_mode(env, mo, lm); -} - -static inline int mdo_create(const struct lu_env *env, - struct md_object *p, - const struct lu_name *lchild_name, - struct md_object *c, - struct md_op_spec *spc, - struct md_attr *at) -{ - LASSERT(p->mo_dir_ops->mdo_create); - return p->mo_dir_ops->mdo_create(env, p, lchild_name, c, spc, at); -} - -static inline int mdo_create_data(const struct lu_env *env, - struct md_object *p, - struct md_object *c, - const struct md_op_spec *spec, - struct md_attr *ma) -{ - LASSERT(c->mo_dir_ops->mdo_create_data); - return c->mo_dir_ops->mdo_create_data(env, p, c, spec, ma); -} - -static inline int mdo_rename(const struct lu_env *env, - struct md_object *sp, - struct md_object *tp, - const struct lu_fid *lf, - const struct lu_name *lsname, - struct md_object *t, - const struct lu_name *ltname, - struct md_attr *ma) -{ - LASSERT(tp->mo_dir_ops->mdo_rename); - return tp->mo_dir_ops->mdo_rename(env, sp, tp, lf, lsname, t, ltname, - ma); -} - -static inline int mdo_is_subdir(const struct lu_env *env, - struct md_object *mo, - const struct lu_fid *fid, - struct lu_fid *sfid) -{ - LASSERT(mo->mo_dir_ops->mdo_is_subdir); - return mo->mo_dir_ops->mdo_is_subdir(env, mo, fid, sfid); -} - -static inline int mdo_link(const struct lu_env *env, - struct md_object *p, - struct md_object *s, - const struct lu_name *lname, - struct md_attr *ma) -{ - LASSERT(s->mo_dir_ops->mdo_link); - return s->mo_dir_ops->mdo_link(env, p, s, lname, ma); -} - -static inline int mdo_unlink(const struct lu_env *env, - struct md_object *p, - struct md_object *c, - const struct lu_name *lname, - struct md_attr *ma, int no_name) -{ - LASSERT(p->mo_dir_ops->mdo_unlink); - return p->mo_dir_ops->mdo_unlink(env, p, c, lname, ma, no_name); -} - -static inline int mdo_lum_lmm_cmp(const struct lu_env *env, - struct md_object *c, - const struct md_op_spec *spec, - struct md_attr *ma) -{ - LASSERT(c->mo_dir_ops->mdo_lum_lmm_cmp); - return c->mo_dir_ops->mdo_lum_lmm_cmp(env, c, spec, ma); -} - -static inline int mdo_name_insert(const struct lu_env *env, - struct md_object *p, - const struct lu_name *lname, - const struct lu_fid *f, - const struct md_attr *ma) -{ - LASSERT(p->mo_dir_ops->mdo_name_insert); - return p->mo_dir_ops->mdo_name_insert(env, p, lname, f, ma); -} - -static inline int mdo_name_remove(const struct lu_env *env, - struct md_object *p, - const struct lu_name *lname, - const struct md_attr *ma) -{ - LASSERT(p->mo_dir_ops->mdo_name_remove); - return p->mo_dir_ops->mdo_name_remove(env, p, lname, ma); -} - -static inline int mdo_rename_tgt(const struct lu_env *env, - struct md_object *p, - struct md_object *t, - const struct lu_fid *lf, - const struct lu_name *lname, - struct md_attr *ma) -{ - if (t) { - LASSERT(t->mo_dir_ops->mdo_rename_tgt); - return t->mo_dir_ops->mdo_rename_tgt(env, p, t, lf, lname, ma); - } else { - LASSERT(p->mo_dir_ops->mdo_rename_tgt); - return p->mo_dir_ops->mdo_rename_tgt(env, p, t, lf, lname, ma); - } -} - -/** - * Used in MDD/OUT layer for object lock rule - **/ -enum mdd_object_role { - MOR_SRC_PARENT, - MOR_SRC_CHILD, - MOR_TGT_PARENT, - MOR_TGT_CHILD, - MOR_TGT_ORPHAN -}; - -struct dt_device; -/** - * Structure to hold object information. This is used to create object - * \pre llod_dir exist - */ -struct lu_local_obj_desc { - const char *llod_dir; - const char *llod_name; - __u32 llod_oid; - int llod_is_index; - const struct dt_index_features *llod_feat; - struct list_head llod_linkage; -}; - -int lustre_buf2som(void *buf, int rc, struct md_som_data *msd); -int lustre_buf2hsm(void *buf, int rc, struct md_hsm *mh); -void lustre_hsm2buf(void *buf, struct md_hsm *mh); - -struct lu_ucred { - __u32 uc_valid; - __u32 uc_o_uid; - __u32 uc_o_gid; - __u32 uc_o_fsuid; - __u32 uc_o_fsgid; - __u32 uc_uid; - __u32 uc_gid; - __u32 uc_fsuid; - __u32 uc_fsgid; - __u32 uc_suppgids[2]; - cfs_cap_t uc_cap; - __u32 uc_umask; - struct group_info *uc_ginfo; - struct md_identity *uc_identity; -}; - -struct lu_ucred *lu_ucred(const struct lu_env *env); - -struct lu_ucred *lu_ucred_check(const struct lu_env *env); - -struct lu_ucred *lu_ucred_assert(const struct lu_env *env); - -int lu_ucred_global_init(void); - -void lu_ucred_global_fini(void); - -#define md_cap_t(x) (x) - -#define MD_CAP_TO_MASK(x) (1 << (x)) - -#define md_cap_raised(c, flag) (md_cap_t(c) & MD_CAP_TO_MASK(flag)) - -/* capable() is copied from linux kernel! */ -static inline int md_capable(struct lu_ucred *uc, cfs_cap_t cap) -{ - if (md_cap_raised(uc->uc_cap, cap)) - return 1; - return 0; -} - -/** @} md */ -#endif /* _LINUX_MD_OBJECT_H */ diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h index 489bdd399627..2a88b806fca5 100644 --- a/drivers/staging/lustre/lustre/include/obd.h +++ b/drivers/staging/lustre/lustre/include/obd.h @@ -212,7 +212,7 @@ static inline int lov_lum_swab_if_needed(struct lov_user_md_v3 *lumv3, int *lmm_magic, struct lov_user_md *lum) { - if (lum && copy_from_user(lumv3, lum,sizeof(struct lov_user_md_v1))) + if (lum && copy_from_user(lumv3, lum, sizeof(struct lov_user_md_v1))) return -EFAULT; *lmm_magic = lumv3->lmm_magic; @@ -252,10 +252,10 @@ struct obd_type { }; struct brw_page { - obd_off off; + u64 off; struct page *pg; int count; - obd_flag flag; + u32 flag; }; /* llog contexts */ @@ -336,10 +336,10 @@ struct client_obd { * grant before trying to dirty a page and unreserve the rest. * See osc_{reserve|unreserve}_grant for details. */ long cl_reserved_grant; - struct list_head cl_cache_waiters; /* waiting for cache/grant */ - unsigned long cl_next_shrink_grant; /* jiffies */ - struct list_head cl_grant_shrink_list; /* Timeout event list */ - int cl_grant_shrink_interval; /* seconds */ + struct list_head cl_cache_waiters; /* waiting for cache/grant */ + unsigned long cl_next_shrink_grant; /* jiffies */ + struct list_head cl_grant_shrink_list; /* Timeout event list */ + int cl_grant_shrink_interval; /* seconds */ /* A chunk is an optimal size used by osc_extent to determine * the extent size. A chunk is max(PAGE_CACHE_SIZE, OST block size) */ @@ -389,12 +389,12 @@ struct client_obd { /* lru for osc caching pages */ struct cl_client_cache *cl_cache; - struct list_head cl_lru_osc; /* member of cl_cache->ccc_lru */ + struct list_head cl_lru_osc; /* member of cl_cache->ccc_lru */ atomic_t *cl_lru_left; atomic_t cl_lru_busy; atomic_t cl_lru_shrinkers; atomic_t cl_lru_in_list; - struct list_head cl_lru_list; /* lru page list */ + struct list_head cl_lru_list; /* lru page list */ client_obd_lock_t cl_lru_list_lock; /* page list protector */ /* number of in flight destroy rpcs is limited to max_rpcs_in_flight */ @@ -442,7 +442,7 @@ struct client_obd { struct obd_id_info { __u32 idx; - obd_id *data; + u64 *data; }; struct echo_client_obd { @@ -500,9 +500,9 @@ struct lov_statfs_data { }; /* Stripe placement optimization */ struct lov_qos { - struct list_head lq_oss_list; /* list of OSSs that targets use */ + struct list_head lq_oss_list; /* list of OSSs that targets use */ struct rw_semaphore lq_rw_sem; - __u32 lq_active_oss_count; + __u32 lq_active_oss_count; unsigned int lq_prio_free; /* priority for free space */ unsigned int lq_threshold_rr;/* priority for rr */ struct lov_qos_rr lq_rr; /* round robin qos data */ @@ -545,8 +545,8 @@ struct pool_desc { struct hlist_node pool_hash; /* access by poolname */ struct list_head pool_list; /* serial access */ struct proc_dir_entry *pool_proc_entry; /* file in /proc */ - struct obd_device *pool_lobd; /* obd of the lov/lod to which - * this pool belongs */ + struct obd_device *pool_lobd; /* obd of the lov/lod to which + * this pool belongs */ }; struct lov_obd { @@ -564,7 +564,7 @@ struct lov_obd { int lov_connects; int lov_pool_count; struct cfs_hash *lov_pools_hash_body; /* used for key access */ - struct list_head lov_pool_list; /* used for sequential access */ + struct list_head lov_pool_list; /* used for sequential access */ struct proc_dir_entry *lov_pool_proc_entry; enum lustre_sec_part lov_sp_me; @@ -589,13 +589,11 @@ enum placement_policy { PLACEMENT_MAX_POLICY }; -typedef enum placement_policy placement_policy_t; - struct lmv_obd { int refcount; struct lu_client_fld lmv_fld; spinlock_t lmv_lock; - placement_policy_t lmv_placement; + enum placement_policy lmv_placement; struct lmv_desc desc; struct obd_uuid cluuid; struct obd_export *exp; @@ -660,35 +658,6 @@ struct niobuf_local { #define LUSTRE_MGS_OBDNAME "MGS" #define LUSTRE_MGC_OBDNAME "MGC" -static inline int is_osp_on_mdt(char *name) -{ - char *ptr; - - ptr = strrchr(name, '-'); - if (ptr == NULL) { - CERROR("%s is not a obdname\n", name); - return 0; - } - - /* 1.8 OSC/OSP name on MDT is fsname-OSTxxxx-osc */ - if (strncmp(ptr + 1, "osc", 3) == 0) - return 1; - - if (strncmp(ptr + 1, "MDT", 3) != 0) - return 0; - - while (*(--ptr) != '-' && ptr != name); - - if (ptr == name) - return 0; - - if (strncmp(ptr + 1, LUSTRE_OSP_NAME, strlen(LUSTRE_OSP_NAME)) != 0 && - strncmp(ptr + 1, LUSTRE_OSC_NAME, strlen(LUSTRE_OSC_NAME)) != 0) - return 0; - - return 1; -} - /* Don't conflict with on-wire flags OBD_BRW_WRITE, etc */ #define N_LOCAL_TEMP_PAGE 0x10000000 @@ -708,7 +677,7 @@ struct obd_trans_info { unsigned long oti_sync_write:1; /* initial thread handling transaction */ - struct ptlrpc_thread * oti_thread; + struct ptlrpc_thread *oti_thread; __u32 oti_conn_cnt; /** VBR: versions */ __u64 oti_pre_version; @@ -733,6 +702,7 @@ static inline void oti_init(struct obd_trans_info *oti, if (req->rq_reqmsg != NULL && lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) { __u64 *pre_version = lustre_msg_get_versions(req->rq_reqmsg); + oti->oti_pre_version = pre_version ? pre_version[0] : 0; oti->oti_transno = lustre_msg_get_transno(req->rq_reqmsg); } @@ -745,7 +715,8 @@ static inline void oti_init(struct obd_trans_info *oti, oti->oti_conn_cnt = lustre_msg_get_conn_cnt(req->rq_reqmsg); } -static inline void oti_alloc_cookies(struct obd_trans_info *oti,int num_cookies) +static inline void oti_alloc_cookies(struct obd_trans_info *oti, + int num_cookies) { if (!oti) return; @@ -829,6 +800,10 @@ struct obd_llog_group { #define OBD_DEVICE_MAGIC 0XAB5CD6EF #define OBD_DEV_BY_DEVNAME 0xffffd0de +struct lvfs_run_ctxt { + struct dt_device *dt; +}; + struct obd_device { struct obd_type *obd_type; __u32 obd_magic; @@ -882,7 +857,6 @@ struct obd_device { spinlock_t obd_dev_lock; /* protect OBD bitfield above */ struct mutex obd_dev_mutex; __u64 obd_last_committed; - struct fsfilt_operations *obd_fsops; spinlock_t obd_osfs_lock; struct obd_statfs obd_osfs; /* locked by obd_osfs_lock */ __u64 obd_osfs_age; @@ -908,9 +882,9 @@ struct obd_device { int obd_requests_queued_for_recovery; wait_queue_head_t obd_next_transno_waitq; /* protected by obd_recovery_task_lock */ - struct timer_list obd_recovery_timer; - time_t obd_recovery_start; /* seconds */ - time_t obd_recovery_end; /* seconds, for lprocfs_status */ + struct timer_list obd_recovery_timer; + time_t obd_recovery_start; /* seconds */ + time_t obd_recovery_end; /* seconds, for lprocfs_status */ int obd_recovery_time_hard; int obd_recovery_timeout; int obd_recovery_ir_factor; @@ -946,7 +920,7 @@ struct obd_device { struct lprocfs_stats *obd_svc_stats; atomic_t obd_evict_inprogress; wait_queue_head_t obd_evict_inprogress_waitq; - struct list_head obd_evict_list; /* protected with pet_lock */ + struct list_head obd_evict_list; /* protected with pet_lock */ /** * Ldlm pool part. Save last calculated SLV and Limit. @@ -1057,9 +1031,9 @@ struct md_op_data { struct lu_fid op_fid2; /* operation fid2 (usually child) */ struct lu_fid op_fid3; /* 2 extra fids to find conflicting */ struct lu_fid op_fid4; /* to the operation locks. */ - mdsno_t op_mds; /* what mds server open will go to */ + u32 op_mds; /* what mds server open will go to */ struct lustre_handle op_handle; - obd_time op_mod_time; + s64 op_mod_time; const char *op_name; int op_namelen; __u32 op_mode; @@ -1113,16 +1087,14 @@ enum op_cli_flags { struct md_enqueue_info; /* metadata stat-ahead */ -typedef int (* md_enqueue_cb_t)(struct ptlrpc_request *req, - struct md_enqueue_info *minfo, - int rc); struct md_enqueue_info { struct md_op_data mi_data; struct lookup_intent mi_it; struct lustre_handle mi_lockh; struct inode *mi_dir; - md_enqueue_cb_t mi_cb; + int (*mi_cb)(struct ptlrpc_request *req, + struct md_enqueue_info *minfo, int rc); __u64 mi_cbdata; unsigned int mi_generation; }; @@ -1138,14 +1110,13 @@ struct obd_ops { __u32 keylen, void *key, __u32 vallen, void *val, struct ptlrpc_request_set *set); - int (*o_attach)(struct obd_device *dev, obd_count len, void *data); + int (*o_attach)(struct obd_device *dev, u32 len, void *data); int (*o_detach)(struct obd_device *dev); - int (*o_setup) (struct obd_device *dev, struct lustre_cfg *cfg); + int (*o_setup)(struct obd_device *dev, struct lustre_cfg *cfg); int (*o_precleanup)(struct obd_device *dev, enum obd_cleanup_stage cleanup_stage); int (*o_cleanup)(struct obd_device *dev); - int (*o_process_config)(struct obd_device *dev, obd_count len, - void *data); + int (*o_process_config)(struct obd_device *dev, u32 len, void *data); int (*o_postrecov)(struct obd_device *dev); int (*o_add_conn)(struct obd_import *imp, struct obd_uuid *uuid, int priority); @@ -1184,18 +1155,14 @@ struct obd_ops { __u64 max_age, struct ptlrpc_request_set *set); int (*o_packmd)(struct obd_export *exp, struct lov_mds_md **disk_tgt, struct lov_stripe_md *mem_src); - int (*o_unpackmd)(struct obd_export *exp,struct lov_stripe_md **mem_tgt, + int (*o_unpackmd)(struct obd_export *exp, + struct lov_stripe_md **mem_tgt, struct lov_mds_md *disk_src, int disk_len); - int (*o_preallocate)(struct lustre_handle *, obd_count *req, - obd_id *ids); + int (*o_preallocate)(struct lustre_handle *, u32 *req, u64 *ids); /* FIXME: add fid capability support for create & destroy! */ - int (*o_precreate)(struct obd_export *exp); int (*o_create)(const struct lu_env *env, struct obd_export *exp, struct obdo *oa, struct lov_stripe_md **ea, struct obd_trans_info *oti); - int (*o_create_async)(struct obd_export *exp, struct obd_info *oinfo, - struct lov_stripe_md **ea, - struct obd_trans_info *oti); int (*o_destroy)(const struct lu_env *env, struct obd_export *exp, struct obdo *oa, struct lov_stripe_md *ea, struct obd_trans_info *oti, struct obd_export *md_exp, @@ -1209,28 +1176,8 @@ struct obd_ops { struct obd_info *oinfo); int (*o_getattr_async)(struct obd_export *exp, struct obd_info *oinfo, struct ptlrpc_request_set *set); - int (*o_brw)(int rw, struct obd_export *exp, struct obd_info *oinfo, - obd_count oa_bufs, struct brw_page *pgarr, - struct obd_trans_info *oti); - int (*o_merge_lvb)(struct obd_export *exp, struct lov_stripe_md *lsm, - struct ost_lvb *lvb, int kms_only); int (*o_adjust_kms)(struct obd_export *exp, struct lov_stripe_md *lsm, - obd_off size, int shrink); - int (*o_punch)(const struct lu_env *, struct obd_export *exp, - struct obd_info *oinfo, struct obd_trans_info *oti, - struct ptlrpc_request_set *rqset); - int (*o_sync)(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo, obd_size start, obd_size end, - struct ptlrpc_request_set *set); - int (*o_migrate)(struct lustre_handle *conn, struct lov_stripe_md *dst, - struct lov_stripe_md *src, obd_size start, - obd_size end, struct obd_trans_info *oti); - int (*o_copy)(struct lustre_handle *dstconn, struct lov_stripe_md *dst, - struct lustre_handle *srconn, struct lov_stripe_md *src, - obd_size start, obd_size end, struct obd_trans_info *); - int (*o_iterate)(struct lustre_handle *conn, - int (*)(obd_id, obd_seq, void *), - obd_id *startid, obd_seq seq, void *data); + u64 size, int shrink); int (*o_preprw)(const struct lu_env *env, int cmd, struct obd_export *exp, struct obdo *oa, int objcount, struct obd_ioobj *obj, struct niobuf_remote *remote, @@ -1242,33 +1189,12 @@ struct obd_ops { struct niobuf_remote *remote, int pages, struct niobuf_local *local, struct obd_trans_info *oti, int rc); - int (*o_enqueue)(struct obd_export *, struct obd_info *oinfo, - struct ldlm_enqueue_info *einfo, - struct ptlrpc_request_set *rqset); - int (*o_change_cbdata)(struct obd_export *, struct lov_stripe_md *, - ldlm_iterator_t it, void *data); int (*o_find_cbdata)(struct obd_export *, struct lov_stripe_md *, ldlm_iterator_t it, void *data); - int (*o_cancel)(struct obd_export *, struct lov_stripe_md *md, - __u32 mode, struct lustre_handle *); - int (*o_cancel_unused)(struct obd_export *, struct lov_stripe_md *, - ldlm_cancel_flags_t flags, void *opaque); int (*o_init_export)(struct obd_export *exp); int (*o_destroy_export)(struct obd_export *exp); - int (*o_extent_calc)(struct obd_export *, struct lov_stripe_md *, - int cmd, obd_off *); - - /* llog related obd_methods */ - int (*o_llog_init)(struct obd_device *obd, struct obd_llog_group *grp, - struct obd_device *disk_obd, int *idx); - int (*o_llog_finish)(struct obd_device *obd, int count); - int (*o_llog_connect)(struct obd_export *, struct llogd_conn_body *); /* metadata-only methods */ - int (*o_pin)(struct obd_export *, const struct lu_fid *fid, - struct obd_capa *, struct obd_client_handle *, int flag); - int (*o_unpin)(struct obd_export *, struct obd_client_handle *, int); - int (*o_import_event)(struct obd_device *, struct obd_import *, enum obd_import_event); @@ -1276,7 +1202,7 @@ struct obd_ops { enum obd_notify_event ev, void *data); int (*o_health_check)(const struct lu_env *env, struct obd_device *); - struct obd_uuid *(*o_get_uuid) (struct obd_export *exp); + struct obd_uuid *(*o_get_uuid)(struct obd_export *exp); /* quota methods */ int (*o_quotacheck)(struct obd_device *, struct obd_export *, @@ -1284,8 +1210,6 @@ struct obd_ops { int (*o_quotactl)(struct obd_device *, struct obd_export *, struct obd_quotactl *); - int (*o_ping)(const struct lu_env *, struct obd_export *exp); - /* pools methods */ int (*o_pool_new)(struct obd_device *obd, char *poolname); int (*o_pool_del)(struct obd_device *obd, char *poolname); @@ -1385,12 +1309,12 @@ struct md_ops { struct ptlrpc_request **); int (*m_setxattr)(struct obd_export *, const struct lu_fid *, - struct obd_capa *, obd_valid, const char *, + struct obd_capa *, u64, const char *, const char *, int, int, int, __u32, struct ptlrpc_request **); int (*m_getxattr)(struct obd_export *, const struct lu_fid *, - struct obd_capa *, obd_valid, const char *, + struct obd_capa *, u64, const char *, const char *, int, int, int, struct ptlrpc_request **); @@ -1444,13 +1368,13 @@ struct lsm_operations { void (*lsm_free)(struct lov_stripe_md *); int (*lsm_destroy)(struct lov_stripe_md *, struct obdo *oa, struct obd_export *md_exp); - void (*lsm_stripe_by_index)(struct lov_stripe_md *, int *, obd_off *, - obd_off *); - void (*lsm_stripe_by_offset)(struct lov_stripe_md *, int *, obd_off *, - obd_off *); - int (*lsm_lmm_verify) (struct lov_mds_md *lmm, int lmm_bytes, + void (*lsm_stripe_by_index)(struct lov_stripe_md *, int *, u64 *, + u64 *); + void (*lsm_stripe_by_offset)(struct lov_stripe_md *, int *, u64 *, + u64 *); + int (*lsm_lmm_verify)(struct lov_mds_md *lmm, int lmm_bytes, __u16 *stripe_count); - int (*lsm_unpackmd) (struct lov_obd *lov, struct lov_stripe_md *lsm, + int (*lsm_unpackmd)(struct lov_obd *lov, struct lov_stripe_md *lsm, struct lov_mds_md *lmm); }; @@ -1458,7 +1382,7 @@ extern const struct lsm_operations lsm_v1_ops; extern const struct lsm_operations lsm_v3_ops; static inline const struct lsm_operations *lsm_op_find(int magic) { - switch(magic) { + switch (magic) { case LOV_MAGIC_V1: return &lsm_v1_ops; case LOV_MAGIC_V3: @@ -1481,6 +1405,7 @@ static inline struct lustre_capa *oinfo_capa(struct obd_info *oinfo) static inline struct md_open_data *obd_mod_alloc(void) { struct md_open_data *mod; + OBD_ALLOC_PTR(mod); if (mod == NULL) return NULL; @@ -1498,7 +1423,7 @@ static inline struct md_open_data *obd_mod_alloc(void) } \ }) -void obdo_from_inode(struct obdo *dst, struct inode *src, obd_flag valid); +void obdo_from_inode(struct obdo *dst, struct inode *src, u32 valid); void obdo_set_parent_fid(struct obdo *dst, const struct lu_fid *parent); /* return 1 if client should be resend request */ diff --git a/drivers/staging/lustre/lustre/include/obd_cksum.h b/drivers/staging/lustre/lustre/include/obd_cksum.h index 662a78062963..3a63462aa943 100644 --- a/drivers/staging/lustre/lustre/include/obd_cksum.h +++ b/drivers/staging/lustre/lustre/include/obd_cksum.h @@ -64,10 +64,10 @@ static inline unsigned char cksum_obd2cfs(cksum_type_t cksum_type) * because that is supported by all clients since 1.8 * * In case multiple algorithms are supported the best one is used. */ -static inline obd_flag cksum_type_pack(cksum_type_t cksum_type) +static inline u32 cksum_type_pack(cksum_type_t cksum_type) { unsigned int performance = 0, tmp; - obd_flag flag = OBD_FL_CKSUM_ADLER; + u32 flag = OBD_FL_CKSUM_ADLER; if (cksum_type & OBD_CKSUM_CRC32) { tmp = cfs_crypto_hash_speed(cksum_obd2cfs(OBD_CKSUM_CRC32)); @@ -98,7 +98,7 @@ static inline obd_flag cksum_type_pack(cksum_type_t cksum_type) return flag; } -static inline cksum_type_t cksum_type_unpack(obd_flag o_flags) +static inline cksum_type_t cksum_type_unpack(u32 o_flags) { switch (o_flags & OBD_FL_CKSUM_ALL) { case OBD_FL_CKSUM_CRC32C: diff --git a/drivers/staging/lustre/lustre/include/obd_class.h b/drivers/staging/lustre/lustre/include/obd_class.h index 1d401c9e5e8c..882e40bd584c 100644 --- a/drivers/staging/lustre/lustre/include/obd_class.h +++ b/drivers/staging/lustre/lustre/include/obd_class.h @@ -45,8 +45,6 @@ #include "lustre/lustre_idl.h" #include "lprocfs_status.h" -#include "linux/obd_class.h" - #define OBD_STATFS_NODELAY 0x0001 /* requests should be send without delay * and resends for avoid deadlocks */ #define OBD_STATFS_FROM_CACHE 0x0002 /* the statfs callback should not update @@ -88,12 +86,12 @@ struct obd_device *class_name2obd(const char *name); int class_uuid2dev(struct obd_uuid *uuid); struct obd_device *class_uuid2obd(struct obd_uuid *uuid); void class_obd_list(void); -struct obd_device * class_find_client_obd(struct obd_uuid *tgt_uuid, - const char * typ_name, +struct obd_device *class_find_client_obd(struct obd_uuid *tgt_uuid, + const char *typ_name, struct obd_uuid *grp_uuid); -struct obd_device * class_devices_in_group(struct obd_uuid *grp_uuid, +struct obd_device *class_devices_in_group(struct obd_uuid *grp_uuid, int *next); -struct obd_device * class_num2obd(int num); +struct obd_device *class_num2obd(int num); int get_devices_count(void); int class_notify_sptlrpc_conf(const char *fsname, int namelen); @@ -110,7 +108,7 @@ void obd_zombie_impexp_cull(void); void obd_zombie_barrier(void); void obd_exports_barrier(struct obd_device *obd); int kuc_len(int payload_len); -struct kuc_hdr * kuc_ptr(void *p); +struct kuc_hdr *kuc_ptr(void *p); int kuc_ispayload(void *p); void *kuc_alloc(int payload_len, int transport, int type); void kuc_free(void *p, int payload_len); @@ -207,7 +205,7 @@ struct lustre_profile { char *lp_md; }; -struct lustre_profile *class_get_profile(const char * prof); +struct lustre_profile *class_get_profile(const char *prof); void class_del_profile(const char *prof); void class_del_profiles(void); @@ -219,8 +217,8 @@ extern void (*class_export_dump_hook)(struct obd_export *); #else -#define __class_export_add_lock_ref(exp, lock) do {} while(0) -#define __class_export_del_lock_ref(exp, lock) do {} while(0) +#define __class_export_add_lock_ref(exp, lock) do {} while (0) +#define __class_export_del_lock_ref(exp, lock) do {} while (0) #endif @@ -307,13 +305,20 @@ static inline enum obd_option exp_flags_from_obd(struct obd_device *obd) 0); } +struct inode; +struct lu_attr; +struct obdo; +void obdo_from_la(struct obdo *dst, struct lu_attr *la, __u64 valid); +void la_from_obdo(struct lu_attr *la, struct obdo *dst, u32 valid); +void obdo_refresh_inode(struct inode *dst, struct obdo *src, u32 valid); +void obdo_to_inode(struct inode *dst, struct obdo *src, u32 valid); -void obdo_cpy_md(struct obdo *dst, struct obdo *src, obd_flag valid); +void obdo_cpy_md(struct obdo *dst, struct obdo *src, u32 valid); void obdo_to_ioobj(struct obdo *oa, struct obd_ioobj *ioobj); void obdo_from_iattr(struct obdo *oa, struct iattr *attr, unsigned int ia_valid); -void iattr_from_obdo(struct iattr *attr, struct obdo *oa, obd_flag valid); -void md_from_obdo(struct md_op_data *op_data, struct obdo *oa, obd_flag valid); +void iattr_from_obdo(struct iattr *attr, struct obdo *oa, u32 valid); +void md_from_obdo(struct md_op_data *op_data, struct obdo *oa, u32 valid); void obdo_from_md(struct obdo *oa, struct md_op_data *op_data, unsigned int valid); @@ -510,8 +515,8 @@ static inline int obd_get_info(const struct lu_env *env, } static inline int obd_set_info_async(const struct lu_env *env, - struct obd_export *exp, obd_count keylen, - void *key, obd_count vallen, void *val, + struct obd_export *exp, u32 keylen, + void *key, u32 vallen, void *val, struct ptlrpc_request_set *set) { int rc; @@ -771,31 +776,6 @@ static inline int obd_free_memmd(struct obd_export *exp, return rc; } -static inline int obd_precreate(struct obd_export *exp) -{ - int rc; - - EXP_CHECK_DT_OP(exp, precreate); - OBD_COUNTER_INCREMENT(exp->exp_obd, precreate); - - rc = OBP(exp->exp_obd, precreate)(exp); - return rc; -} - -static inline int obd_create_async(struct obd_export *exp, - struct obd_info *oinfo, - struct lov_stripe_md **ea, - struct obd_trans_info *oti) -{ - int rc; - - EXP_CHECK_DT_OP(exp, create_async); - EXP_COUNTER_INCREMENT(exp, create_async); - - rc = OBP(exp->exp_obd, create_async)(exp, oinfo, ea, oti); - return rc; -} - static inline int obd_create(const struct lu_env *env, struct obd_export *exp, struct obdo *obdo, struct lov_stripe_md **ea, struct obd_trans_info *oti) @@ -943,7 +923,7 @@ static inline struct obd_uuid *obd_get_uuid(struct obd_export *exp) * by obd are returned. */ static inline int obd_connect(const struct lu_env *env, - struct obd_export **exp,struct obd_device *obd, + struct obd_export **exp, struct obd_device *obd, struct obd_uuid *cluuid, struct obd_connect_data *data, void *localdata) @@ -1032,17 +1012,6 @@ static inline int obd_fid_alloc(struct obd_export *exp, return rc; } -static inline int obd_ping(const struct lu_env *env, struct obd_export *exp) -{ - int rc; - - OBD_CHECK_DT_OP(exp->exp_obd, ping, 0); - EXP_COUNTER_INCREMENT(exp, ping); - - rc = OBP(exp->exp_obd, ping)(env, exp); - return rc; -} - static inline int obd_pool_new(struct obd_device *obd, char *poolname) { int rc; @@ -1121,27 +1090,6 @@ static inline int obd_destroy_export(struct obd_export *exp) return 0; } -static inline int obd_extent_calc(struct obd_export *exp, - struct lov_stripe_md *md, - int cmd, obd_off *offset) -{ - int rc; - - EXP_CHECK_DT_OP(exp, extent_calc); - rc = OBP(exp->exp_obd, extent_calc)(exp, md, cmd, offset); - return rc; -} - -static inline struct dentry * -obd_lvfs_fid2dentry(struct obd_export *exp, struct ost_id *oi, __u32 gen) -{ - struct lvfs_run_ctxt *ctxt = &exp->exp_obd->obd_lvfs_ctxt; - LASSERT(exp->exp_obd); - - return ctxt->cb_ops.l_fid2dentry(ostid_id(oi), gen, ostid_seq(oi), - exp->exp_obd); -} - /* @max_age is the oldest time in jiffies that we accept using a cached data. * If the cache is older than @max_age we will get a new value from the * target. Use a value of "cfs_time_current() + HZ" to guarantee freshness. */ @@ -1165,7 +1113,8 @@ static inline int obd_statfs_async(struct obd_export *exp, if (cfs_time_before_64(obd->obd_osfs_age, max_age)) { rc = OBP(obd, statfs_async)(exp, oinfo, max_age, rqset); } else { - CDEBUG(D_SUPER,"%s: use %p cache blocks %llu/%llu objects %llu/%llu\n", + CDEBUG(D_SUPER, + "%s: use %p cache blocks %llu/%llu objects %llu/%llu\n", obd->obd_name, &obd->obd_osfs, obd->obd_osfs.os_bavail, obd->obd_osfs.os_blocks, obd->obd_osfs.os_ffree, obd->obd_osfs.os_files); @@ -1238,92 +1187,6 @@ static inline int obd_statfs(const struct lu_env *env, struct obd_export *exp, return rc; } -static inline int obd_sync_rqset(struct obd_export *exp, struct obd_info *oinfo, - obd_size start, obd_size end) -{ - struct ptlrpc_request_set *set = NULL; - int rc; - - OBD_CHECK_DT_OP(exp->exp_obd, sync, -EOPNOTSUPP); - EXP_COUNTER_INCREMENT(exp, sync); - - set = ptlrpc_prep_set(); - if (set == NULL) - return -ENOMEM; - - rc = OBP(exp->exp_obd, sync)(NULL, exp, oinfo, start, end, set); - if (rc == 0) - rc = ptlrpc_set_wait(set); - ptlrpc_set_destroy(set); - return rc; -} - -static inline int obd_sync(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo, obd_size start, obd_size end, - struct ptlrpc_request_set *set) -{ - int rc; - - OBD_CHECK_DT_OP(exp->exp_obd, sync, -EOPNOTSUPP); - EXP_COUNTER_INCREMENT(exp, sync); - - rc = OBP(exp->exp_obd, sync)(env, exp, oinfo, start, end, set); - return rc; -} - -static inline int obd_punch_rqset(struct obd_export *exp, - struct obd_info *oinfo, - struct obd_trans_info *oti) -{ - struct ptlrpc_request_set *set = NULL; - int rc; - - EXP_CHECK_DT_OP(exp, punch); - EXP_COUNTER_INCREMENT(exp, punch); - - set = ptlrpc_prep_set(); - if (set == NULL) - return -ENOMEM; - - rc = OBP(exp->exp_obd, punch)(NULL, exp, oinfo, oti, set); - if (rc == 0) - rc = ptlrpc_set_wait(set); - ptlrpc_set_destroy(set); - return rc; -} - -static inline int obd_punch(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo, struct obd_trans_info *oti, - struct ptlrpc_request_set *rqset) -{ - int rc; - - EXP_CHECK_DT_OP(exp, punch); - EXP_COUNTER_INCREMENT(exp, punch); - - rc = OBP(exp->exp_obd, punch)(env, exp, oinfo, oti, rqset); - return rc; -} - -static inline int obd_brw(int cmd, struct obd_export *exp, - struct obd_info *oinfo, obd_count oa_bufs, - struct brw_page *pg, struct obd_trans_info *oti) -{ - int rc; - - EXP_CHECK_DT_OP(exp, brw); - EXP_COUNTER_INCREMENT(exp, brw); - - if (!(cmd & (OBD_BRW_RWMASK | OBD_BRW_CHECK))) { - CERROR("obd_brw: cmd must be OBD_BRW_READ, OBD_BRW_WRITE, " - "or OBD_BRW_CHECK\n"); - LBUG(); - } - - rc = OBP(exp->exp_obd, brw)(cmd, exp, oinfo, oa_bufs, pg, oti); - return rc; -} - static inline int obd_preprw(const struct lu_env *env, int cmd, struct obd_export *exp, struct obdo *oa, int objcount, struct obd_ioobj *obj, @@ -1357,21 +1220,8 @@ static inline int obd_commitrw(const struct lu_env *env, int cmd, return rc; } -static inline int obd_merge_lvb(struct obd_export *exp, - struct lov_stripe_md *lsm, - struct ost_lvb *lvb, int kms_only) -{ - int rc; - - EXP_CHECK_DT_OP(exp, merge_lvb); - EXP_COUNTER_INCREMENT(exp, merge_lvb); - - rc = OBP(exp->exp_obd, merge_lvb)(exp, lsm, lvb, kms_only); - return rc; -} - static inline int obd_adjust_kms(struct obd_export *exp, - struct lov_stripe_md *lsm, obd_off size, + struct lov_stripe_md *lsm, u64 size, int shrink) { int rc; @@ -1395,54 +1245,6 @@ static inline int obd_iocontrol(unsigned int cmd, struct obd_export *exp, return rc; } -static inline int obd_enqueue_rqset(struct obd_export *exp, - struct obd_info *oinfo, - struct ldlm_enqueue_info *einfo) -{ - struct ptlrpc_request_set *set = NULL; - int rc; - - EXP_CHECK_DT_OP(exp, enqueue); - EXP_COUNTER_INCREMENT(exp, enqueue); - - set = ptlrpc_prep_set(); - if (set == NULL) - return -ENOMEM; - - rc = OBP(exp->exp_obd, enqueue)(exp, oinfo, einfo, set); - if (rc == 0) - rc = ptlrpc_set_wait(set); - ptlrpc_set_destroy(set); - return rc; -} - -static inline int obd_enqueue(struct obd_export *exp, - struct obd_info *oinfo, - struct ldlm_enqueue_info *einfo, - struct ptlrpc_request_set *set) -{ - int rc; - - EXP_CHECK_DT_OP(exp, enqueue); - EXP_COUNTER_INCREMENT(exp, enqueue); - - rc = OBP(exp->exp_obd, enqueue)(exp, oinfo, einfo, set); - return rc; -} - -static inline int obd_change_cbdata(struct obd_export *exp, - struct lov_stripe_md *lsm, - ldlm_iterator_t it, void *data) -{ - int rc; - - EXP_CHECK_DT_OP(exp, change_cbdata); - EXP_COUNTER_INCREMENT(exp, change_cbdata); - - rc = OBP(exp->exp_obd, change_cbdata)(exp, lsm, it, data); - return rc; -} - static inline int obd_find_cbdata(struct obd_export *exp, struct lov_stripe_md *lsm, ldlm_iterator_t it, void *data) @@ -1456,59 +1258,6 @@ static inline int obd_find_cbdata(struct obd_export *exp, return rc; } -static inline int obd_cancel(struct obd_export *exp, - struct lov_stripe_md *ea, __u32 mode, - struct lustre_handle *lockh) -{ - int rc; - - EXP_CHECK_DT_OP(exp, cancel); - EXP_COUNTER_INCREMENT(exp, cancel); - - rc = OBP(exp->exp_obd, cancel)(exp, ea, mode, lockh); - return rc; -} - -static inline int obd_cancel_unused(struct obd_export *exp, - struct lov_stripe_md *ea, - ldlm_cancel_flags_t flags, - void *opaque) -{ - int rc; - - EXP_CHECK_DT_OP(exp, cancel_unused); - EXP_COUNTER_INCREMENT(exp, cancel_unused); - - rc = OBP(exp->exp_obd, cancel_unused)(exp, ea, flags, opaque); - return rc; -} - -static inline int obd_pin(struct obd_export *exp, const struct lu_fid *fid, - struct obd_capa *oc, struct obd_client_handle *handle, - int flag) -{ - int rc; - - EXP_CHECK_DT_OP(exp, pin); - EXP_COUNTER_INCREMENT(exp, pin); - - rc = OBP(exp->exp_obd, pin)(exp, fid, oc, handle, flag); - return rc; -} - -static inline int obd_unpin(struct obd_export *exp, - struct obd_client_handle *handle, int flag) -{ - int rc; - - EXP_CHECK_DT_OP(exp, unpin); - EXP_COUNTER_INCREMENT(exp, unpin); - - rc = OBP(exp->exp_obd, unpin)(exp, handle, flag); - return rc; -} - - static inline void obd_import_event(struct obd_device *obd, struct obd_import *imp, enum obd_import_event event) @@ -1523,19 +1272,6 @@ static inline void obd_import_event(struct obd_device *obd, } } -static inline int obd_llog_connect(struct obd_export *exp, - struct llogd_conn_body *body) -{ - int rc; - - OBD_CHECK_DT_OP(exp->exp_obd, llog_connect, 0); - EXP_COUNTER_INCREMENT(exp, llog_connect); - - rc = OBP(exp->exp_obd, llog_connect)(exp, body); - return rc; -} - - static inline int obd_notify(struct obd_device *obd, struct obd_device *watched, enum obd_notify_event ev, @@ -1655,25 +1391,6 @@ static inline int obd_register_observer(struct obd_device *obd, return 0; } -static inline int obd_pin_observer(struct obd_device *obd, - struct obd_device **observer) -{ - down_read(&obd->obd_observer_link_sem); - if (!obd->obd_observer) { - *observer = NULL; - up_read(&obd->obd_observer_link_sem); - return -ENOENT; - } - *observer = obd->obd_observer; - return 0; -} - -static inline int obd_unpin_observer(struct obd_device *obd) -{ - up_read(&obd->obd_observer_link_sem); - return 0; -} - #if 0 static inline int obd_register_page_removal_cb(struct obd_export *exp, obd_page_removal_cb_t cb, @@ -1962,7 +1679,7 @@ static inline int md_free_lustre_md(struct obd_export *exp, static inline int md_setxattr(struct obd_export *exp, const struct lu_fid *fid, struct obd_capa *oc, - obd_valid valid, const char *name, + u64 valid, const char *name, const char *input, int input_size, int output_size, int flags, __u32 suppgid, struct ptlrpc_request **request) @@ -1976,7 +1693,7 @@ static inline int md_setxattr(struct obd_export *exp, static inline int md_getxattr(struct obd_export *exp, const struct lu_fid *fid, struct obd_capa *oc, - obd_valid valid, const char *name, + u64 valid, const char *name, const char *input, int input_size, int output_size, int flags, struct ptlrpc_request **request) @@ -2124,12 +1841,12 @@ extern struct kmem_cache *obdo_cachep; #define OBDO_ALLOC(ptr) \ do { \ OBD_SLAB_ALLOC_PTR_GFP((ptr), obdo_cachep, GFP_NOFS); \ -} while(0) +} while (0) #define OBDO_FREE(ptr) \ do { \ OBD_SLAB_FREE_PTR((ptr), obdo_cachep); \ -} while(0) +} while (0) static inline void obdo2fid(struct obdo *oa, struct lu_fid *fid) @@ -2176,10 +1893,6 @@ int class_check_uuid(struct obd_uuid *uuid, __u64 nid); void class_init_uuidlist(void); void class_exit_uuidlist(void); -/* mea.c */ -int mea_name2idx(struct lmv_stripe_md *mea, const char *name, int namelen); -int raw_name2idx(int hashtype, int count, const char *name, int namelen); - /* class_obd.c */ extern char obd_jobid_node[]; diff --git a/drivers/staging/lustre/lustre/include/obd_ost.h b/drivers/staging/lustre/lustre/include/obd_ost.h deleted file mode 100644 index 60de42972ec9..000000000000 --- a/drivers/staging/lustre/lustre/include/obd_ost.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/include/obd_ost.h - * - * Data structures for object storage targets and client: OST & OSC's - * - * See also lustre_idl.h for wire formats of requests. - */ - -#ifndef _LUSTRE_OST_H -#define _LUSTRE_OST_H - -#include "obd_class.h" - -struct osc_brw_async_args { - struct obdo *aa_oa; - int aa_requested_nob; - int aa_nio_count; - obd_count aa_page_count; - int aa_resends; - struct brw_page **aa_ppga; - struct client_obd *aa_cli; - struct list_head aa_oaps; - struct list_head aa_exts; - struct obd_capa *aa_ocapa; - struct cl_req *aa_clerq; -}; - -#define osc_grant_args osc_brw_async_args -struct osc_async_args { - struct obd_info *aa_oi; -}; - -struct osc_setattr_args { - struct obdo *sa_oa; - obd_enqueue_update_f sa_upcall; - void *sa_cookie; -}; - -struct osc_fsync_args { - struct obd_info *fa_oi; - obd_enqueue_update_f fa_upcall; - void *fa_cookie; -}; - -struct osc_enqueue_args { - struct obd_export *oa_exp; - __u64 *oa_flags; - obd_enqueue_update_f oa_upcall; - void *oa_cookie; - struct ost_lvb *oa_lvb; - struct lustre_handle *oa_lockh; - struct ldlm_enqueue_info *oa_ei; - unsigned int oa_agl:1; -}; - -extern void osc_update_enqueue(struct lustre_handle *lov_lockhp, - struct lov_oinfo *loi, __u64 flags, - struct ost_lvb *lvb, __u32 mode, int rc); - -#if 0 -int osc_extent_blocking_cb(struct ldlm_lock *lock, - struct ldlm_lock_desc *new, void *data, - int flag); -#endif - -#endif diff --git a/drivers/staging/lustre/lustre/include/obd_support.h b/drivers/staging/lustre/lustre/include/obd_support.h index 92c89925ff67..2991d2ee780b 100644 --- a/drivers/staging/lustre/lustre/include/obd_support.h +++ b/drivers/staging/lustre/lustre/include/obd_support.h @@ -37,10 +37,10 @@ #ifndef _OBD_SUPPORT #define _OBD_SUPPORT +#include <linux/slab.h> #include "../../include/linux/libcfs/libcfs.h" -#include "lvfs.h" +#include "linux/lustre_compat25.h" #include "lprocfs_status.h" -#include "linux/obd_support.h" /* global variables */ extern struct lprocfs_stats *obd_memory; @@ -127,12 +127,12 @@ int obd_alloc_fail(const void *ptr, const char *name, const char *type, /* Max connect interval for nonresponsive servers; ~50s to avoid building up connect requests in the LND queues, but within obd_timeout so we don't miss the recovery window */ -#define CONNECTION_SWITCH_MAX min(50U, max(CONNECTION_SWITCH_MIN,obd_timeout)) +#define CONNECTION_SWITCH_MAX min(50U, max(CONNECTION_SWITCH_MIN, obd_timeout)) #define CONNECTION_SWITCH_INC 5 /* Connection timeout backoff */ /* In general this should be low to have quick detection of a system running on a backup server. (If it's too low, import_select_connection will increase the timeout anyhow.) */ -#define INITIAL_CONNECT_TIMEOUT max(CONNECTION_SWITCH_MIN,obd_timeout/20) +#define INITIAL_CONNECT_TIMEOUT max(CONNECTION_SWITCH_MIN, obd_timeout/20) /* The max delay between connects is SWITCH_MAX + SWITCH_INC + INITIAL */ #define RECONNECT_DELAY_MAX (CONNECTION_SWITCH_MAX + CONNECTION_SWITCH_INC + \ INITIAL_CONNECT_TIMEOUT) @@ -402,6 +402,7 @@ int obd_alloc_fail(const void *ptr, const char *name, const char *type, #define OBD_FAIL_TGT_LAST_REPLAY 0x710 #define OBD_FAIL_TGT_CLIENT_ADD 0x711 #define OBD_FAIL_TGT_RCVG_FLAG 0x712 +#define OBD_FAIL_TGT_DELAY_CONDITIONAL 0x713 #define OBD_FAIL_MDC_REVALIDATE_PAUSE 0x800 #define OBD_FAIL_MDC_ENQUEUE_PAUSE 0x801 @@ -667,7 +668,7 @@ do { \ } else { \ OBD_ALLOC_POST(ptr, size, "vmalloced"); \ } \ -} while(0) +} while (0) # define OBD_VMALLOC(ptr, size) \ __OBD_VMALLOC_VEROBSE(ptr, NULL, 0, size) @@ -729,7 +730,7 @@ do { \ OBD_FREE_PRE(ptr, size, "kfreed"); \ kfree(ptr); \ POISON_PTR(ptr); \ -} while(0) +} while (0) #define OBD_FREE_RCU(ptr, size, handle) \ @@ -741,7 +742,7 @@ do { \ __h->h_size = (size); \ call_rcu(&__h->h_rcu, class_handle_free_cb); \ POISON_PTR(ptr); \ -} while(0) +} while (0) #define OBD_VFREE(ptr, size) \ @@ -775,7 +776,7 @@ do { \ OBD_SLAB_FREE_RTN0(ptr, slab)))) { \ OBD_ALLOC_POST(ptr, size, "slab-alloced"); \ } \ -} while(0) +} while (0) #define OBD_SLAB_ALLOC_GFP(ptr, slab, size, flags) \ __OBD_SLAB_ALLOC_VERBOSE(ptr, slab, NULL, 0, size, flags) @@ -789,7 +790,7 @@ do { \ OBD_FREE_PRE(ptr, size, "slab-freed"); \ kmem_cache_free(slab, ptr); \ POISON_PTR(ptr); \ -} while(0) +} while (0) #define OBD_SLAB_ALLOC(ptr, slab, size) \ OBD_SLAB_ALLOC_GFP(ptr, slab, size, GFP_NOFS) diff --git a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c index 94f759d0b5ad..24d26ab35346 100644 --- a/drivers/staging/lustre/lustre/lclient/lcommon_cl.c +++ b/drivers/staging/lustre/lustre/lclient/lcommon_cl.c @@ -895,11 +895,11 @@ void ccc_req_completion(const struct lu_env *env, void ccc_req_attr_set(const struct lu_env *env, const struct cl_req_slice *slice, const struct cl_object *obj, - struct cl_req_attr *attr, obd_valid flags) + struct cl_req_attr *attr, u64 flags) { struct inode *inode; struct obdo *oa; - obd_flag valid_flags; + u32 valid_flags; oa = attr->cra_oa; inode = ccc_object_inode(obj); diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c index fda9926bea3b..c21e30a074b9 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lib.c @@ -74,8 +74,10 @@ static int import_set_conn(struct obd_import *imp, struct obd_uuid *uuid, if (create) { OBD_ALLOC(imp_conn, sizeof(*imp_conn)); - if (!imp_conn) - GOTO(out_put, rc = -ENOMEM); + if (!imp_conn) { + rc = -ENOMEM; + goto out_put; + } } spin_lock(&imp->imp_lock); @@ -91,7 +93,8 @@ static int import_set_conn(struct obd_import *imp, struct obd_uuid *uuid, imp, imp->imp_obd->obd_name, uuid->uuid, (priority ? ", moved to head" : "")); spin_unlock(&imp->imp_lock); - GOTO(out_free, rc = 0); + rc = 0; + goto out_free; } } /* No existing import connection found for \a uuid. */ @@ -109,7 +112,8 @@ static int import_set_conn(struct obd_import *imp, struct obd_uuid *uuid, (priority ? "head" : "tail")); } else { spin_unlock(&imp->imp_lock); - GOTO(out_free, rc = -ENOENT); + rc = -ENOENT; + goto out_free; } spin_unlock(&imp->imp_lock); @@ -143,7 +147,7 @@ int client_import_del_conn(struct obd_import *imp, struct obd_uuid *uuid) spin_lock(&imp->imp_lock); if (list_empty(&imp->imp_conn_list)) { LASSERT(!imp->imp_connection); - GOTO(out, rc); + goto out; } list_for_each_entry(imp_conn, &imp->imp_conn_list, oic_item) { @@ -157,7 +161,8 @@ int client_import_del_conn(struct obd_import *imp, struct obd_uuid *uuid) if (imp->imp_state != LUSTRE_IMP_CLOSED && imp->imp_state != LUSTRE_IMP_DISCON) { CERROR("can't remove current connection\n"); - GOTO(out, rc = -EBUSY); + rc = -EBUSY; + goto out; } ptlrpc_connection_put(imp->imp_connection); @@ -262,15 +267,10 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg) char *name = obddev->obd_type->typ_name; ldlm_ns_type_t ns_type = LDLM_NS_TYPE_UNKNOWN; int rc; - char *cli_name = lustre_cfg_buf(lcfg, 0); /* In a more perfect world, we would hang a ptlrpc_client off of * obd_type and just use the values from there. */ - if (!strcmp(name, LUSTRE_OSC_NAME) || - (!(strcmp(name, LUSTRE_OSP_NAME)) && - (is_osp_on_mdt(cli_name) && - strstr(lustre_cfg_buf(lcfg, 1), "OST") != NULL))) { - /* OSC or OSP_on_MDT for OSTs */ + if (!strcmp(name, LUSTRE_OSC_NAME)) { rq_portal = OST_REQUEST_PORTAL; rp_portal = OSC_REPLY_PORTAL; connect_op = OST_CONNECT; @@ -278,17 +278,29 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg) cli->cl_sp_to = LUSTRE_SP_OST; ns_type = LDLM_NS_TYPE_OSC; } else if (!strcmp(name, LUSTRE_MDC_NAME) || - !strcmp(name, LUSTRE_LWP_NAME) || - (!strcmp(name, LUSTRE_OSP_NAME) && - (is_osp_on_mdt(cli_name) && - strstr(lustre_cfg_buf(lcfg, 1), "OST") == NULL))) { - /* MDC or OSP_on_MDT for other MDTs */ + !strcmp(name, LUSTRE_LWP_NAME)) { rq_portal = MDS_REQUEST_PORTAL; rp_portal = MDC_REPLY_PORTAL; connect_op = MDS_CONNECT; cli->cl_sp_me = LUSTRE_SP_CLI; cli->cl_sp_to = LUSTRE_SP_MDT; ns_type = LDLM_NS_TYPE_MDC; + } else if (!strcmp(name, LUSTRE_OSP_NAME)) { + if (strstr(lustre_cfg_buf(lcfg, 1), "OST") == NULL) { + /* OSP_on_MDT for other MDTs */ + connect_op = MDS_CONNECT; + cli->cl_sp_to = LUSTRE_SP_MDT; + ns_type = LDLM_NS_TYPE_MDC; + rq_portal = OUT_PORTAL; + } else { + /* OSP on MDT for OST */ + connect_op = OST_CONNECT; + cli->cl_sp_to = LUSTRE_SP_OST; + ns_type = LDLM_NS_TYPE_OSC; + rq_portal = OST_REQUEST_PORTAL; + } + rp_portal = OSC_REPLY_PORTAL; + cli->cl_sp_me = LUSTRE_SP_CLI; } else if (!strcmp(name, LUSTRE_MGC_NAME)) { rq_portal = MGS_REQUEST_PORTAL; rp_portal = MGC_REPLY_PORTAL; @@ -398,15 +410,17 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg) rc = ldlm_get_ref(); if (rc) { CERROR("ldlm_get_ref failed: %d\n", rc); - GOTO(err, rc); + goto err; } ptlrpc_init_client(rq_portal, rp_portal, name, &obddev->obd_ldlm_client); imp = class_new_import(obddev); - if (imp == NULL) - GOTO(err_ldlm, rc = -ENOENT); + if (imp == NULL) { + rc = -ENOENT; + goto err_ldlm; + } imp->imp_client = &obddev->obd_ldlm_client; imp->imp_connect_op = connect_op; memcpy(cli->cl_target_uuid.uuid, lustre_cfg_buf(lcfg, 1), @@ -416,7 +430,7 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg) rc = client_import_add_conn(imp, &server_uuid, 1); if (rc) { CERROR("can't add initial connection\n"); - GOTO(err_import, rc); + goto err_import; } cli->cl_import = imp; @@ -442,7 +456,8 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg) if (obddev->obd_namespace == NULL) { CERROR("Unable to create client namespace - %s\n", obddev->obd_name); - GOTO(err_import, rc = -ENOMEM); + rc = -ENOMEM; + goto err_import; } cli->cl_qchk_stat = CL_NOT_QUOTACHECKED; @@ -485,12 +500,14 @@ int client_connect_import(const struct lu_env *env, *exp = NULL; down_write(&cli->cl_sem); - if (cli->cl_conn_count > 0 ) - GOTO(out_sem, rc = -EALREADY); + if (cli->cl_conn_count > 0) { + rc = -EALREADY; + goto out_sem; + } rc = class_connect(&conn, obd, cluuid); if (rc) - GOTO(out_sem, rc); + goto out_sem; cli->cl_conn_count++; *exp = class_conn2export(&conn); @@ -500,7 +517,7 @@ int client_connect_import(const struct lu_env *env, imp->imp_dlm_handle = conn; rc = ptlrpc_init_import(imp); if (rc != 0) - GOTO(out_ldlm, rc); + goto out_ldlm; ocd = &imp->imp_connect_data; if (data) { @@ -511,7 +528,7 @@ int client_connect_import(const struct lu_env *env, rc = ptlrpc_connect_import(imp); if (rc != 0) { LASSERT(imp->imp_state == LUSTRE_IMP_DISCON); - GOTO(out_ldlm, rc); + goto out_ldlm; } LASSERT(*exp != NULL && (*exp)->exp_connection); @@ -560,12 +577,15 @@ int client_disconnect_export(struct obd_export *exp) if (!cli->cl_conn_count) { CERROR("disconnecting disconnected device (%s)\n", obd->obd_name); - GOTO(out_disconnect, rc = -EINVAL); + rc = -EINVAL; + goto out_disconnect; } cli->cl_conn_count--; - if (cli->cl_conn_count) - GOTO(out_disconnect, rc = 0); + if (cli->cl_conn_count) { + rc = 0; + goto out_disconnect; + } /* Mark import deactivated now, so we don't try to reconnect if any * of the cleanup RPCs fails (e.g. LDLM cancel, etc). We don't @@ -640,18 +660,18 @@ int target_send_reply_msg(struct ptlrpc_request *req, int rc, int fail_id) { if (OBD_FAIL_CHECK_ORSET(fail_id & ~OBD_FAIL_ONCE, OBD_FAIL_ONCE)) { DEBUG_REQ(D_ERROR, req, "dropping reply"); - return (-ECOMM); + return -ECOMM; } if (unlikely(rc)) { DEBUG_REQ(D_NET, req, "processing error (%d)", rc); req->rq_status = rc; - return (ptlrpc_send_error(req, 1)); + return ptlrpc_send_error(req, 1); } else { DEBUG_REQ(D_NET, req, "sending reply"); } - return (ptlrpc_send_reply(req, PTLRPC_REPLY_MAYBE_DIFFICULT)); + return ptlrpc_send_reply(req, PTLRPC_REPLY_MAYBE_DIFFICULT); } void target_send_reply(struct ptlrpc_request *req, int rc, int fail_id) diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c index d022666fb705..6140130b6056 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lock.c @@ -42,7 +42,7 @@ #define DEBUG_SUBSYSTEM S_LDLM #include "../../include/linux/libcfs/libcfs.h" -#include "../include/linux/lustre_intent.h" +#include "../include/lustre_intent.h" #include "../include/obd_class.h" #include "ldlm_internal.h" @@ -613,50 +613,12 @@ EXPORT_SYMBOL(__ldlm_handle2lock); */ void ldlm_lock2desc(struct ldlm_lock *lock, struct ldlm_lock_desc *desc) { - struct obd_export *exp = lock->l_export ?: lock->l_conn_export; - - /* INODEBITS_INTEROP: If the other side does not support - * inodebits, reply with a plain lock descriptor. */ - if ((lock->l_resource->lr_type == LDLM_IBITS) && - (exp && !(exp_connect_flags(exp) & OBD_CONNECT_IBITS))) { - /* Make sure all the right bits are set in this lock we - are going to pass to client */ - LASSERTF(lock->l_policy_data.l_inodebits.bits == - (MDS_INODELOCK_LOOKUP | MDS_INODELOCK_UPDATE | - MDS_INODELOCK_LAYOUT), - "Inappropriate inode lock bits during conversion %llu\n", - lock->l_policy_data.l_inodebits.bits); - - ldlm_res2desc(lock->l_resource, &desc->l_resource); - desc->l_resource.lr_type = LDLM_PLAIN; - - /* Convert "new" lock mode to something old client can - understand */ - if ((lock->l_req_mode == LCK_CR) || - (lock->l_req_mode == LCK_CW)) - desc->l_req_mode = LCK_PR; - else - desc->l_req_mode = lock->l_req_mode; - if ((lock->l_granted_mode == LCK_CR) || - (lock->l_granted_mode == LCK_CW)) { - desc->l_granted_mode = LCK_PR; - } else { - /* We never grant PW/EX locks to clients */ - LASSERT((lock->l_granted_mode != LCK_PW) && - (lock->l_granted_mode != LCK_EX)); - desc->l_granted_mode = lock->l_granted_mode; - } - - /* We do not copy policy here, because there is no - policy for plain locks */ - } else { - ldlm_res2desc(lock->l_resource, &desc->l_resource); - desc->l_req_mode = lock->l_req_mode; - desc->l_granted_mode = lock->l_granted_mode; - ldlm_convert_policy_to_wire(lock->l_resource->lr_type, - &lock->l_policy_data, - &desc->l_policy_data); - } + ldlm_res2desc(lock->l_resource, &desc->l_resource); + desc->l_req_mode = lock->l_req_mode; + desc->l_granted_mode = lock->l_granted_mode; + ldlm_convert_policy_to_wire(lock->l_resource->lr_type, + &lock->l_policy_data, + &desc->l_policy_data); } EXPORT_SYMBOL(ldlm_lock2desc); @@ -1008,7 +970,8 @@ static void search_granted_lock(struct list_head *queue, prev->policy_link = &req->l_sl_policy; return; } else { - LDLM_ERROR(lock,"is not LDLM_PLAIN or LDLM_IBITS lock"); + LDLM_ERROR(lock, + "is not LDLM_PLAIN or LDLM_IBITS lock"); LBUG(); } } @@ -1291,18 +1254,26 @@ ldlm_mode_t ldlm_lock_match(struct ldlm_namespace *ns, __u64 flags, lock = search_queue(&res->lr_granted, &mode, policy, old_lock, flags, unref); - if (lock != NULL) - GOTO(out, rc = 1); - if (flags & LDLM_FL_BLOCK_GRANTED) - GOTO(out, rc = 0); + if (lock != NULL) { + rc = 1; + goto out; + } + if (flags & LDLM_FL_BLOCK_GRANTED) { + rc = 0; + goto out; + } lock = search_queue(&res->lr_converting, &mode, policy, old_lock, flags, unref); - if (lock != NULL) - GOTO(out, rc = 1); + if (lock != NULL) { + rc = 1; + goto out; + } lock = search_queue(&res->lr_waiting, &mode, policy, old_lock, flags, unref); - if (lock != NULL) - GOTO(out, rc = 1); + if (lock != NULL) { + rc = 1; + goto out; + } out: unlock_res(res); @@ -1392,11 +1363,11 @@ ldlm_mode_t ldlm_revalidate_lock_handle(struct lustre_handle *lockh, if (lock != NULL) { lock_res_and_lock(lock); if (lock->l_flags & LDLM_FL_GONE_MASK) - GOTO(out, mode); + goto out; if (lock->l_flags & LDLM_FL_CBPENDING && lock->l_readers == 0 && lock->l_writers == 0) - GOTO(out, mode); + goto out; if (bits) *bits = lock->l_policy_data.l_inodebits.bits; @@ -1550,19 +1521,19 @@ struct ldlm_lock *ldlm_lock_create(struct ldlm_namespace *ns, /* if this is the extent lock, allocate the interval tree node */ if (type == LDLM_EXTENT) { if (ldlm_interval_alloc(lock) == NULL) - GOTO(out, 0); + goto out; } if (lvb_len) { lock->l_lvb_len = lvb_len; OBD_ALLOC(lock->l_lvb_data, lvb_len); if (lock->l_lvb_data == NULL) - GOTO(out, 0); + goto out; } lock->l_lvb_type = lvb_type; if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_NEW_LOCK)) - GOTO(out, 0); + goto out; return lock; @@ -1630,14 +1601,15 @@ ldlm_error_t ldlm_lock_enqueue(struct ldlm_namespace *ns, * need to do anything else. */ *flags &= ~(LDLM_FL_BLOCK_GRANTED | LDLM_FL_BLOCK_CONV | LDLM_FL_BLOCK_WAIT); - GOTO(out, ELDLM_OK); + goto out; } ldlm_resource_unlink_lock(lock); if (res->lr_type == LDLM_EXTENT && lock->l_tree_node == NULL) { if (node == NULL) { ldlm_lock_destroy_nolock(lock); - GOTO(out, rc = -ENOMEM); + rc = -ENOMEM; + goto out; } INIT_LIST_HEAD(&node->li_group); @@ -1667,7 +1639,7 @@ ldlm_error_t ldlm_lock_enqueue(struct ldlm_namespace *ns, ldlm_resource_add_lock(res, &res->lr_waiting, lock); else ldlm_grant_lock(lock, NULL); - GOTO(out, ELDLM_OK); + goto out; } else { CERROR("This is client-side-only module, cannot handle " "LDLM_NAMESPACE_SERVER resource type lock.\n"); @@ -1784,7 +1756,7 @@ ldlm_work_revoke_ast_lock(struct ptlrpc_request_set *rqset, void *opaq) desc.l_req_mode = LCK_EX; desc.l_granted_mode = 0; - rc = lock->l_blocking_ast(lock, &desc, (void*)arg, LDLM_CB_BLOCKING); + rc = lock->l_blocking_ast(lock, &desc, (void *)arg, LDLM_CB_BLOCKING); LDLM_LOCK_RELEASE(lock); return rc; @@ -1813,7 +1785,7 @@ int ldlm_work_gl_ast_lock(struct ptlrpc_request_set *rqset, void *opaq) arg->gl_desc = gl_work->gl_desc; /* invoke the actual glimpse callback */ - if (lock->l_glimpse_ast(lock, (void*)arg) == 0) + if (lock->l_glimpse_ast(lock, (void *)arg) == 0) rc = 1; LDLM_LOCK_RELEASE(lock); @@ -1874,14 +1846,16 @@ int ldlm_run_ast_work(struct ldlm_namespace *ns, struct list_head *rpc_list, * to keep the number of requests in flight to ns_max_parallel_ast */ arg->set = ptlrpc_prep_fcset(ns->ns_max_parallel_ast ? : UINT_MAX, work_ast_lock, arg); - if (arg->set == NULL) - GOTO(out, rc = -ENOMEM); + if (arg->set == NULL) { + rc = -ENOMEM; + goto out; + } ptlrpc_set_wait(arg->set); ptlrpc_set_destroy(arg->set); rc = atomic_read(&arg->restart) ? -ERESTART : 0; - GOTO(out, rc); + goto out; out: OBD_FREE_PTR(arg); return rc; diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c b/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c index 952e10eb6178..91cf7ebae114 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c @@ -202,7 +202,8 @@ static void ldlm_handle_cp_callback(struct ptlrpc_request *req, lvb_len = req_capsule_get_size(&req->rq_pill, &RMF_DLM_LVB, RCL_CLIENT); if (lvb_len < 0) { LDLM_ERROR(lock, "Fail to get lvb_len, rc = %d", lvb_len); - GOTO(out, rc = lvb_len); + rc = lvb_len; + goto out; } else if (lvb_len > 0) { if (lock->l_lvb_len > 0) { /* for extent lock, lvb contains ost_lvb{}. */ @@ -213,7 +214,8 @@ static void ldlm_handle_cp_callback(struct ptlrpc_request *req, "expectation, expected = %d, " "replied = %d", lock->l_lvb_len, lvb_len); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } } else if (ldlm_has_layout(lock)) { /* for layout lock, lvb has * variable length */ @@ -222,7 +224,8 @@ static void ldlm_handle_cp_callback(struct ptlrpc_request *req, OBD_ALLOC(lvb_data, lvb_len); if (lvb_data == NULL) { LDLM_ERROR(lock, "No memory: %d.\n", lvb_len); - GOTO(out, rc = -ENOMEM); + rc = -ENOMEM; + goto out; } lock_res_and_lock(lock); @@ -240,7 +243,8 @@ static void ldlm_handle_cp_callback(struct ptlrpc_request *req, /* bug 11300: the lock has already been granted */ unlock_res_and_lock(lock); LDLM_DEBUG(lock, "Double grant race happened"); - GOTO(out, rc = 0); + rc = 0; + goto out; } /* If we receive the completion AST before the actual enqueue returned, @@ -267,7 +271,7 @@ static void ldlm_handle_cp_callback(struct ptlrpc_request *req, &dlm_req->lock_desc.l_resource.lr_name); if (rc < 0) { LDLM_ERROR(lock, "Failed to allocate resource"); - GOTO(out, rc); + goto out; } LDLM_DEBUG(lock, "completion AST, new resource"); CERROR("change resource!\n"); @@ -287,7 +291,7 @@ static void ldlm_handle_cp_callback(struct ptlrpc_request *req, lock->l_lvb_data, lvb_len); if (rc < 0) { unlock_res_and_lock(lock); - GOTO(out, rc); + goto out; } } @@ -304,7 +308,7 @@ static void ldlm_handle_cp_callback(struct ptlrpc_request *req, LDLM_DEBUG_NOLOCK("client completion callback handler END (lock %p)", lock); - GOTO(out, rc); + goto out; out: if (rc < 0) { @@ -980,7 +984,7 @@ int ldlm_init_export(struct obd_export *exp) rc = ldlm_init_flock_export(exp); if (rc) - GOTO(err, rc); + goto err; return 0; err: @@ -1014,7 +1018,7 @@ static int ldlm_setup(void) rc = ldlm_proc_setup(); if (rc != 0) - GOTO(out, rc); + goto out; memset(&conf, 0, sizeof(conf)); conf = (typeof(conf)) { @@ -1051,13 +1055,15 @@ static int ldlm_setup(void) CERROR("failed to start service\n"); rc = PTR_ERR(ldlm_state->ldlm_cb_service); ldlm_state->ldlm_cb_service = NULL; - GOTO(out, rc); + goto out; } OBD_ALLOC(blp, sizeof(*blp)); - if (blp == NULL) - GOTO(out, rc = -ENOMEM); + if (blp == NULL) { + rc = -ENOMEM; + goto out; + } ldlm_state->ldlm_bl_pool = blp; spin_lock_init(&blp->blp_lock); @@ -1079,14 +1085,14 @@ static int ldlm_setup(void) for (i = 0; i < blp->blp_min_threads; i++) { rc = ldlm_bl_thread_start(blp); if (rc < 0) - GOTO(out, rc); + goto out; } rc = ldlm_pools_init(); if (rc) { CERROR("Failed to initialize LDLM pools: %d\n", rc); - GOTO(out, rc); + goto out; } return 0; diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index db36b3f46e49..6054eee848d3 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -631,7 +631,7 @@ EXPORT_SYMBOL(ldlm_pool_shrink); int ldlm_pool_setup(struct ldlm_pool *pl, int limit) { if (pl->pl_ops->po_setup != NULL) - return(pl->pl_ops->po_setup(pl, limit)); + return pl->pl_ops->po_setup(pl, limit); return 0; } EXPORT_SYMBOL(ldlm_pool_setup); @@ -735,7 +735,8 @@ static int ldlm_pool_proc_init(struct ldlm_pool *pl) if (parent_ns_proc == NULL) { CERROR("%s: proc entry is not initialized\n", ldlm_ns_name(ns)); - GOTO(out_free_name, rc = -EINVAL); + rc = -EINVAL; + goto out_free_name; } pl->pl_proc_dir = lprocfs_register("pool", parent_ns_proc, NULL, NULL); @@ -743,7 +744,7 @@ static int ldlm_pool_proc_init(struct ldlm_pool *pl) CERROR("LProcFS failed in ldlm-pool-init\n"); rc = PTR_ERR(pl->pl_proc_dir); pl->pl_proc_dir = NULL; - GOTO(out_free_name, rc); + goto out_free_name; } var_name[MAX_STRING_SIZE] = '\0'; @@ -767,8 +768,10 @@ static int ldlm_pool_proc_init(struct ldlm_pool *pl) pl->pl_stats = lprocfs_alloc_stats(LDLM_POOL_LAST_STAT - LDLM_POOL_FIRST_STAT, 0); - if (!pl->pl_stats) - GOTO(out_free_name, rc = -ENOMEM); + if (!pl->pl_stats) { + rc = -ENOMEM; + goto out_free_name; + } lprocfs_counter_init(pl->pl_stats, LDLM_POOL_GRANTED_STAT, LPROCFS_CNTR_AVGMINMAX | LPROCFS_CNTR_STDDEV, @@ -1168,8 +1171,7 @@ int ldlm_pools_recalc(ldlm_side_t client) */ mutex_lock(ldlm_namespace_lock(client)); list_for_each_entry(ns, ldlm_namespace_list(client), - ns_list_chain) - { + ns_list_chain) { if (ns->ns_appetite != LDLM_NAMESPACE_MODEST) continue; diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c index 8867dc175325..9ce437b18793 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_request.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_request.c @@ -423,8 +423,10 @@ int ldlm_cli_enqueue_local(struct ldlm_namespace *ns, lock = ldlm_lock_create(ns, res_id, type, mode, &cbs, data, lvb_len, lvb_type); - if (unlikely(!lock)) - GOTO(out_nolock, err = -ENOMEM); + if (unlikely(!lock)) { + err = -ENOMEM; + goto out_nolock; + } ldlm_lock2handle(lock, lockh); @@ -444,7 +446,7 @@ int ldlm_cli_enqueue_local(struct ldlm_namespace *ns, err = ldlm_lock_enqueue(ns, &lock, policy, flags); if (unlikely(err != ELDLM_OK)) - GOTO(out, err); + goto out; if (policy != NULL) *policy = lock->l_policy_data; @@ -510,7 +512,7 @@ static void failed_lock_cleanup(struct ldlm_namespace *ns, int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req, ldlm_type_t type, __u8 with_policy, ldlm_mode_t mode, __u64 *flags, void *lvb, __u32 lvb_len, - struct lustre_handle *lockh,int rc) + struct lustre_handle *lockh, int rc) { struct ldlm_namespace *ns = exp->exp_obd->obd_namespace; int is_replay = *flags & LDLM_FL_REPLAY; @@ -535,13 +537,15 @@ int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req, rc == ELDLM_LOCK_ABORTED ? "ABORTED" : "FAILED"); if (rc != ELDLM_LOCK_ABORTED) - GOTO(cleanup, rc); + goto cleanup; } /* Before we return, swab the reply */ reply = req_capsule_server_get(&req->rq_pill, &RMF_DLM_REP); - if (reply == NULL) - GOTO(cleanup, rc = -EPROTO); + if (reply == NULL) { + rc = -EPROTO; + goto cleanup; + } if (lvb_len != 0) { LASSERT(lvb != NULL); @@ -550,12 +554,14 @@ int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req, RCL_SERVER); if (size < 0) { LDLM_ERROR(lock, "Fail to get lvb_len, rc = %d", size); - GOTO(cleanup, rc = size); + rc = size; + goto cleanup; } else if (unlikely(size > lvb_len)) { LDLM_ERROR(lock, "Replied LVB is larger than " "expectation, expected = %d, replied = %d", lvb_len, size); - GOTO(cleanup, rc = -EINVAL); + rc = -EINVAL; + goto cleanup; } } @@ -563,7 +569,9 @@ int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req, if (lvb_len != 0) rc = ldlm_fill_lvb(lock, &req->rq_pill, RCL_SERVER, lvb, size); - GOTO(cleanup, rc = (rc != 0 ? rc : ELDLM_LOCK_ABORTED)); + if (rc == 0) + rc = ELDLM_LOCK_ABORTED; + goto cleanup; } /* lock enqueued on the server */ @@ -616,8 +624,10 @@ int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req, rc = ldlm_lock_change_resource(ns, lock, &reply->lock_desc.l_resource.lr_name); - if (rc || lock->l_resource == NULL) - GOTO(cleanup, rc = -ENOMEM); + if (rc || lock->l_resource == NULL) { + rc = -ENOMEM; + goto cleanup; + } LDLM_DEBUG(lock, "client-side enqueue, new resource"); } if (with_policy) @@ -629,7 +639,8 @@ int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req, &reply->lock_desc.l_policy_data, &lock->l_policy_data); if (type != LDLM_PLAIN) - LDLM_DEBUG(lock,"client-side enqueue, new policy data"); + LDLM_DEBUG(lock, + "client-side enqueue, new policy data"); } if ((*flags) & LDLM_FL_AST_SENT || @@ -657,7 +668,7 @@ int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req, unlock_res_and_lock(lock); if (rc < 0) { cleanup_phase = 1; - GOTO(cleanup, rc); + goto cleanup; } } @@ -876,21 +887,8 @@ int ldlm_cli_enqueue(struct obd_export *exp, struct ptlrpc_request **reqp, /* for the local lock, add the reference */ ldlm_lock_addref_internal(lock, einfo->ei_mode); ldlm_lock2handle(lock, lockh); - if (policy != NULL) { - /* INODEBITS_INTEROP: If the server does not support - * inodebits, we will request a plain lock in the - * descriptor (ldlm_lock2desc() below) but use an - * inodebits lock internally with both bits set. - */ - if (einfo->ei_type == LDLM_IBITS && - !(exp_connect_flags(exp) & - OBD_CONNECT_IBITS)) - lock->l_policy_data.l_inodebits.bits = - MDS_INODELOCK_LOOKUP | - MDS_INODELOCK_UPDATE; - else + if (policy != NULL) lock->l_policy_data = *policy; - } if (einfo->ei_type == LDLM_EXTENT) lock->l_req_extent = policy->l_extent; @@ -1049,14 +1047,18 @@ int ldlm_cli_convert(struct lustre_handle *lockh, int new_mode, __u32 *flags) ptlrpc_request_set_replen(req); rc = ptlrpc_queue_wait(req); if (rc != ELDLM_OK) - GOTO(out, rc); + goto out; reply = req_capsule_server_get(&req->rq_pill, &RMF_DLM_REP); - if (reply == NULL) - GOTO(out, rc = -EPROTO); + if (reply == NULL) { + rc = -EPROTO; + goto out; + } - if (req->rq_status) - GOTO(out, rc = req->rq_status); + if (req->rq_status) { + rc = req->rq_status; + goto out; + } res = ldlm_lock_convert(lock, new_mode, &reply->lock_flags); if (res != NULL) { @@ -1067,7 +1069,7 @@ int ldlm_cli_convert(struct lustre_handle *lockh, int new_mode, __u32 *flags) rc = lock->l_completion_ast(lock, LDLM_FL_WAIT_NOREPROC, NULL); if (rc) - GOTO(out, rc); + goto out; } } else { rc = LUSTRE_EDEADLK; @@ -1191,8 +1193,10 @@ int ldlm_cli_cancel_req(struct obd_export *exp, struct list_head *cancels, } req = ptlrpc_request_alloc(imp, &RQF_LDLM_CANCEL); - if (req == NULL) - GOTO(out, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out; + } req_capsule_filled_sizes(&req->rq_pill, RCL_CLIENT); req_capsule_set_size(&req->rq_pill, &RMF_DLM_REQ, RCL_CLIENT, @@ -1201,7 +1205,7 @@ int ldlm_cli_cancel_req(struct obd_export *exp, struct list_head *cancels, rc = ptlrpc_request_pack(req, LUSTRE_DLM_VERSION, LDLM_CANCEL); if (rc) { ptlrpc_request_free(req); - GOTO(out, rc); + goto out; } req->rq_request_portal = LDLM_CANCEL_REQUEST_PORTAL; @@ -1214,7 +1218,7 @@ int ldlm_cli_cancel_req(struct obd_export *exp, struct list_head *cancels, if (flags & LCF_ASYNC) { ptlrpcd_add_req(req, PDL_POLICY_LOCAL, -1); sent = count; - GOTO(out, 0); + goto out; } else { rc = ptlrpc_queue_wait(req); } @@ -1261,8 +1265,7 @@ int ldlm_cli_update_pool(struct ptlrpc_request *req) __u32 new_limit; if (unlikely(!req->rq_import || !req->rq_import->imp_obd || - !imp_connect_lru_resize(req->rq_import))) - { + !imp_connect_lru_resize(req->rq_import))) { /* * Do nothing for corner cases. */ @@ -1974,22 +1977,28 @@ int ldlm_resource_foreach(struct ldlm_resource *res, ldlm_iterator_t iter, list_for_each_safe(tmp, next, &res->lr_granted) { lock = list_entry(tmp, struct ldlm_lock, l_res_link); - if (iter(lock, closure) == LDLM_ITER_STOP) - GOTO(out, rc = LDLM_ITER_STOP); + if (iter(lock, closure) == LDLM_ITER_STOP) { + rc = LDLM_ITER_STOP; + goto out; + } } list_for_each_safe(tmp, next, &res->lr_converting) { lock = list_entry(tmp, struct ldlm_lock, l_res_link); - if (iter(lock, closure) == LDLM_ITER_STOP) - GOTO(out, rc = LDLM_ITER_STOP); + if (iter(lock, closure) == LDLM_ITER_STOP) { + rc = LDLM_ITER_STOP; + goto out; + } } list_for_each_safe(tmp, next, &res->lr_waiting) { lock = list_entry(tmp, struct ldlm_lock, l_res_link); - if (iter(lock, closure) == LDLM_ITER_STOP) - GOTO(out, rc = LDLM_ITER_STOP); + if (iter(lock, closure) == LDLM_ITER_STOP) { + rc = LDLM_ITER_STOP; + goto out; + } } out: unlock_res(res); @@ -2094,12 +2103,14 @@ static int replay_lock_interpret(const struct lu_env *env, atomic_dec(&req->rq_import->imp_replay_inflight); if (rc != ELDLM_OK) - GOTO(out, rc); + goto out; reply = req_capsule_server_get(&req->rq_pill, &RMF_DLM_REP); - if (reply == NULL) - GOTO(out, rc = -EPROTO); + if (reply == NULL) { + rc = -EPROTO; + goto out; + } lock = ldlm_handle2lock(&aa->lock_handle); if (!lock) { @@ -2108,7 +2119,8 @@ static int replay_lock_interpret(const struct lu_env *env, aa->lock_handle.cookie, reply->lock_handle.cookie, req->rq_export->exp_client_uuid.uuid, libcfs_id2str(req->rq_peer)); - GOTO(out, rc = -ESTALE); + rc = -ESTALE; + goto out; } /* Key change rehash lock in per-export hash with new key */ diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c index efd45e513416..a785b7a7d1b3 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_resource.c @@ -102,7 +102,7 @@ int ldlm_proc_setup(void) if (IS_ERR(ldlm_type_proc_dir)) { CERROR("LProcFS failed in ldlm-init\n"); rc = PTR_ERR(ldlm_type_proc_dir); - GOTO(err, rc); + goto err; } ldlm_ns_proc_dir = lprocfs_register("namespaces", @@ -111,7 +111,7 @@ int ldlm_proc_setup(void) if (IS_ERR(ldlm_ns_proc_dir)) { CERROR("LProcFS failed in ldlm-init\n"); rc = PTR_ERR(ldlm_ns_proc_dir); - GOTO(err_type, rc); + goto err_type; } ldlm_svc_proc_dir = lprocfs_register("services", @@ -120,7 +120,7 @@ int ldlm_proc_setup(void) if (IS_ERR(ldlm_svc_proc_dir)) { CERROR("LProcFS failed in ldlm-init\n"); rc = PTR_ERR(ldlm_svc_proc_dir); - GOTO(err_ns, rc); + goto err_ns; } rc = lprocfs_add_vars(ldlm_type_proc_dir, list, NULL); @@ -511,8 +511,7 @@ typedef struct { cfs_hash_ops_t *nsd_hops; } ldlm_ns_hash_def_t; -ldlm_ns_hash_def_t ldlm_ns_hash_defs[] = -{ +ldlm_ns_hash_def_t ldlm_ns_hash_defs[] = { { .nsd_type = LDLM_NS_TYPE_MDC, .nsd_bkt_bits = 11, @@ -581,7 +580,7 @@ struct ldlm_namespace *ldlm_namespace_new(struct obd_device *obd, char *name, nsd = &ldlm_ns_hash_defs[idx]; if (nsd->nsd_type == LDLM_NS_TYPE_UNKNOWN) { CERROR("Unknown type %d for ns %s\n", ns_type, name); - GOTO(out_ref, NULL); + goto out_ref; } if (nsd->nsd_type == ns_type) @@ -590,7 +589,7 @@ struct ldlm_namespace *ldlm_namespace_new(struct obd_device *obd, char *name, OBD_ALLOC_PTR(ns); if (!ns) - GOTO(out_ref, NULL); + goto out_ref; ns->ns_rs_hash = cfs_hash_create(name, nsd->nsd_all_bits, nsd->nsd_all_bits, @@ -603,7 +602,7 @@ struct ldlm_namespace *ldlm_namespace_new(struct obd_device *obd, char *name, CFS_HASH_SPIN_BKTLOCK | CFS_HASH_NO_ITEMREF); if (ns->ns_rs_hash == NULL) - GOTO(out_ns, NULL); + goto out_ns; cfs_hash_for_each_bucket(ns->ns_rs_hash, &bd, idx) { nsb = cfs_hash_bd_extra_get(ns->ns_rs_hash, &bd); @@ -637,14 +636,14 @@ struct ldlm_namespace *ldlm_namespace_new(struct obd_device *obd, char *name, rc = ldlm_namespace_proc_register(ns); if (rc != 0) { CERROR("Can't initialize ns proc, rc %d\n", rc); - GOTO(out_hash, rc); + goto out_hash; } idx = ldlm_namespace_nr_read(client); rc = ldlm_pool_init(&ns->ns_pool, ns, idx, client); if (rc) { CERROR("Can't initialize lock pool, rc %d\n", rc); - GOTO(out_proc, rc); + goto out_proc; } ldlm_namespace_register(ns, client); @@ -823,7 +822,7 @@ force_wait: "namespace with %d resources in use, " "(rc=%d)\n", ldlm_ns_name(ns), atomic_read(&ns->ns_bref), rc); - GOTO(force_wait, rc); + goto force_wait; } if (atomic_read(&ns->ns_bref)) { diff --git a/drivers/staging/lustre/lustre/libcfs/Makefile b/drivers/staging/lustre/lustre/libcfs/Makefile index aeeaab73a1fd..fcecbd2271af 100644 --- a/drivers/staging/lustre/lustre/libcfs/Makefile +++ b/drivers/staging/lustre/lustre/libcfs/Makefile @@ -12,7 +12,7 @@ libcfs-linux-objs := $(addprefix linux/,$(libcfs-linux-objs)) libcfs-all-objs := debug.o fail.o nidstrings.o module.o tracefile.o \ libcfs_string.o hash.o kernel_user_comm.o \ - prng.o workitem.o upcall_cache.o libcfs_cpu.o \ + prng.o workitem.o libcfs_cpu.o \ libcfs_mem.o libcfs_lock.o libcfs-objs := $(libcfs-linux-objs) $(libcfs-all-objs) diff --git a/drivers/staging/lustre/lustre/libcfs/debug.c b/drivers/staging/lustre/lustre/libcfs/debug.c index 6b584698d3ae..ba43b3067fa3 100644 --- a/drivers/staging/lustre/lustre/libcfs/debug.c +++ b/drivers/staging/lustre/lustre/libcfs/debug.c @@ -314,9 +314,8 @@ libcfs_debug_str2mask(int *mask, const char *str, int is_subsys) if (!isspace(str[n-1])) break; matched = n; - - if ((t = sscanf(str, "%i%n", &m, &matched)) >= 1 && - matched == n) { + t = sscanf(str, "%i%n", &m, &matched); + if (t >= 1 && matched == n) { /* don't print warning for lctl set_param debug=0 or -1 */ if (m != 0 && m != -1) CWARN("You are trying to use a numerical value for the " @@ -344,7 +343,7 @@ void libcfs_debug_dumplog_internal(void *arg) snprintf(debug_file_name, sizeof(debug_file_name) - 1, "%s.%ld.%ld", libcfs_debug_file_path_arr, get_seconds(), (long_ptr_t)arg); - printk(KERN_ALERT "LustreError: dumping log to %s\n", + pr_alert("LustreError: dumping log to %s\n", debug_file_name); cfs_tracefile_dump_all_pages(debug_file_name); libcfs_run_debug_log_upcall(debug_file_name); @@ -376,7 +375,7 @@ void libcfs_debug_dumplog(void) (void *)(long)current_pid(), "libcfs_debug_dumper"); if (IS_ERR(dumper)) - printk(KERN_ERR "LustreError: cannot start log dump thread:" + pr_err("LustreError: cannot start log dump thread:" " %ld\n", PTR_ERR(dumper)); else schedule(); @@ -402,9 +401,9 @@ int libcfs_debug_init(unsigned long bufsize) } if (libcfs_debug_file_path != NULL) { - memset(libcfs_debug_file_path_arr, 0, PATH_MAX); strncpy(libcfs_debug_file_path_arr, libcfs_debug_file_path, PATH_MAX-1); + libcfs_debug_file_path_arr[PATH_MAX - 1] = '\0'; } /* If libcfs_debug_mb is set to an invalid value or uninitialized @@ -442,9 +441,11 @@ int libcfs_debug_clear_buffer(void) #define DEBUG_SUBSYSTEM S_UNDEFINED int libcfs_debug_mark_buffer(const char *text) { - CDEBUG(D_TRACE,"***************************************************\n"); + CDEBUG(D_TRACE, + "***************************************************\n"); LCONSOLE(D_WARNING, "DEBUG MARKER: %s\n", text); - CDEBUG(D_TRACE,"***************************************************\n"); + CDEBUG(D_TRACE, + "***************************************************\n"); return 0; } @@ -453,7 +454,7 @@ int libcfs_debug_mark_buffer(const char *text) void libcfs_debug_set_level(unsigned int debug_level) { - printk(KERN_WARNING "Lustre: Setting portals debug level to %08x\n", + pr_warn("Lustre: Setting portals debug level to %08x\n", debug_level); libcfs_debug = debug_level; } diff --git a/drivers/staging/lustre/lustre/libcfs/hash.c b/drivers/staging/lustre/lustre/libcfs/hash.c index 8ef1deb59d4a..3b67b7b6428c 100644 --- a/drivers/staging/lustre/lustre/libcfs/hash.c +++ b/drivers/staging/lustre/lustre/libcfs/hash.c @@ -155,8 +155,7 @@ cfs_hash_rw_unlock(union cfs_hash_lock *lock, int exclusive) } /** No lock hash */ -static cfs_hash_lock_ops_t cfs_hash_nl_lops = -{ +static cfs_hash_lock_ops_t cfs_hash_nl_lops = { .hs_lock = cfs_hash_nl_lock, .hs_unlock = cfs_hash_nl_unlock, .hs_bkt_lock = cfs_hash_nl_lock, @@ -164,8 +163,7 @@ static cfs_hash_lock_ops_t cfs_hash_nl_lops = }; /** no bucket lock, one spinlock to protect everything */ -static cfs_hash_lock_ops_t cfs_hash_nbl_lops = -{ +static cfs_hash_lock_ops_t cfs_hash_nbl_lops = { .hs_lock = cfs_hash_spin_lock, .hs_unlock = cfs_hash_spin_unlock, .hs_bkt_lock = cfs_hash_nl_lock, @@ -173,8 +171,7 @@ static cfs_hash_lock_ops_t cfs_hash_nbl_lops = }; /** spin bucket lock, rehash is enabled */ -static cfs_hash_lock_ops_t cfs_hash_bkt_spin_lops = -{ +static cfs_hash_lock_ops_t cfs_hash_bkt_spin_lops = { .hs_lock = cfs_hash_rw_lock, .hs_unlock = cfs_hash_rw_unlock, .hs_bkt_lock = cfs_hash_spin_lock, @@ -182,8 +179,7 @@ static cfs_hash_lock_ops_t cfs_hash_bkt_spin_lops = }; /** rw bucket lock, rehash is enabled */ -static cfs_hash_lock_ops_t cfs_hash_bkt_rw_lops = -{ +static cfs_hash_lock_ops_t cfs_hash_bkt_rw_lops = { .hs_lock = cfs_hash_rw_lock, .hs_unlock = cfs_hash_rw_unlock, .hs_bkt_lock = cfs_hash_rw_lock, @@ -191,8 +187,7 @@ static cfs_hash_lock_ops_t cfs_hash_bkt_rw_lops = }; /** spin bucket lock, rehash is disabled */ -static cfs_hash_lock_ops_t cfs_hash_nr_bkt_spin_lops = -{ +static cfs_hash_lock_ops_t cfs_hash_nr_bkt_spin_lops = { .hs_lock = cfs_hash_nl_lock, .hs_unlock = cfs_hash_nl_unlock, .hs_bkt_lock = cfs_hash_spin_lock, @@ -200,8 +195,7 @@ static cfs_hash_lock_ops_t cfs_hash_nr_bkt_spin_lops = }; /** rw bucket lock, rehash is disabled */ -static cfs_hash_lock_ops_t cfs_hash_nr_bkt_rw_lops = -{ +static cfs_hash_lock_ops_t cfs_hash_nr_bkt_rw_lops = { .hs_lock = cfs_hash_nl_lock, .hs_unlock = cfs_hash_nl_unlock, .hs_bkt_lock = cfs_hash_rw_lock, @@ -2098,7 +2092,7 @@ int cfs_hash_debug_str(struct cfs_hash *hs, struct seq_file *m) maxdepb = ffz(~maxdep); } total += bd.bd_bucket->hsb_count; - dist[min(__cfs_fls(bd.bd_bucket->hsb_count/max(theta,1)),7)]++; + dist[min(fls(bd.bd_bucket->hsb_count / max(theta, 1)), 7)]++; cfs_hash_bd_unlock(hs, &bd, 0); } diff --git a/drivers/staging/lustre/lustre/libcfs/heap.c b/drivers/staging/lustre/lustre/libcfs/heap.c deleted file mode 100644 index bf6d0b91c35f..000000000000 --- a/drivers/staging/lustre/lustre/libcfs/heap.c +++ /dev/null @@ -1,475 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - - * 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 COPYING file that accompanied this code. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * GPL HEADER END - */ -/* - * Copyright (c) 2011 Intel Corporation - */ -/* - * libcfs/libcfs/heap.c - * - * Author: Eric Barton <eeb@whamcloud.com> - * Liang Zhen <liang@whamcloud.com> - */ -/** \addtogroup heap - * - * @{ - */ - -#define DEBUG_SUBSYSTEM S_LNET - -#include "../../include/linux/libcfs/libcfs.h" - -#define CBH_ALLOC(ptr, h) \ -do { \ - if ((h)->cbh_flags & CBH_FLAG_ATOMIC_GROW) \ - LIBCFS_CPT_ALLOC_GFP((ptr), h->cbh_cptab, h->cbh_cptid, \ - CBH_NOB, GFP_ATOMIC); \ - else \ - LIBCFS_CPT_ALLOC((ptr), h->cbh_cptab, h->cbh_cptid, \ - CBH_NOB); \ -} while (0) - -#define CBH_FREE(ptr) LIBCFS_FREE(ptr, CBH_NOB) - -/** - * Grows the capacity of a binary heap so that it can handle a larger number of - * \e cfs_binheap_node_t objects. - * - * \param[in] h The binary heap - * - * \retval 0 Successfully grew the heap - * \retval -ENOMEM OOM error - */ -static int -cfs_binheap_grow(cfs_binheap_t *h) -{ - cfs_binheap_node_t ***frag1 = NULL; - cfs_binheap_node_t **frag2; - int hwm = h->cbh_hwm; - - /* need a whole new chunk of pointers */ - LASSERT((h->cbh_hwm & CBH_MASK) == 0); - - if (hwm == 0) { - /* first use of single indirect */ - CBH_ALLOC(h->cbh_elements1, h); - if (h->cbh_elements1 == NULL) - return -ENOMEM; - - goto out; - } - - hwm -= CBH_SIZE; - if (hwm < CBH_SIZE * CBH_SIZE) { - /* not filled double indirect */ - CBH_ALLOC(frag2, h); - if (frag2 == NULL) - return -ENOMEM; - - if (hwm == 0) { - /* first use of double indirect */ - CBH_ALLOC(h->cbh_elements2, h); - if (h->cbh_elements2 == NULL) { - CBH_FREE(frag2); - return -ENOMEM; - } - } - - h->cbh_elements2[hwm >> CBH_SHIFT] = frag2; - goto out; - } - - hwm -= CBH_SIZE * CBH_SIZE; -#if (CBH_SHIFT * 3 < 32) - if (hwm >= CBH_SIZE * CBH_SIZE * CBH_SIZE) { - /* filled triple indirect */ - return -ENOMEM; - } -#endif - CBH_ALLOC(frag2, h); - if (frag2 == NULL) - return -ENOMEM; - - if (((hwm >> CBH_SHIFT) & CBH_MASK) == 0) { - /* first use of this 2nd level index */ - CBH_ALLOC(frag1, h); - if (frag1 == NULL) { - CBH_FREE(frag2); - return -ENOMEM; - } - } - - if (hwm == 0) { - /* first use of triple indirect */ - CBH_ALLOC(h->cbh_elements3, h); - if (h->cbh_elements3 == NULL) { - CBH_FREE(frag2); - CBH_FREE(frag1); - return -ENOMEM; - } - } - - if (frag1 != NULL) { - LASSERT(h->cbh_elements3[hwm >> (2 * CBH_SHIFT)] == NULL); - h->cbh_elements3[hwm >> (2 * CBH_SHIFT)] = frag1; - } else { - frag1 = h->cbh_elements3[hwm >> (2 * CBH_SHIFT)]; - LASSERT(frag1 != NULL); - } - - frag1[(hwm >> CBH_SHIFT) & CBH_MASK] = frag2; - - out: - h->cbh_hwm += CBH_SIZE; - return 0; -} - -/** - * Creates and initializes a binary heap instance. - * - * \param[in] ops The operations to be used - * \param[in] flags The heap flags - * \parm[in] count The initial heap capacity in # of elements - * \param[in] arg An optional private argument - * \param[in] cptab The CPT table this heap instance will operate over - * \param[in] cptid The CPT id of \a cptab this heap instance will operate over - * - * \retval valid-pointer A newly-created and initialized binary heap object - * \retval NULL error - */ -cfs_binheap_t * -cfs_binheap_create(cfs_binheap_ops_t *ops, unsigned int flags, - unsigned count, void *arg, struct cfs_cpt_table *cptab, - int cptid) -{ - cfs_binheap_t *h; - - LASSERT(ops != NULL); - LASSERT(ops->hop_compare != NULL); - LASSERT(cptab != NULL); - LASSERT(cptid == CFS_CPT_ANY || - (cptid >= 0 && cptid < cptab->ctb_nparts)); - - LIBCFS_CPT_ALLOC(h, cptab, cptid, sizeof(*h)); - if (h == NULL) - return NULL; - - h->cbh_ops = ops; - h->cbh_nelements = 0; - h->cbh_hwm = 0; - h->cbh_private = arg; - h->cbh_flags = flags & (~CBH_FLAG_ATOMIC_GROW); - h->cbh_cptab = cptab; - h->cbh_cptid = cptid; - - while (h->cbh_hwm < count) { /* preallocate */ - if (cfs_binheap_grow(h) != 0) { - cfs_binheap_destroy(h); - return NULL; - } - } - - h->cbh_flags |= flags & CBH_FLAG_ATOMIC_GROW; - - return h; -} -EXPORT_SYMBOL(cfs_binheap_create); - -/** - * Releases all resources associated with a binary heap instance. - * - * Deallocates memory for all indirection levels and the binary heap object - * itself. - * - * \param[in] h The binary heap object - */ -void -cfs_binheap_destroy(cfs_binheap_t *h) -{ - int idx0; - int idx1; - int n; - - LASSERT(h != NULL); - - n = h->cbh_hwm; - - if (n > 0) { - CBH_FREE(h->cbh_elements1); - n -= CBH_SIZE; - } - - if (n > 0) { - for (idx0 = 0; idx0 < CBH_SIZE && n > 0; idx0++) { - CBH_FREE(h->cbh_elements2[idx0]); - n -= CBH_SIZE; - } - - CBH_FREE(h->cbh_elements2); - } - - if (n > 0) { - for (idx0 = 0; idx0 < CBH_SIZE && n > 0; idx0++) { - - for (idx1 = 0; idx1 < CBH_SIZE && n > 0; idx1++) { - CBH_FREE(h->cbh_elements3[idx0][idx1]); - n -= CBH_SIZE; - } - - CBH_FREE(h->cbh_elements3[idx0]); - } - - CBH_FREE(h->cbh_elements3); - } - - LIBCFS_FREE(h, sizeof(*h)); -} -EXPORT_SYMBOL(cfs_binheap_destroy); - -/** - * Obtains a double pointer to a heap element, given its index into the binary - * tree. - * - * \param[in] h The binary heap instance - * \param[in] idx The requested node's index - * - * \retval valid-pointer A double pointer to a heap pointer entry - */ -static cfs_binheap_node_t ** -cfs_binheap_pointer(cfs_binheap_t *h, unsigned int idx) -{ - if (idx < CBH_SIZE) - return &(h->cbh_elements1[idx]); - - idx -= CBH_SIZE; - if (idx < CBH_SIZE * CBH_SIZE) - return &(h->cbh_elements2[idx >> CBH_SHIFT][idx & CBH_MASK]); - - idx -= CBH_SIZE * CBH_SIZE; - return &(h->cbh_elements3[idx >> (2 * CBH_SHIFT)]\ - [(idx >> CBH_SHIFT) & CBH_MASK]\ - [idx & CBH_MASK]); -} - -/** - * Obtains a pointer to a heap element, given its index into the binary tree. - * - * \param[in] h The binary heap - * \param[in] idx The requested node's index - * - * \retval valid-pointer The requested heap node - * \retval NULL Supplied index is out of bounds - */ -cfs_binheap_node_t * -cfs_binheap_find(cfs_binheap_t *h, unsigned int idx) -{ - if (idx >= h->cbh_nelements) - return NULL; - - return *cfs_binheap_pointer(h, idx); -} -EXPORT_SYMBOL(cfs_binheap_find); - -/** - * Moves a node upwards, towards the root of the binary tree. - * - * \param[in] h The heap - * \param[in] e The node - * - * \retval 1 The position of \a e in the tree was changed at least once - * \retval 0 The position of \a e in the tree was not changed - */ -static int -cfs_binheap_bubble(cfs_binheap_t *h, cfs_binheap_node_t *e) -{ - unsigned int cur_idx = e->chn_index; - cfs_binheap_node_t **cur_ptr; - unsigned int parent_idx; - cfs_binheap_node_t **parent_ptr; - int did_sth = 0; - - cur_ptr = cfs_binheap_pointer(h, cur_idx); - LASSERT(*cur_ptr == e); - - while (cur_idx > 0) { - parent_idx = (cur_idx - 1) >> 1; - - parent_ptr = cfs_binheap_pointer(h, parent_idx); - LASSERT((*parent_ptr)->chn_index == parent_idx); - - if (h->cbh_ops->hop_compare(*parent_ptr, e)) - break; - - (*parent_ptr)->chn_index = cur_idx; - *cur_ptr = *parent_ptr; - cur_ptr = parent_ptr; - cur_idx = parent_idx; - did_sth = 1; - } - - e->chn_index = cur_idx; - *cur_ptr = e; - - return did_sth; -} - -/** - * Moves a node downwards, towards the last level of the binary tree. - * - * \param[in] h The heap - * \param[in] e The node - * - * \retval 1 The position of \a e in the tree was changed at least once - * \retval 0 The position of \a e in the tree was not changed - */ -static int -cfs_binheap_sink(cfs_binheap_t *h, cfs_binheap_node_t *e) -{ - unsigned int n = h->cbh_nelements; - unsigned int child_idx; - cfs_binheap_node_t **child_ptr; - cfs_binheap_node_t *child; - unsigned int child2_idx; - cfs_binheap_node_t **child2_ptr; - cfs_binheap_node_t *child2; - unsigned int cur_idx; - cfs_binheap_node_t **cur_ptr; - int did_sth = 0; - - cur_idx = e->chn_index; - cur_ptr = cfs_binheap_pointer(h, cur_idx); - LASSERT(*cur_ptr == e); - - while (cur_idx < n) { - child_idx = (cur_idx << 1) + 1; - if (child_idx >= n) - break; - - child_ptr = cfs_binheap_pointer(h, child_idx); - child = *child_ptr; - - child2_idx = child_idx + 1; - if (child2_idx < n) { - child2_ptr = cfs_binheap_pointer(h, child2_idx); - child2 = *child2_ptr; - - if (h->cbh_ops->hop_compare(child2, child)) { - child_idx = child2_idx; - child_ptr = child2_ptr; - child = child2; - } - } - - LASSERT(child->chn_index == child_idx); - - if (h->cbh_ops->hop_compare(e, child)) - break; - - child->chn_index = cur_idx; - *cur_ptr = child; - cur_ptr = child_ptr; - cur_idx = child_idx; - did_sth = 1; - } - - e->chn_index = cur_idx; - *cur_ptr = e; - - return did_sth; -} - -/** - * Sort-inserts a node into the binary heap. - * - * \param[in] h The heap - * \param[in] e The node - * - * \retval 0 Element inserted successfully - * \retval != 0 error - */ -int -cfs_binheap_insert(cfs_binheap_t *h, cfs_binheap_node_t *e) -{ - cfs_binheap_node_t **new_ptr; - unsigned int new_idx = h->cbh_nelements; - int rc; - - if (new_idx == h->cbh_hwm) { - rc = cfs_binheap_grow(h); - if (rc != 0) - return rc; - } - - if (h->cbh_ops->hop_enter) { - rc = h->cbh_ops->hop_enter(h, e); - if (rc != 0) - return rc; - } - - e->chn_index = new_idx; - new_ptr = cfs_binheap_pointer(h, new_idx); - h->cbh_nelements++; - *new_ptr = e; - - cfs_binheap_bubble(h, e); - - return 0; -} -EXPORT_SYMBOL(cfs_binheap_insert); - -/** - * Removes a node from the binary heap. - * - * \param[in] h The heap - * \param[in] e The node - */ -void -cfs_binheap_remove(cfs_binheap_t *h, cfs_binheap_node_t *e) -{ - unsigned int n = h->cbh_nelements; - unsigned int cur_idx = e->chn_index; - cfs_binheap_node_t **cur_ptr; - cfs_binheap_node_t *last; - - LASSERT(cur_idx != CBH_POISON); - LASSERT(cur_idx < n); - - cur_ptr = cfs_binheap_pointer(h, cur_idx); - LASSERT(*cur_ptr == e); - - n--; - last = *cfs_binheap_pointer(h, n); - h->cbh_nelements = n; - if (last == e) - return; - - last->chn_index = cur_idx; - *cur_ptr = last; - if (!cfs_binheap_bubble(h, *cur_ptr)) - cfs_binheap_sink(h, *cur_ptr); - - e->chn_index = CBH_POISON; - if (h->cbh_ops->hop_exit) - h->cbh_ops->hop_exit(h, e); -} -EXPORT_SYMBOL(cfs_binheap_remove); - -/** @} heap */ diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c index eaa423d13650..3298ddf6d3be 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-debug.c @@ -56,7 +56,6 @@ # define DEBUG_SUBSYSTEM S_LNET #include "../../../include/linux/libcfs/libcfs.h" -#include "../../../include/linux/libcfs/linux/portals_compat25.h" #include "../tracefile.h" @@ -82,11 +81,11 @@ void libcfs_run_debug_log_upcall(char *file) argv[0] = lnet_debug_log_upcall; LASSERTF(file != NULL, "called on a null filename\n"); - argv[1] = file; //only need to pass the path of the file + argv[1] = file; /* only need to pass the path of the file */ argv[2] = NULL; - rc = USERMODEHELPER(argv[0], argv, envp); + rc = call_usermodehelper(argv[0], argv, envp, 1); if (rc < 0 && rc != -ENOENT) { CERROR("Error %d invoking LNET debug log upcall %s %s; " "check /proc/sys/lnet/debug_log_upcall\n", @@ -113,7 +112,7 @@ void libcfs_run_upcall(char **argv) LASSERT(argc >= 2); - rc = USERMODEHELPER(argv[0], argv, envp); + rc = call_usermodehelper(argv[0], argv, envp, 1); if (rc < 0 && rc != -ENOENT) { CERROR("Error %d invoking LNET upcall %s %s%s%s%s%s%s%s%s; " "check /proc/sys/lnet/upcall\n", diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c index de3c199654a0..a5effcd9c679 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-module.c @@ -105,12 +105,12 @@ libcfs_psdev_open(struct inode *inode, struct file *file) int rc = 0; if (!inode) - return (-EINVAL); + return -EINVAL; pdu = (struct libcfs_device_userstate **)&file->private_data; if (libcfs_psdev_ops.p_open != NULL) rc = libcfs_psdev_ops.p_open(0, (void *)pdu); else - return (-EPERM); + return -EPERM; return rc; } @@ -122,7 +122,7 @@ libcfs_psdev_release(struct inode *inode, struct file *file) int rc = 0; if (!inode) - return (-EINVAL); + return -EINVAL; pdu = file->private_data; if (libcfs_psdev_ops.p_close != NULL) rc = libcfs_psdev_ops.p_close(0, (void *)pdu); @@ -145,14 +145,14 @@ static long libcfs_ioctl(struct file *file, _IOC_NR(cmd) > IOC_LIBCFS_MAX_NR) { CDEBUG(D_IOCTL, "invalid ioctl ( type %d, nr %d, size %d )\n", _IOC_TYPE(cmd), _IOC_NR(cmd), _IOC_SIZE(cmd)); - return (-EINVAL); + return -EINVAL; } /* Handle platform-dependent IOC requests */ switch (cmd) { case IOC_LIBCFS_PANIC: if (!capable(CFS_CAP_SYS_BOOT)) - return (-EPERM); + return -EPERM; panic("debugctl-invoked panic"); return 0; case IOC_LIBCFS_MEMHOG: diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c index 871ba44b29f3..19f405e64e68 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-prim.c @@ -130,11 +130,11 @@ cfs_block_allsigs(void) unsigned long flags; sigset_t old; - SIGNAL_MASK_LOCK(current, flags); + spin_lock_irqsave(¤t->sighand->siglock, flags); old = current->blocked; sigfillset(¤t->blocked); recalc_sigpending(); - SIGNAL_MASK_UNLOCK(current, flags); + spin_unlock_irqrestore(¤t->sighand->siglock, flags); return old; } @@ -144,11 +144,11 @@ sigset_t cfs_block_sigs(unsigned long sigs) unsigned long flags; sigset_t old; - SIGNAL_MASK_LOCK(current, flags); + spin_lock_irqsave(¤t->sighand->siglock, flags); old = current->blocked; sigaddsetmask(¤t->blocked, sigs); recalc_sigpending(); - SIGNAL_MASK_UNLOCK(current, flags); + spin_unlock_irqrestore(¤t->sighand->siglock, flags); return old; } @@ -158,11 +158,11 @@ sigset_t cfs_block_sigsinv(unsigned long sigs) unsigned long flags; sigset_t old; - SIGNAL_MASK_LOCK(current, flags); + spin_lock_irqsave(¤t->sighand->siglock, flags); old = current->blocked; sigaddsetmask(¤t->blocked, ~sigs); recalc_sigpending(); - SIGNAL_MASK_UNLOCK(current, flags); + spin_unlock_irqrestore(¤t->sighand->siglock, flags); return old; } @@ -172,10 +172,10 @@ cfs_restore_sigs (sigset_t old) { unsigned long flags; - SIGNAL_MASK_LOCK(current, flags); + spin_lock_irqsave(¤t->sighand->siglock, flags); current->blocked = old; recalc_sigpending(); - SIGNAL_MASK_UNLOCK(current, flags); + spin_unlock_irqrestore(¤t->sighand->siglock, flags); } int @@ -189,9 +189,9 @@ cfs_clear_sigpending(void) { unsigned long flags; - SIGNAL_MASK_LOCK(current, flags); + spin_lock_irqsave(¤t->sighand->siglock, flags); clear_tsk_thread_flag(current, TIF_SIGPENDING); - SIGNAL_MASK_UNLOCK(current, flags); + spin_unlock_irqrestore(¤t->sighand->siglock, flags); } int diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c index 13a9266acfa0..bbe2c68c18a6 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c @@ -98,9 +98,10 @@ enum { PSDEV_LNET_FAIL_VAL, /* userdata for fail loc */ }; -static int proc_call_handler(void *data, int write, loff_t *ppos, void *buffer, - size_t *lenp, int (*handler)(void *data, int write, - loff_t pos, void *buffer, int len)) +static int proc_call_handler(void *data, int write, loff_t *ppos, + void __user *buffer, size_t *lenp, + int (*handler)(void *data, int write, + loff_t pos, void __user *buffer, int len)) { int rc = handler(data, write, *ppos, buffer, *lenp); @@ -117,7 +118,7 @@ static int proc_call_handler(void *data, int write, loff_t *ppos, void *buffer, } static int __proc_dobitmasks(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { const int tmpstrlen = 512; char *tmpstr; @@ -168,7 +169,7 @@ static int min_watchdog_ratelimit = 0; /* disable ratelimiting */ static int max_watchdog_ratelimit = (24*60*60); /* limit to once per day */ static int __proc_dump_kernel(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { if (!write) return 0; @@ -184,7 +185,7 @@ static int proc_dump_kernel(struct ctl_table *table, int write, } static int __proc_daemon_file(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { if (!write) { int len = strlen(cfs_tracefile); @@ -207,7 +208,7 @@ static int proc_daemon_file(struct ctl_table *table, int write, } static int __proc_debug_mb(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { if (!write) { char tmpstr[32]; @@ -344,7 +345,7 @@ int proc_fail_loc(struct ctl_table *table, int write, void __user *buffer, } static int __proc_cpt_table(void *data, int write, - loff_t pos, void *buffer, int nob) + loff_t pos, void __user *buffer, int nob) { char *buf = NULL; int len = 4096; diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c index a93b6210705b..939b33dd6520 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-tcpip.c @@ -298,7 +298,7 @@ libcfs_sock_write (struct socket *sock, void *buffer, int nob, int timeout) if (rc == 0) { CERROR ("Unexpected zero rc\n"); - return (-ECONNABORTED); + return -ECONNABORTED; } if (ticks <= 0) @@ -308,7 +308,7 @@ libcfs_sock_write (struct socket *sock, void *buffer, int nob, int timeout) nob -= rc; } - return (0); + return 0; } EXPORT_SYMBOL(libcfs_sock_write); @@ -384,7 +384,7 @@ libcfs_sock_create (struct socket **sockp, int *fatal, *sockp = sock; if (rc != 0) { CERROR ("Can't create socket: %d\n", rc); - return (rc); + return rc; } option = 1; @@ -436,7 +436,7 @@ libcfs_sock_setbuf (struct socket *sock, int txbufsize, int rxbufsize) if (rc != 0) { CERROR ("Can't set send buffer %d: %d\n", option, rc); - return (rc); + return rc; } } @@ -447,7 +447,7 @@ libcfs_sock_setbuf (struct socket *sock, int txbufsize, int rxbufsize) if (rc != 0) { CERROR ("Can't set receive buffer %d: %d\n", option, rc); - return (rc); + return rc; } } diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c index 3396858098b0..2c4fc74505bc 100644 --- a/drivers/staging/lustre/lustre/libcfs/module.c +++ b/drivers/staging/lustre/lustre/libcfs/module.c @@ -119,7 +119,7 @@ kportal_memhog_alloc(struct libcfs_device_userstate *ldu, int npages, count1 < PAGE_CACHE_SIZE/sizeof(struct page *)) { if (cfs_signal_pending()) - return (-EINTR); + return -EINTR; *level1p = alloc_page(flags); if (*level1p == NULL) @@ -134,11 +134,11 @@ kportal_memhog_alloc(struct libcfs_device_userstate *ldu, int npages, count2 < PAGE_CACHE_SIZE/sizeof(struct page *)) { if (cfs_signal_pending()) - return (-EINTR); + return -EINTR; *level2p = alloc_page(flags); if (*level2p == NULL) - return (-ENOMEM); + return -ENOMEM; ldu->ldu_memhog_pages++; level2p++; @@ -217,7 +217,7 @@ int libcfs_deregister_ioctl(struct libcfs_ioctl_handler *hand) } EXPORT_SYMBOL(libcfs_deregister_ioctl); -static int libcfs_ioctl_int(struct cfs_psdev_file *pfile,unsigned long cmd, +static int libcfs_ioctl_int(struct cfs_psdev_file *pfile, unsigned long cmd, void *arg, struct libcfs_ioctl_data *data) { int err = -EINVAL; @@ -301,7 +301,8 @@ static int libcfs_ioctl(struct cfs_psdev_file *pfile, unsigned long cmd, void *a /* '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); + err = -EINVAL; + goto out; } data = (struct libcfs_ioctl_data *)buf; @@ -351,7 +352,7 @@ static int init_libcfs_module(void) rc = libcfs_debug_init(5 * 1024 * 1024); if (rc < 0) { printk(KERN_ERR "LustreError: libcfs_debug_init: %d\n", rc); - return (rc); + return rc; } rc = cfs_cpu_init(); diff --git a/drivers/staging/lustre/lustre/libcfs/tracefile.c b/drivers/staging/lustre/lustre/libcfs/tracefile.c index 0569bf8c75f3..7e3f6a45da00 100644 --- a/drivers/staging/lustre/lustre/libcfs/tracefile.c +++ b/drivers/staging/lustre/lustre/libcfs/tracefile.c @@ -755,7 +755,7 @@ void cfs_trace_flush_pages(void) } int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, - const char *usr_buffer, int usr_buffer_nob) + const char __user *usr_buffer, int usr_buffer_nob) { int nob; @@ -763,7 +763,7 @@ int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, return -EOVERFLOW; if (copy_from_user((void *)knl_buffer, - (void *)usr_buffer, usr_buffer_nob)) + usr_buffer, usr_buffer_nob)) return -EFAULT; nob = strnlen(knl_buffer, usr_buffer_nob); @@ -782,7 +782,7 @@ int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, } EXPORT_SYMBOL(cfs_trace_copyin_string); -int cfs_trace_copyout_string(char *usr_buffer, int usr_buffer_nob, +int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob, const char *knl_buffer, char *append) { /* NB if 'append' != NULL, it's a single character to append to the @@ -824,7 +824,7 @@ void cfs_trace_free_string_buffer(char *str, int nob) kfree(str); } -int cfs_trace_dump_debug_buffer_usrstr(void *usr_str, int usr_str_nob) +int cfs_trace_dump_debug_buffer_usrstr(void __user *usr_str, int usr_str_nob) { char *str; int rc; @@ -886,7 +886,7 @@ int cfs_trace_daemon_command(char *str) return rc; } -int cfs_trace_daemon_command_usrstr(void *usr_str, int usr_str_nob) +int cfs_trace_daemon_command_usrstr(void __user *usr_str, int usr_str_nob) { char *str; int rc; @@ -939,7 +939,7 @@ int cfs_trace_set_debug_mb(int mb) return 0; } -int cfs_trace_set_debug_mb_usrstr(void *usr_str, int usr_str_nob) +int cfs_trace_set_debug_mb_usrstr(void __user *usr_str, int usr_str_nob) { char str[32]; int rc; diff --git a/drivers/staging/lustre/lustre/libcfs/tracefile.h b/drivers/staging/lustre/lustre/libcfs/tracefile.h index 8df4af36c91d..0601476e1dc3 100644 --- a/drivers/staging/lustre/lustre/libcfs/tracefile.h +++ b/drivers/staging/lustre/lustre/libcfs/tracefile.h @@ -68,16 +68,16 @@ void cfs_tracefile_exit(void); int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob, - const char *usr_buffer, int usr_buffer_nob); -int cfs_trace_copyout_string(char *usr_buffer, int usr_buffer_nob, + const char __user *usr_buffer, int usr_buffer_nob); +int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob, const char *knl_str, char *append); int cfs_trace_allocate_string_buffer(char **str, int nob); void cfs_trace_free_string_buffer(char *str, int nob); -int cfs_trace_dump_debug_buffer_usrstr(void *usr_str, int usr_str_nob); +int cfs_trace_dump_debug_buffer_usrstr(void __user *usr_str, int usr_str_nob); int cfs_trace_daemon_command(char *str); -int cfs_trace_daemon_command_usrstr(void *usr_str, int usr_str_nob); +int cfs_trace_daemon_command_usrstr(void __user *usr_str, int usr_str_nob); int cfs_trace_set_debug_mb(int mb); -int cfs_trace_set_debug_mb_usrstr(void *usr_str, int usr_str_nob); +int cfs_trace_set_debug_mb_usrstr(void __user *usr_str, int usr_str_nob); int cfs_trace_get_debug_mb(void); extern void libcfs_debug_dumplog_internal(void *arg); diff --git a/drivers/staging/lustre/lustre/libcfs/upcall_cache.c b/drivers/staging/lustre/lustre/libcfs/upcall_cache.c deleted file mode 100644 index 88af82034e92..000000000000 --- a/drivers/staging/lustre/lustre/libcfs/upcall_cache.c +++ /dev/null @@ -1,449 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * libcfs/libcfs/upcall_cache.c - * - * Supplementary groups cache. - */ -#define DEBUG_SUBSYSTEM S_SEC - -#include "../../include/linux/libcfs/lucache.h" - -static struct upcall_cache_entry *alloc_entry(struct upcall_cache *cache, - __u64 key, void *args) -{ - struct upcall_cache_entry *entry; - - LIBCFS_ALLOC(entry, sizeof(*entry)); - if (!entry) - return NULL; - - UC_CACHE_SET_NEW(entry); - INIT_LIST_HEAD(&entry->ue_hash); - entry->ue_key = key; - atomic_set(&entry->ue_refcount, 0); - init_waitqueue_head(&entry->ue_waitq); - if (cache->uc_ops->init_entry) - cache->uc_ops->init_entry(entry, args); - return entry; -} - -/* protected by cache lock */ -static void free_entry(struct upcall_cache *cache, - struct upcall_cache_entry *entry) -{ - if (cache->uc_ops->free_entry) - cache->uc_ops->free_entry(cache, entry); - - list_del(&entry->ue_hash); - CDEBUG(D_OTHER, "destroy cache entry %p for key %llu\n", - entry, entry->ue_key); - LIBCFS_FREE(entry, sizeof(*entry)); -} - -static inline int upcall_compare(struct upcall_cache *cache, - struct upcall_cache_entry *entry, - __u64 key, void *args) -{ - if (entry->ue_key != key) - return -1; - - if (cache->uc_ops->upcall_compare) - return cache->uc_ops->upcall_compare(cache, entry, key, args); - - return 0; -} - -static inline int downcall_compare(struct upcall_cache *cache, - struct upcall_cache_entry *entry, - __u64 key, void *args) -{ - if (entry->ue_key != key) - return -1; - - if (cache->uc_ops->downcall_compare) - return cache->uc_ops->downcall_compare(cache, entry, key, args); - - return 0; -} - -static inline void get_entry(struct upcall_cache_entry *entry) -{ - atomic_inc(&entry->ue_refcount); -} - -static inline void put_entry(struct upcall_cache *cache, - struct upcall_cache_entry *entry) -{ - if (atomic_dec_and_test(&entry->ue_refcount) && - (UC_CACHE_IS_INVALID(entry) || UC_CACHE_IS_EXPIRED(entry))) { - free_entry(cache, entry); - } -} - -static int check_unlink_entry(struct upcall_cache *cache, - struct upcall_cache_entry *entry) -{ - if (UC_CACHE_IS_VALID(entry) && - time_before(cfs_time_current(), entry->ue_expire)) - return 0; - - if (UC_CACHE_IS_ACQUIRING(entry)) { - if (entry->ue_acquire_expire == 0 || - time_before(cfs_time_current(), entry->ue_acquire_expire)) - return 0; - - UC_CACHE_SET_EXPIRED(entry); - wake_up_all(&entry->ue_waitq); - } else if (!UC_CACHE_IS_INVALID(entry)) { - UC_CACHE_SET_EXPIRED(entry); - } - - list_del_init(&entry->ue_hash); - if (!atomic_read(&entry->ue_refcount)) - free_entry(cache, entry); - return 1; -} - -static inline int refresh_entry(struct upcall_cache *cache, - struct upcall_cache_entry *entry) -{ - LASSERT(cache->uc_ops->do_upcall); - return cache->uc_ops->do_upcall(cache, entry); -} - -struct upcall_cache_entry *upcall_cache_get_entry(struct upcall_cache *cache, - __u64 key, void *args) -{ - struct upcall_cache_entry *entry = NULL, *new = NULL, *next; - struct list_head *head; - wait_queue_t wait; - int rc, found; - - LASSERT(cache); - - head = &cache->uc_hashtable[UC_CACHE_HASH_INDEX(key)]; -find_again: - found = 0; - spin_lock(&cache->uc_lock); - list_for_each_entry_safe(entry, next, head, ue_hash) { - /* check invalid & expired items */ - if (check_unlink_entry(cache, entry)) - continue; - if (upcall_compare(cache, entry, key, args) == 0) { - found = 1; - break; - } - } - - if (!found) { - if (!new) { - spin_unlock(&cache->uc_lock); - new = alloc_entry(cache, key, args); - if (!new) { - CERROR("fail to alloc entry\n"); - return ERR_PTR(-ENOMEM); - } - goto find_again; - } else { - list_add(&new->ue_hash, head); - entry = new; - } - } else { - if (new) { - free_entry(cache, new); - new = NULL; - } - list_move(&entry->ue_hash, head); - } - get_entry(entry); - - /* acquire for new one */ - if (UC_CACHE_IS_NEW(entry)) { - UC_CACHE_SET_ACQUIRING(entry); - UC_CACHE_CLEAR_NEW(entry); - spin_unlock(&cache->uc_lock); - rc = refresh_entry(cache, entry); - spin_lock(&cache->uc_lock); - entry->ue_acquire_expire = - cfs_time_shift(cache->uc_acquire_expire); - if (rc < 0) { - UC_CACHE_CLEAR_ACQUIRING(entry); - UC_CACHE_SET_INVALID(entry); - wake_up_all(&entry->ue_waitq); - if (unlikely(rc == -EREMCHG)) { - put_entry(cache, entry); - GOTO(out, entry = ERR_PTR(rc)); - } - } - } - /* someone (and only one) is doing upcall upon this item, - * wait it to complete */ - if (UC_CACHE_IS_ACQUIRING(entry)) { - long expiry = (entry == new) ? - cfs_time_seconds(cache->uc_acquire_expire) : - MAX_SCHEDULE_TIMEOUT; - long left; - - init_waitqueue_entry(&wait, current); - add_wait_queue(&entry->ue_waitq, &wait); - set_current_state(TASK_INTERRUPTIBLE); - spin_unlock(&cache->uc_lock); - - left = schedule_timeout(expiry); - - spin_lock(&cache->uc_lock); - remove_wait_queue(&entry->ue_waitq, &wait); - if (UC_CACHE_IS_ACQUIRING(entry)) { - /* we're interrupted or upcall failed in the middle */ - rc = left > 0 ? -EINTR : -ETIMEDOUT; - CERROR("acquire for key %llu: error %d\n", - entry->ue_key, rc); - put_entry(cache, entry); - GOTO(out, entry = ERR_PTR(rc)); - } - } - - /* invalid means error, don't need to try again */ - if (UC_CACHE_IS_INVALID(entry)) { - put_entry(cache, entry); - GOTO(out, entry = ERR_PTR(-EIDRM)); - } - - /* check expired - * We can't refresh the existing one because some - * memory might be shared by multiple processes. - */ - if (check_unlink_entry(cache, entry)) { - /* if expired, try again. but if this entry is - * created by me but too quickly turn to expired - * without any error, should at least give a - * chance to use it once. - */ - if (entry != new) { - put_entry(cache, entry); - spin_unlock(&cache->uc_lock); - new = NULL; - goto find_again; - } - } - - /* Now we know it's good */ -out: - spin_unlock(&cache->uc_lock); - return entry; -} -EXPORT_SYMBOL(upcall_cache_get_entry); - -void upcall_cache_put_entry(struct upcall_cache *cache, - struct upcall_cache_entry *entry) -{ - if (!entry) { - return; - } - - LASSERT(atomic_read(&entry->ue_refcount) > 0); - spin_lock(&cache->uc_lock); - put_entry(cache, entry); - spin_unlock(&cache->uc_lock); -} -EXPORT_SYMBOL(upcall_cache_put_entry); - -int upcall_cache_downcall(struct upcall_cache *cache, __u32 err, __u64 key, - void *args) -{ - struct upcall_cache_entry *entry = NULL; - struct list_head *head; - int found = 0, rc = 0; - - LASSERT(cache); - - head = &cache->uc_hashtable[UC_CACHE_HASH_INDEX(key)]; - - spin_lock(&cache->uc_lock); - list_for_each_entry(entry, head, ue_hash) { - if (downcall_compare(cache, entry, key, args) == 0) { - found = 1; - get_entry(entry); - break; - } - } - - if (!found) { - CDEBUG(D_OTHER, "%s: upcall for key %llu not expected\n", - cache->uc_name, key); - /* haven't found, it's possible */ - spin_unlock(&cache->uc_lock); - return -EINVAL; - } - - if (err) { - CDEBUG(D_OTHER, "%s: upcall for key %llu returned %d\n", - cache->uc_name, entry->ue_key, err); - GOTO(out, rc = -EINVAL); - } - - if (!UC_CACHE_IS_ACQUIRING(entry)) { - CDEBUG(D_RPCTRACE,"%s: found uptodate entry %p (key %llu)\n", - cache->uc_name, entry, entry->ue_key); - GOTO(out, rc = 0); - } - - if (UC_CACHE_IS_INVALID(entry) || UC_CACHE_IS_EXPIRED(entry)) { - CERROR("%s: found a stale entry %p (key %llu) in ioctl\n", - cache->uc_name, entry, entry->ue_key); - GOTO(out, rc = -EINVAL); - } - - spin_unlock(&cache->uc_lock); - if (cache->uc_ops->parse_downcall) - rc = cache->uc_ops->parse_downcall(cache, entry, args); - spin_lock(&cache->uc_lock); - if (rc) - GOTO(out, rc); - - entry->ue_expire = cfs_time_shift(cache->uc_entry_expire); - UC_CACHE_SET_VALID(entry); - CDEBUG(D_OTHER, "%s: created upcall cache entry %p for key %llu\n", - cache->uc_name, entry, entry->ue_key); -out: - if (rc) { - UC_CACHE_SET_INVALID(entry); - list_del_init(&entry->ue_hash); - } - UC_CACHE_CLEAR_ACQUIRING(entry); - spin_unlock(&cache->uc_lock); - wake_up_all(&entry->ue_waitq); - put_entry(cache, entry); - - return rc; -} -EXPORT_SYMBOL(upcall_cache_downcall); - -static void cache_flush(struct upcall_cache *cache, int force) -{ - struct upcall_cache_entry *entry, *next; - int i; - - spin_lock(&cache->uc_lock); - for (i = 0; i < UC_CACHE_HASH_SIZE; i++) { - list_for_each_entry_safe(entry, next, - &cache->uc_hashtable[i], ue_hash) { - if (!force && atomic_read(&entry->ue_refcount)) { - UC_CACHE_SET_EXPIRED(entry); - continue; - } - LASSERT(!atomic_read(&entry->ue_refcount)); - free_entry(cache, entry); - } - } - spin_unlock(&cache->uc_lock); -} - -void upcall_cache_flush_idle(struct upcall_cache *cache) -{ - cache_flush(cache, 0); -} -EXPORT_SYMBOL(upcall_cache_flush_idle); - -void upcall_cache_flush_all(struct upcall_cache *cache) -{ - cache_flush(cache, 1); -} -EXPORT_SYMBOL(upcall_cache_flush_all); - -void upcall_cache_flush_one(struct upcall_cache *cache, __u64 key, void *args) -{ - struct list_head *head; - struct upcall_cache_entry *entry; - int found = 0; - - head = &cache->uc_hashtable[UC_CACHE_HASH_INDEX(key)]; - - spin_lock(&cache->uc_lock); - list_for_each_entry(entry, head, ue_hash) { - if (upcall_compare(cache, entry, key, args) == 0) { - found = 1; - break; - } - } - - if (found) { - CWARN("%s: flush entry %p: key %llu, ref %d, fl %x, cur %lu, ex %ld/%ld\n", - cache->uc_name, entry, entry->ue_key, - atomic_read(&entry->ue_refcount), entry->ue_flags, - get_seconds(), entry->ue_acquire_expire, - entry->ue_expire); - UC_CACHE_SET_EXPIRED(entry); - if (!atomic_read(&entry->ue_refcount)) - free_entry(cache, entry); - } - spin_unlock(&cache->uc_lock); -} -EXPORT_SYMBOL(upcall_cache_flush_one); - -struct upcall_cache *upcall_cache_init(const char *name, const char *upcall, - struct upcall_cache_ops *ops) -{ - struct upcall_cache *cache; - int i; - - LIBCFS_ALLOC(cache, sizeof(*cache)); - if (!cache) - return ERR_PTR(-ENOMEM); - - spin_lock_init(&cache->uc_lock); - rwlock_init(&cache->uc_upcall_rwlock); - for (i = 0; i < UC_CACHE_HASH_SIZE; i++) - INIT_LIST_HEAD(&cache->uc_hashtable[i]); - strncpy(cache->uc_name, name, sizeof(cache->uc_name) - 1); - /* upcall pathname proc tunable */ - strncpy(cache->uc_upcall, upcall, sizeof(cache->uc_upcall) - 1); - cache->uc_entry_expire = 20 * 60; - cache->uc_acquire_expire = 30; - cache->uc_ops = ops; - - return cache; -} -EXPORT_SYMBOL(upcall_cache_init); - -void upcall_cache_cleanup(struct upcall_cache *cache) -{ - if (!cache) - return; - upcall_cache_flush_all(cache); - LIBCFS_FREE(cache, sizeof(*cache)); -} -EXPORT_SYMBOL(upcall_cache_cleanup); diff --git a/drivers/staging/lustre/lustre/libcfs/workitem.c b/drivers/staging/lustre/lustre/libcfs/workitem.c index 03ab9e046784..c4afaeaf8310 100644 --- a/drivers/staging/lustre/lustre/libcfs/workitem.c +++ b/drivers/staging/lustre/lustre/libcfs/workitem.c @@ -288,8 +288,8 @@ cfs_wi_scheduler (void *arg) } cfs_wi_sched_unlock(sched); - cfs_wait_event_interruptible_exclusive(sched->ws_waitq, - !cfs_wi_sched_cansleep(sched), rc); + rc = wait_event_interruptible_exclusive(sched->ws_waitq, + !cfs_wi_sched_cansleep(sched)); cfs_wi_sched_lock(sched); } diff --git a/drivers/staging/lustre/lustre/llite/dcache.c b/drivers/staging/lustre/lustre/llite/dcache.c index 49ae207ad425..439e4875b05c 100644 --- a/drivers/staging/lustre/lustre/llite/dcache.c +++ b/drivers/staging/lustre/lustre/llite/dcache.c @@ -187,8 +187,8 @@ int ll_d_init(struct dentry *de) if (de->d_fsdata == NULL) { struct ll_dentry_data *lld; - OBD_ALLOC_PTR(lld); - if (likely(lld != NULL)) { + lld = kzalloc(sizeof(*lld), GFP_NOFS); + if (likely(lld)) { spin_lock(&de->d_lock); if (likely(de->d_fsdata == NULL)) { de->d_fsdata = lld; diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c index efa2faf080d7..b0bb7095dde5 100644 --- a/drivers/staging/lustre/lustre/llite/dir.c +++ b/drivers/staging/lustre/lustre/llite/dir.c @@ -42,7 +42,7 @@ #include <linux/pagemap.h> #include <linux/mm.h> #include <asm/uaccess.h> -#include <linux/buffer_head.h> // for wait_on_buffer +#include <linux/buffer_head.h> /* for wait_on_buffer */ #include <linux/pagevec.h> #include <linux/prefetch.h> @@ -163,8 +163,8 @@ static int ll_dir_filler(void *_hash, struct page *page0) LASSERT(max_pages > 0 && max_pages <= MD_MAX_BRW_PAGES); - OBD_ALLOC(page_pool, sizeof(page) * max_pages); - if (page_pool != NULL) { + page_pool = kzalloc(sizeof(page) * max_pages, GFP_NOFS); + if (page_pool) { page_pool[0] = page0; } else { page_pool = &page0; @@ -398,7 +398,7 @@ struct page *ll_get_dir_page(struct inode *dir, __u64 hash, if (IS_ERR(page)) { CERROR("dir page locate: "DFID" at %llu: rc %ld\n", PFID(ll_inode2fid(dir)), lhash, PTR_ERR(page)); - GOTO(out_unlock, page); + goto out_unlock; } else if (page != NULL) { /* * XXX nikita: not entirely correct handling of a corner case: @@ -414,7 +414,7 @@ struct page *ll_get_dir_page(struct inode *dir, __u64 hash, * it as an "overflow" page. 1. invalidate all pages at * once. 2. use HASH|1 as an index for P1. */ - GOTO(hash_collision, page); + goto hash_collision; } page = read_cache_page(mapping, hash_x_index(hash, hash64), @@ -422,7 +422,7 @@ struct page *ll_get_dir_page(struct inode *dir, __u64 hash, if (IS_ERR(page)) { CERROR("read cache page: "DFID" at %llu: rc %ld\n", PFID(ll_inode2fid(dir)), hash, PTR_ERR(page)); - GOTO(out_unlock, page); + goto out_unlock; } wait_on_page_locked(page); @@ -604,11 +604,13 @@ static int ll_readdir(struct file *filp, struct dir_context *ctx) " 32bit_api %d\n", inode->i_ino, inode->i_generation, inode, (unsigned long)lfd->lfd_pos, i_size_read(inode), api32); - if (lfd->lfd_pos == MDS_DIR_END_OFF) + if (lfd->lfd_pos == MDS_DIR_END_OFF) { /* * end-of-file. */ - GOTO(out, rc = 0); + rc = 0; + goto out; + } ctx->pos = lfd->lfd_pos; rc = ll_dir_read(inode, ctx); @@ -636,7 +638,7 @@ static int ll_send_mgc_param(struct obd_export *mgc, char *string) struct mgs_send_param *msp; int rc = 0; - OBD_ALLOC_PTR(msp); + msp = kzalloc(sizeof(*msp), GFP_NOFS); if (!msp) return -ENOMEM; @@ -663,8 +665,10 @@ int ll_dir_setdirstripe(struct inode *dir, struct lmv_user_md *lump, op_data = ll_prep_md_op_data(NULL, dir, NULL, filename, strlen(filename), mode, LUSTRE_OPC_MKDIR, lump); - if (IS_ERR(op_data)) - GOTO(err_exit, err = PTR_ERR(op_data)); + if (IS_ERR(op_data)) { + err = PTR_ERR(op_data); + goto err_exit; + } op_data->op_cli_flags |= CLI_SET_MEA; err = md_create(sbi->ll_md_exp, op_data, lump, sizeof(*lump), mode, @@ -673,7 +677,7 @@ int ll_dir_setdirstripe(struct inode *dir, struct lmv_user_md *lump, cfs_curproc_cap_pack(), 0, &request); ll_finish_md_op_data(op_data); if (err) - GOTO(err_exit, err); + goto err_exit; err_exit: ptlrpc_req_finished(request); return err; @@ -747,9 +751,11 @@ int ll_dir_setstripe(struct inode *inode, struct lov_user_md *lump, char *param = NULL; char *buf; - OBD_ALLOC(param, MGS_PARAM_MAXLEN); - if (param == NULL) - GOTO(end, rc = -ENOMEM); + param = kzalloc(MGS_PARAM_MAXLEN, GFP_NOFS); + if (!param) { + rc = -ENOMEM; + goto end; + } buf = param; /* Get fsname and assume devname to be -MDT0000. */ @@ -762,14 +768,14 @@ int ll_dir_setstripe(struct inode *inode, struct lov_user_md *lump, lump ? le32_to_cpu(lump->lmm_stripe_size) : 0); rc = ll_send_mgc_param(mgc->u.cli.cl_mgc_mgsexp, param); if (rc) - GOTO(end, rc); + goto end; /* Set root stripecount */ sprintf(buf, ".stripecount=%hd", lump ? le16_to_cpu(lump->lmm_stripe_count) : 0); rc = ll_send_mgc_param(mgc->u.cli.cl_mgc_mgsexp, param); if (rc) - GOTO(end, rc); + goto end; /* Set root stripeoffset */ sprintf(buf, ".stripeoffset=%hd", @@ -811,7 +817,7 @@ int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp, CDEBUG(D_INFO, "md_getattr failed on inode " "%lu/%u: rc %d\n", inode->i_ino, inode->i_generation, rc); - GOTO(out, rc); + goto out; } body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY); @@ -821,7 +827,8 @@ int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp, if (!(body->valid & (OBD_MD_FLEASIZE | OBD_MD_FLDIREA)) || lmmsize == 0) { - GOTO(out, rc = -ENODATA); + rc = -ENODATA; + goto out; } lmm = req_capsule_server_sized_get(&req->rq_pill, @@ -917,7 +924,8 @@ static int ll_ioc_copy_start(struct super_block *sb, struct hsm_copy *copy) hpk.hpk_flags |= HP_FLAG_RETRY; /* hpk_errval is >= 0 */ hpk.hpk_errval = -PTR_ERR(inode); - GOTO(progress, rc = PTR_ERR(inode)); + rc = PTR_ERR(inode); + goto progress; } /* Read current file data version */ @@ -931,7 +939,7 @@ static int ll_ioc_copy_start(struct super_block *sb, struct hsm_copy *copy) hpk.hpk_flags |= HP_FLAG_RETRY; /* hpk_errval must be >= 0 */ hpk.hpk_errval = -rc; - GOTO(progress, rc); + goto progress; } /* Store it the hsm_copy for later copytool use. @@ -997,7 +1005,8 @@ static int ll_ioc_copy_end(struct super_block *sb, struct hsm_copy *copy) hpk.hpk_flags |= HP_FLAG_RETRY; /* hpk_errval must be >= 0 */ hpk.hpk_errval = -PTR_ERR(inode); - GOTO(progress, rc = PTR_ERR(inode)); + rc = PTR_ERR(inode); + goto progress; } rc = ll_data_version(inode, &data_version, @@ -1008,7 +1017,7 @@ static int ll_ioc_copy_end(struct super_block *sb, struct hsm_copy *copy) "Request could not be confirmed.\n"); if (hpk.hpk_errval == 0) hpk.hpk_errval = -rc; - GOTO(progress, rc); + goto progress; } /* Store it the hsm_copy for later copytool use. @@ -1052,8 +1061,8 @@ static int copy_and_ioctl(int cmd, struct obd_export *exp, void *copy; int rc; - OBD_ALLOC(copy, size); - if (copy == NULL) + copy = kzalloc(size, GFP_NOFS); + if (!copy) return -ENOMEM; if (copy_from_user(copy, data, size)) { @@ -1143,8 +1152,8 @@ static int quotactl_ioctl(struct ll_sb_info *sbi, struct if_quotactl *qctl) } else { struct obd_quotactl *oqctl; - OBD_ALLOC_PTR(oqctl); - if (oqctl == NULL) + oqctl = kzalloc(sizeof(*oqctl), GFP_NOFS); + if (!oqctl) return -ENOMEM; QCTL_COPY(oqctl, qctl); @@ -1164,9 +1173,11 @@ static int quotactl_ioctl(struct ll_sb_info *sbi, struct if_quotactl *qctl) !oqctl->qc_dqblk.dqb_curspace) { struct obd_quotactl *oqctl_tmp; - OBD_ALLOC_PTR(oqctl_tmp); - if (oqctl_tmp == NULL) - GOTO(out, rc = -ENOMEM); + oqctl_tmp = kzalloc(sizeof(*oqctl_tmp), GFP_NOFS); + if (!oqctl_tmp) { + rc = -ENOMEM; + goto out; + } oqctl_tmp->qc_cmd = Q_GETOQUOTA; oqctl_tmp->qc_id = oqctl->qc_id; @@ -1244,7 +1255,7 @@ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg) return -ENOTTY; ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_IOCTL, 1); - switch(cmd) { + switch (cmd) { case FSFILT_IOC_GETFLAGS: case FSFILT_IOC_SETFLAGS: return ll_iocontrol(inode, file, cmd, arg); @@ -1286,20 +1297,23 @@ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg) if (namelen < 1) { CDEBUG(D_INFO, "IOC_MDC_LOOKUP missing filename\n"); - GOTO(out_free, rc = -EINVAL); + rc = -EINVAL; + goto out_free; } op_data = ll_prep_md_op_data(NULL, inode, NULL, filename, namelen, 0, LUSTRE_OPC_ANY, NULL); - if (IS_ERR(op_data)) - GOTO(out_free, rc = PTR_ERR(op_data)); + if (IS_ERR(op_data)) { + rc = PTR_ERR(op_data); + goto out_free; + } op_data->op_valid = OBD_MD_FLID; rc = md_getattr_name(sbi->ll_md_exp, op_data, &request); ll_finish_md_op_data(op_data); if (rc < 0) { CDEBUG(D_INFO, "md_getattr_name: %d\n", rc); - GOTO(out_free, rc); + goto out_free; } ptlrpc_req_finished(request); out_free: @@ -1321,15 +1335,18 @@ out_free: data = (void *)buf; if (data->ioc_inlbuf1 == NULL || data->ioc_inlbuf2 == NULL || - data->ioc_inllen1 == 0 || data->ioc_inllen2 == 0) - GOTO(lmv_out_free, rc = -EINVAL); + data->ioc_inllen1 == 0 || data->ioc_inllen2 == 0) { + rc = -EINVAL; + goto lmv_out_free; + } filename = data->ioc_inlbuf1; namelen = data->ioc_inllen1; if (namelen < 1) { CDEBUG(D_INFO, "IOC_MDC_LOOKUP missing filename\n"); - GOTO(lmv_out_free, rc = -EINVAL); + rc = -EINVAL; + goto lmv_out_free; } lum = (struct lmv_user_md *)data->ioc_inlbuf2; lumlen = data->ioc_inllen2; @@ -1338,7 +1355,8 @@ out_free: lumlen != sizeof(*lum)) { CERROR("%s: wrong lum magic %x or size %d: rc = %d\n", filename, lum->lum_magic, lumlen, -EFAULT); - GOTO(lmv_out_free, rc = -EINVAL); + rc = -EINVAL; + goto lmv_out_free; } /** @@ -1394,23 +1412,29 @@ lmv_out_free: return -EINVAL; lum_size = lmv_user_md_size(1, LMV_MAGIC_V1); - OBD_ALLOC(tmp, lum_size); - if (tmp == NULL) - GOTO(free_lmv, rc = -ENOMEM); + tmp = kzalloc(lum_size, GFP_NOFS); + if (!tmp) { + rc = -ENOMEM; + goto free_lmv; + } *tmp = lum; tmp->lum_type = LMV_STRIPE_TYPE; tmp->lum_stripe_count = 1; mdtindex = ll_get_mdt_idx(inode); - if (mdtindex < 0) - GOTO(free_lmv, rc = -ENOMEM); + if (mdtindex < 0) { + rc = -ENOMEM; + goto free_lmv; + } tmp->lum_stripe_offset = mdtindex; tmp->lum_objects[0].lum_mds = mdtindex; memcpy(&tmp->lum_objects[0].lum_fid, ll_inode2fid(inode), sizeof(struct lu_fid)); - if (copy_to_user((void *)arg, tmp, lum_size)) - GOTO(free_lmv, rc = -EFAULT); + if (copy_to_user((void *)arg, tmp, lum_size)) { + rc = -EFAULT; + goto free_lmv; + } free_lmv: if (tmp) OBD_FREE(tmp, lum_size); @@ -1434,8 +1458,10 @@ free_lmv: return PTR_ERR(filename); namelen = strlen(filename); - if (namelen < 1) - GOTO(out_rmdir, rc = -EINVAL); + if (namelen < 1) { + rc = -EINVAL; + goto out_rmdir; + } rc = ll_rmdir_entry(inode, filename, namelen); out_rmdir: @@ -1475,15 +1501,17 @@ out_rmdir: &RMF_MDT_BODY); LASSERT(body != NULL); } else { - GOTO(out_req, rc); + goto out_req; } if (rc < 0) { if (rc == -ENODATA && (cmd == IOC_MDC_GETFILEINFO || - cmd == LL_IOC_MDC_GETINFO)) - GOTO(skip_lmm, rc = 0); + cmd == LL_IOC_MDC_GETINFO)) { + rc = 0; + goto skip_lmm; + } else - GOTO(out_req, rc); + goto out_req; } if (cmd == IOC_MDC_GETFILESTRIPE || @@ -1495,8 +1523,10 @@ out_rmdir: lump = &lmdp->lmd_lmm; } if (copy_to_user(lump, lmm, lmmsize)) { - if (copy_to_user(lump, lmm, sizeof(*lump))) - GOTO(out_req, rc = -EFAULT); + if (copy_to_user(lump, lmm, sizeof(*lump))) { + rc = -EFAULT; + goto out_req; + } rc = -EOVERFLOW; } skip_lmm: @@ -1519,8 +1549,10 @@ skip_lmm: st.st_ino = inode->i_ino; lmdp = (struct lov_user_mds_data *)arg; - if (copy_to_user(&lmdp->lmd_st, &st, sizeof(st))) - GOTO(out_req, rc = -EFAULT); + if (copy_to_user(&lmdp->lmd_st, &st, sizeof(st))) { + rc = -EFAULT; + goto out_req; + } } out_req: @@ -1547,8 +1579,10 @@ out_req: OBD_ALLOC_LARGE(lmm, lmmsize); if (lmm == NULL) return -ENOMEM; - if (copy_from_user(lmm, lum, lmmsize)) - GOTO(free_lmm, rc = -EFAULT); + if (copy_from_user(lmm, lum, lmmsize)) { + rc = -EFAULT; + goto free_lmm; + } switch (lmm->lmm_magic) { case LOV_USER_MAGIC_V1: @@ -1570,22 +1604,27 @@ out_req: lustre_swab_lov_user_md_v3((struct lov_user_md_v3 *)lmm); break; default: - GOTO(free_lmm, rc = -EINVAL); + rc = -EINVAL; + goto free_lmm; } rc = obd_unpackmd(sbi->ll_dt_exp, &lsm, lmm, lmmsize); - if (rc < 0) - GOTO(free_lmm, rc = -ENOMEM); + if (rc < 0) { + rc = -ENOMEM; + goto free_lmm; + } /* Perform glimpse_size operation. */ memset(&st, 0, sizeof(st)); rc = ll_glimpse_ioctl(sbi, lsm, &st); if (rc) - GOTO(free_lsm, rc); + goto free_lsm; - if (copy_to_user(&lumd->lmd_st, &st, sizeof(st))) - GOTO(free_lsm, rc = -EFAULT); + if (copy_to_user(&lumd->lmd_st, &st, sizeof(st))) { + rc = -EFAULT; + goto free_lsm; + } free_lsm: obd_free_memmd(sbi->ll_dt_exp, &lsm); @@ -1604,7 +1643,7 @@ free_lmm: sbi->ll_flags & LL_SBI_RMT_CLIENT) return -EPERM; - OBD_ALLOC_PTR(oqctl); + oqctl = kzalloc(sizeof(*oqctl), GFP_NOFS); if (!oqctl) return -ENOMEM; oqctl->qc_type = arg; @@ -1628,7 +1667,7 @@ free_lmm: sbi->ll_flags & LL_SBI_RMT_CLIENT) return -EPERM; - OBD_ALLOC_PTR(check); + check = kzalloc(sizeof(*check), GFP_NOFS); if (!check) return -ENOMEM; @@ -1639,7 +1678,7 @@ free_lmm: if (copy_to_user((void *)arg, check, sizeof(*check))) CDEBUG(D_QUOTA, "copy_to_user failed\n"); - GOTO(out_poll, rc); + goto out_poll; } rc = obd_iocontrol(cmd, sbi->ll_dt_exp, 0, (void *)check, @@ -1649,7 +1688,7 @@ free_lmm: if (copy_to_user((void *)arg, check, sizeof(*check))) CDEBUG(D_QUOTA, "copy_to_user failed\n"); - GOTO(out_poll, rc); + goto out_poll; } out_poll: OBD_FREE_PTR(check); @@ -1662,16 +1701,20 @@ out_poll: struct if_quotactl_18 *qctl_18; struct if_quotactl *qctl_20; - OBD_ALLOC_PTR(qctl_18); + qctl_18 = kzalloc(sizeof(*qctl_18), GFP_NOFS); if (!qctl_18) return -ENOMEM; - OBD_ALLOC_PTR(qctl_20); - if (!qctl_20) - GOTO(out_quotactl_18, rc = -ENOMEM); + qctl_20 = kzalloc(sizeof(*qctl_20), GFP_NOFS); + if (!qctl_20) { + rc = -ENOMEM; + goto out_quotactl_18; + } - if (copy_from_user(qctl_18, (void *)arg, sizeof(*qctl_18))) - GOTO(out_quotactl_20, rc = -ENOMEM); + if (copy_from_user(qctl_18, (void *)arg, sizeof(*qctl_18))) { + rc = -ENOMEM; + goto out_quotactl_20; + } QCTL_COPY(qctl_20, qctl_18); qctl_20->qc_idx = 0; @@ -1712,16 +1755,18 @@ out_quotactl_18: case LL_IOC_QUOTACTL: { struct if_quotactl *qctl; - OBD_ALLOC_PTR(qctl); + qctl = kzalloc(sizeof(*qctl), GFP_NOFS); if (!qctl) return -ENOMEM; - if (copy_from_user(qctl, (void *)arg, sizeof(*qctl))) - GOTO(out_quotactl, rc = -EFAULT); + if (copy_from_user(qctl, (void *)arg, sizeof(*qctl))) { + rc = -EFAULT; + goto out_quotactl; + } rc = quotactl_ioctl(sbi, qctl); - if (rc == 0 && copy_to_user((void *)arg,qctl,sizeof(*qctl))) + if (rc == 0 && copy_to_user((void *)arg, qctl, sizeof(*qctl))) rc = -EFAULT; out_quotactl: @@ -1787,10 +1832,10 @@ out_quotactl: return ll_fid2path(inode, (void *)arg); case LL_IOC_HSM_REQUEST: { struct hsm_user_request *hur; - int totalsize; + ssize_t totalsize; - OBD_ALLOC_PTR(hur); - if (hur == NULL) + hur = kzalloc(sizeof(*hur), GFP_NOFS); + if (!hur) return -ENOMEM; /* We don't know the true size yet; copy the fixed-size part */ @@ -1802,6 +1847,8 @@ out_quotactl: /* Compute the whole struct size */ totalsize = hur_len(hur); OBD_FREE_PTR(hur); + if (totalsize < 0) + return -E2BIG; /* Final size will be more than double totalsize */ if (totalsize >= MDS_MAXREQSIZE / 3) @@ -1873,8 +1920,8 @@ out_quotactl: struct hsm_copy *copy; int rc; - OBD_ALLOC_PTR(copy); - if (copy == NULL) + copy = kzalloc(sizeof(*copy), GFP_NOFS); + if (!copy) return -ENOMEM; if (copy_from_user(copy, (char *)arg, sizeof(*copy))) { OBD_FREE_PTR(copy); @@ -1892,8 +1939,8 @@ out_quotactl: struct hsm_copy *copy; int rc; - OBD_ALLOC_PTR(copy); - if (copy == NULL) + copy = kzalloc(sizeof(*copy), GFP_NOFS); + if (!copy) return -ENOMEM; if (copy_from_user(copy, (char *)arg, sizeof(*copy))) { OBD_FREE_PTR(copy); @@ -1929,14 +1976,14 @@ static loff_t ll_dir_seek(struct file *file, loff_t offset, int origin) break; case SEEK_END: if (offset > 0) - GOTO(out, ret); + goto out; if (api32) offset += LL_DIR_END_OFF_32BIT; else offset += LL_DIR_END_OFF; break; default: - GOTO(out, ret); + goto out; } if (offset >= 0 && @@ -1955,7 +2002,7 @@ static loff_t ll_dir_seek(struct file *file, loff_t offset, int origin) } ret = offset; } - GOTO(out, ret); + goto out; out: mutex_unlock(&inode->i_mutex); diff --git a/drivers/staging/lustre/lustre/llite/file.c b/drivers/staging/lustre/lustre/llite/file.c index fd1b75a3a569..c99b74117152 100644 --- a/drivers/staging/lustre/lustre/llite/file.c +++ b/drivers/staging/lustre/lustre/llite/file.c @@ -142,12 +142,16 @@ static int ll_close_inode_openhandle(struct obd_export *md_exp, */ CERROR("Invalid MDC connection handle %#llx\n", ll_i2mdexp(inode)->exp_handle.h_cookie); - GOTO(out, rc = 0); + rc = 0; + goto out; } - OBD_ALLOC_PTR(op_data); - if (op_data == NULL) - GOTO(out, rc = -ENOMEM); // XXX We leak openhandle and request here. + op_data = kzalloc(sizeof(*op_data), GFP_NOFS); + if (!op_data) { + /* XXX We leak openhandle and request here. */ + rc = -ENOMEM; + goto out; + } ll_prepare_close(inode, op_data, och); if (data_version != NULL) { @@ -283,7 +287,7 @@ static int ll_md_close(struct obd_export *md_exp, struct inode *inode, if (fd->fd_och != NULL) { rc = ll_close_inode_openhandle(md_exp, inode, fd->fd_och, NULL); fd->fd_och = NULL; - GOTO(out, rc); + goto out; } /* Let's see if we have good enough OPEN lock on the file and if @@ -436,18 +440,20 @@ static int ll_intent_file_open(struct file *file, void *lmm, */ if (!it_disposition(itp, DISP_OPEN_OPEN) || it_open_error(DISP_OPEN_OPEN, itp)) - GOTO(out, rc); + goto out; ll_release_openhandle(file->f_dentry, itp); - GOTO(out, rc); + goto out; } - if (it_disposition(itp, DISP_LOOKUP_NEG)) - GOTO(out, rc = -ENOENT); + if (it_disposition(itp, DISP_LOOKUP_NEG)) { + rc = -ENOENT; + goto out; + } if (rc != 0 || it_open_error(DISP_OPEN_OPEN, itp)) { rc = rc ? rc : it_open_error(DISP_OPEN_OPEN, itp); CDEBUG(D_VFSTRACE, "lock enqueue: err: %d\n", rc); - GOTO(out, rc); + goto out; } rc = ll_prep_inode(&file->f_dentry->d_inode, req, NULL, itp); @@ -551,8 +557,10 @@ int ll_file_open(struct inode *inode, struct file *file) file->private_data = NULL; /* prevent ll_local_open assertion */ fd = ll_file_data_get(); - if (fd == NULL) - GOTO(out_openerr, rc = -ENOMEM); + if (fd == NULL) { + rc = -ENOMEM; + goto out_openerr; + } fd->fd_file = file; if (S_ISDIR(inode->i_mode)) { @@ -621,7 +629,7 @@ restart: rc = it_open_error(DISP_OPEN_OPEN, it); if (rc) { mutex_unlock(&lli->lli_och_mutex); - GOTO(out_openerr, rc); + goto out_openerr; } ll_release_openhandle(file->f_dentry, it); @@ -632,7 +640,7 @@ restart: if (rc) { (*och_usecount)--; mutex_unlock(&lli->lli_och_mutex); - GOTO(out_openerr, rc); + goto out_openerr; } } else { LASSERT(*och_usecount == 0); @@ -647,13 +655,15 @@ restart: rc = ll_intent_file_open(file, NULL, 0, it); it->it_create_mode &= ~M_CHECK_STALE; if (rc) - GOTO(out_openerr, rc); + goto out_openerr; goto restart; } - OBD_ALLOC(*och_p, sizeof (struct obd_client_handle)); - if (!*och_p) - GOTO(out_och_free, rc = -ENOMEM); + *och_p = kzalloc(sizeof(struct obd_client_handle), GFP_NOFS); + if (!*och_p) { + rc = -ENOMEM; + goto out_och_free; + } (*och_usecount)++; @@ -664,13 +674,13 @@ restart: * just open error? */ rc = it_open_error(DISP_OPEN_OPEN, it); if (rc) - GOTO(out_och_free, rc); + goto out_och_free; LASSERT(it_disposition(it, DISP_ENQ_OPEN_REF)); rc = ll_local_open(file, it, fd, *och_p); if (rc) - GOTO(out_och_free, rc); + goto out_och_free; } mutex_unlock(&lli->lli_och_mutex); fd = NULL; @@ -679,7 +689,7 @@ restart: different kind of OPEN lock for this same inode gets cancelled by ldlm_cancel_lru */ if (!S_ISREG(inode->i_mode)) - GOTO(out_och_free, rc); + goto out_och_free; ll_capa_open(inode); @@ -687,10 +697,10 @@ restart: (cl_is_lov_delay_create(file->f_flags) || (file->f_mode & FMODE_WRITE) == 0)) { CDEBUG(D_INODE, "object creation was delayed\n"); - GOTO(out_och_free, rc); + goto out_och_free; } cl_lov_delay_create_clear(&file->f_flags); - GOTO(out_och_free, rc); + goto out_och_free; out_och_free: if (rc) { @@ -801,14 +811,16 @@ ll_lease_open(struct inode *inode, struct file *file, fmode_t fmode, old_handle = fd->fd_och->och_fh; } - OBD_ALLOC_PTR(och); - if (och == NULL) + och = kzalloc(sizeof(*och), GFP_NOFS); + if (!och) return ERR_PTR(-ENOMEM); op_data = ll_prep_md_op_data(NULL, inode, inode, NULL, 0, 0, LUSTRE_OPC_ANY, NULL); - if (IS_ERR(op_data)) - GOTO(out, rc = PTR_ERR(op_data)); + if (IS_ERR(op_data)) { + rc = PTR_ERR(op_data); + goto out; + } /* To tell the MDT this openhandle is from the same owner */ op_data->op_handle = old_handle; @@ -827,20 +839,24 @@ ll_lease_open(struct inode *inode, struct file *file, fmode_t fmode, ll_finish_md_op_data(op_data); ptlrpc_req_finished(req); if (rc < 0) - GOTO(out_release_it, rc); + goto out_release_it; - if (it_disposition(&it, DISP_LOOKUP_NEG)) - GOTO(out_release_it, rc = -ENOENT); + if (it_disposition(&it, DISP_LOOKUP_NEG)) { + rc = -ENOENT; + goto out_release_it; + } rc = it_open_error(DISP_OPEN_OPEN, &it); if (rc) - GOTO(out_release_it, rc); + goto out_release_it; LASSERT(it_disposition(&it, DISP_ENQ_OPEN_REF)); ll_och_fill(sbi->ll_md_exp, &it, och); - if (!it_disposition(&it, DISP_OPEN_LEASE)) /* old server? */ - GOTO(out_close, rc = -EOPNOTSUPP); + if (!it_disposition(&it, DISP_OPEN_LEASE)) /* old server? */ { + rc = -EOPNOTSUPP; + goto out_close; + } /* already get lease, handle lease lock */ ll_set_lock_data(sbi->ll_md_exp, inode, &it, NULL); @@ -850,7 +866,8 @@ ll_lease_open(struct inode *inode, struct file *file, fmode_t fmode, CERROR(DFID "lease granted but no open lock, %d/%llu.\n", PFID(ll_inode2fid(inode)), it.d.lustre.it_lock_mode, it.d.lustre.it_lock_bits); - GOTO(out_close, rc = -EPROTO); + rc = -EPROTO; + goto out_close; } ll_intent_release(&it); @@ -974,7 +991,7 @@ int ll_inode_getattr(struct inode *inode, struct obdo *obdo, CDEBUG(D_INODE, "objid "DOSTID" size %llu, blocks %llu," " blksize %lu\n", POSTID(oi), i_size_read(inode), (unsigned long long)inode->i_blocks, - (unsigned long)ll_inode_blksize(inode)); + 1UL << inode->i_blkbits); } ccc_inode_lsm_put(inode, lsm); return rc; @@ -994,7 +1011,12 @@ int ll_merge_lvb(const struct lu_env *env, struct inode *inode) LTIME_S(inode->i_atime) = lli->lli_lvb.lvb_atime; LTIME_S(inode->i_mtime) = lli->lli_lvb.lvb_mtime; LTIME_S(inode->i_ctime) = lli->lli_lvb.lvb_ctime; - inode_init_lvb(inode, &lvb); + + lvb.lvb_size = i_size_read(inode); + lvb.lvb_blocks = inode->i_blocks; + lvb.lvb_mtime = LTIME_S(inode->i_mtime); + lvb.lvb_atime = LTIME_S(inode->i_atime); + lvb.lvb_ctime = LTIME_S(inode->i_ctime); cl_object_attr_lock(obj); rc = cl_object_attr_get(env, obj, attr); @@ -1119,8 +1141,10 @@ restart: if ((iot == CIT_WRITE) && !(cio->cui_fd->fd_flags & LL_FILE_GROUP_LOCKED)) { if (mutex_lock_interruptible(&lli-> - lli_write_mutex)) - GOTO(out, result = -ERESTARTSYS); + lli_write_mutex)) { + result = -ERESTARTSYS; + goto out; + } write_mutex_locked = 1; } else if (iot == CIT_READ) { down_read(&lli->lli_trunc_sem); @@ -1148,7 +1172,7 @@ restart: result = io->ci_nob; *ppos = io->u.ci_wr.wr.crw_pos; } - GOTO(out, result); + goto out; out: cl_io_fini(env, io); /* If any bit been read/written (result != 0), we just return @@ -1248,8 +1272,7 @@ static ssize_t ll_file_splice_read(struct file *in_file, loff_t *ppos, return result; } -static int ll_lov_recreate(struct inode *inode, struct ost_id *oi, - obd_count ost_idx) +static int ll_lov_recreate(struct inode *inode, struct ost_id *oi, u32 ost_idx) { struct obd_export *exp = ll_i2dtexp(inode); struct obd_trans_info oti = { 0 }; @@ -1263,15 +1286,19 @@ static int ll_lov_recreate(struct inode *inode, struct ost_id *oi, return -ENOMEM; lsm = ccc_inode_lsm_get(inode); - if (!lsm_has_objects(lsm)) - GOTO(out, rc = -ENOENT); + if (!lsm_has_objects(lsm)) { + rc = -ENOENT; + goto out; + } lsm_size = sizeof(*lsm) + (sizeof(struct lov_oinfo) * (lsm->lsm_stripe_count)); OBD_ALLOC_LARGE(lsm2, lsm_size); - if (lsm2 == NULL) - GOTO(out, rc = -ENOMEM); + if (lsm2 == NULL) { + rc = -ENOMEM; + goto out; + } oa->o_oi = *oi; oa->o_nlink = ost_idx; @@ -1286,7 +1313,7 @@ static int ll_lov_recreate(struct inode *inode, struct ost_id *oi, ll_inode_size_unlock(inode); OBD_FREE_LARGE(lsm2, lsm_size); - GOTO(out, rc); + goto out; out: ccc_inode_lsm_put(inode, lsm); OBDO_FREE(oa); @@ -1314,7 +1341,7 @@ static int ll_lov_recreate_fid(struct inode *inode, unsigned long arg) { struct lu_fid fid; struct ost_id oi; - obd_count ost_idx; + u32 ost_idx; if (!capable(CFS_CAP_SYS_ADMIN)) return -EPERM; @@ -1339,16 +1366,17 @@ int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file, ccc_inode_lsm_put(inode, lsm); CDEBUG(D_IOCTL, "stripe already exists for ino %lu\n", inode->i_ino); - GOTO(out, rc = -EEXIST); + rc = -EEXIST; + goto out; } ll_inode_size_lock(inode); rc = ll_intent_file_open(file, lum, lum_size, &oit); if (rc) - GOTO(out_unlock, rc); + goto out_unlock; rc = oit.d.lustre.it_status; if (rc < 0) - GOTO(out_req_free, rc); + goto out_req_free; ll_release_openhandle(file->f_dentry, &oit); @@ -1391,7 +1419,7 @@ int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename, if (rc < 0) { CDEBUG(D_INFO, "md_getattr_name failed " "on %s: rc %d\n", filename, rc); - GOTO(out, rc); + goto out; } body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY); @@ -1401,7 +1429,8 @@ int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename, if (!(body->valid & (OBD_MD_FLEASIZE | OBD_MD_FLDIREA)) || lmmsize == 0) { - GOTO(out, rc = -ENODATA); + rc = -ENODATA; + goto out; } lmm = req_capsule_server_sized_get(&req->rq_pill, &RMF_MDT_MD, lmmsize); @@ -1409,7 +1438,8 @@ int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename, if ((lmm->lmm_magic != cpu_to_le32(LOV_MAGIC_V1)) && (lmm->lmm_magic != cpu_to_le32(LOV_MAGIC_V3))) { - GOTO(out, rc = -EPROTO); + rc = -EPROTO; + goto out; } /* @@ -1464,7 +1494,7 @@ static int ll_lov_setea(struct inode *inode, struct file *file, if (lump == NULL) return -ENOMEM; - if (copy_from_user(lump, (struct lov_user_md *)arg, lum_size)) { + if (copy_from_user(lump, (struct lov_user_md *)arg, lum_size)) { OBD_FREE_LARGE(lump, lum_size); return -EFAULT; } @@ -1625,9 +1655,11 @@ int ll_release_openhandle(struct dentry *dentry, struct lookup_intent *it) LASSERT(it_open_error(DISP_OPEN_OPEN, it) == 0); - OBD_ALLOC(och, sizeof(*och)); - if (!och) - GOTO(out, rc = -ENOMEM); + och = kzalloc(sizeof(*och), GFP_NOFS); + if (!och) { + rc = -ENOMEM; + goto out; + } ll_och_fill(ll_i2sbi(inode)->ll_md_exp, it, och); @@ -1676,8 +1708,10 @@ static int ll_do_fiemap(struct inode *inode, struct ll_user_fiemap *fiemap, * DEVICE_ORDER flag, then it cannot interpret the extents correctly. */ if (lsm->lsm_stripe_count > 1 && - !(fiemap->fm_flags & FIEMAP_FLAG_DEVICE_ORDER)) - GOTO(out, rc = -EOPNOTSUPP); + !(fiemap->fm_flags & FIEMAP_FLAG_DEVICE_ORDER)) { + rc = -EOPNOTSUPP; + goto out; + } fm_key.oa.o_oi = lsm->lsm_oi; fm_key.oa.o_valid = OBD_MD_FLID | OBD_MD_FLGROUP; @@ -1687,7 +1721,8 @@ static int ll_do_fiemap(struct inode *inode, struct ll_user_fiemap *fiemap, /* If filesize is 0, then there would be no objects for mapping */ if (fm_key.oa.o_size == 0) { fiemap->fm_mapped_extents = 0; - GOTO(out, rc = 0); + rc = 0; + goto out; } memcpy(&fm_key.fiemap, fiemap, sizeof(*fiemap)); @@ -1702,38 +1737,41 @@ out: return rc; } -int ll_fid2path(struct inode *inode, void *arg) +int ll_fid2path(struct inode *inode, void __user *arg) { - struct obd_export *exp = ll_i2mdexp(inode); - struct getinfo_fid2path *gfout, *gfin; - int outsize, rc; + struct obd_export *exp = ll_i2mdexp(inode); + const struct getinfo_fid2path __user *gfin = arg; + struct getinfo_fid2path *gfout; + u32 pathlen; + size_t outsize; + int rc; if (!capable(CFS_CAP_DAC_READ_SEARCH) && !(ll_i2sbi(inode)->ll_flags & LL_SBI_USER_FID2PATH)) return -EPERM; - /* Need to get the buflen */ - OBD_ALLOC_PTR(gfin); - if (gfin == NULL) - return -ENOMEM; - if (copy_from_user(gfin, arg, sizeof(*gfin))) { - OBD_FREE_PTR(gfin); + /* Only need to get the buflen */ + if (get_user(pathlen, &gfin->gf_pathlen)) return -EFAULT; - } - outsize = sizeof(*gfout) + gfin->gf_pathlen; - OBD_ALLOC(gfout, outsize); - if (gfout == NULL) { - OBD_FREE_PTR(gfin); + if (pathlen > PATH_MAX) + return -EINVAL; + + outsize = sizeof(*gfout) + pathlen; + + gfout = kzalloc(outsize, GFP_NOFS); + if (!gfout) return -ENOMEM; + + if (copy_from_user(gfout, arg, sizeof(*gfout))) { + rc = -EFAULT; + goto gf_free; } - memcpy(gfout, gfin, sizeof(*gfout)); - OBD_FREE_PTR(gfin); /* Call mdc_iocontrol */ rc = obd_iocontrol(OBD_IOC_FID2PATH, exp, outsize, gfout, NULL); - if (rc) - GOTO(gf_free, rc); + if (rc != 0) + goto gf_free; if (copy_to_user(arg, gfout, outsize)) rc = -EFAULT; @@ -1768,8 +1806,10 @@ static int ll_ioctl_fiemap(struct inode *inode, unsigned long arg) /* get the fiemap value */ if (copy_from_user(fiemap_s, (struct ll_user_fiemap __user *)arg, - sizeof(*fiemap_s))) - GOTO(error, rc = -EFAULT); + sizeof(*fiemap_s))) { + rc = -EFAULT; + goto error; + } /* If fm_extent_count is non-zero, read the first extent since * it is used to calculate end_offset and device from previous @@ -1777,13 +1817,15 @@ static int ll_ioctl_fiemap(struct inode *inode, unsigned long arg) if (extent_count) { if (copy_from_user(&fiemap_s->fm_extents[0], (char __user *)arg + sizeof(*fiemap_s), - sizeof(struct ll_fiemap_extent))) - GOTO(error, rc = -EFAULT); + sizeof(struct ll_fiemap_extent))) { + rc = -EFAULT; + goto error; + } } rc = ll_do_fiemap(inode, fiemap_s, num_bytes); if (rc) - GOTO(error, rc); + goto error; ret_bytes = sizeof(struct ll_user_fiemap); @@ -1821,12 +1863,15 @@ int ll_data_version(struct inode *inode, __u64 *data_version, if (!lsm_has_objects(lsm)) { *data_version = 0; CDEBUG(D_INODE, "No object for inode\n"); - GOTO(out, rc = 0); + rc = 0; + goto out; } - OBD_ALLOC_PTR(obdo); - if (obdo == NULL) - GOTO(out, rc = -ENOMEM); + obdo = kzalloc(sizeof(*obdo), GFP_NOFS); + if (!obdo) { + rc = -ENOMEM; + goto out; + } rc = ll_lsm_getattr(lsm, sbi->ll_dt_exp, NULL, obdo, 0, extent_lock); if (rc == 0) { @@ -1859,17 +1904,21 @@ int ll_hsm_release(struct inode *inode) PFID(&ll_i2info(inode)->lli_fid)); och = ll_lease_open(inode, NULL, FMODE_WRITE, MDS_OPEN_RELEASE); - if (IS_ERR(och)) - GOTO(out, rc = PTR_ERR(och)); + if (IS_ERR(och)) { + rc = PTR_ERR(och); + goto out; + } /* Grab latest data_version and [am]time values */ rc = ll_data_version(inode, &data_version, 1); if (rc != 0) - GOTO(out, rc); + goto out; env = cl_env_nested_get(&nest); - if (IS_ERR(env)) - GOTO(out, rc = PTR_ERR(env)); + if (IS_ERR(env)) { + rc = PTR_ERR(env); + goto out; + } ll_merge_lvb(env, inode); cl_env_nested_put(&nest, env); @@ -1906,22 +1955,28 @@ static int ll_swap_layouts(struct file *file1, struct file *file2, struct ll_swap_stack *llss = NULL; int rc; - OBD_ALLOC_PTR(llss); - if (llss == NULL) + llss = kzalloc(sizeof(*llss), GFP_NOFS); + if (!llss) return -ENOMEM; llss->inode1 = file1->f_dentry->d_inode; llss->inode2 = file2->f_dentry->d_inode; - if (!S_ISREG(llss->inode2->i_mode)) - GOTO(free, rc = -EINVAL); + if (!S_ISREG(llss->inode2->i_mode)) { + rc = -EINVAL; + goto free; + } if (inode_permission(llss->inode1, MAY_WRITE) || - inode_permission(llss->inode2, MAY_WRITE)) - GOTO(free, rc = -EPERM); + inode_permission(llss->inode2, MAY_WRITE)) { + rc = -EPERM; + goto free; + } - if (llss->inode2->i_sb != llss->inode1->i_sb) - GOTO(free, rc = -EXDEV); + if (llss->inode2->i_sb != llss->inode1->i_sb) { + rc = -EXDEV; + goto free; + } /* we use 2 bool because it is easier to swap than 2 bits */ if (lsl->sl_flags & SWAP_LAYOUTS_CHECK_DV1) @@ -1935,8 +1990,10 @@ static int ll_swap_layouts(struct file *file1, struct file *file2, llss->dv2 = lsl->sl_dv2; rc = lu_fid_cmp(ll_inode2fid(llss->inode1), ll_inode2fid(llss->inode2)); - if (rc == 0) /* same file, done! */ - GOTO(free, rc = 0); + if (rc == 0) /* same file, done! */ { + rc = 0; + goto free; + } if (rc < 0) { /* sequentialize it */ swap(llss->inode1, llss->inode2); @@ -1949,12 +2006,12 @@ static int ll_swap_layouts(struct file *file1, struct file *file2, if (gid != 0) { /* application asks to flush dirty cache */ rc = ll_get_grouplock(llss->inode1, file1, gid); if (rc < 0) - GOTO(free, rc); + goto free; rc = ll_get_grouplock(llss->inode2, file2, gid); if (rc < 0) { ll_put_grouplock(llss->inode1, file1, gid); - GOTO(free, rc); + goto free; } } @@ -1975,17 +2032,21 @@ static int ll_swap_layouts(struct file *file1, struct file *file2, if (llss->check_dv1) { rc = ll_data_version(llss->inode1, &dv, 0); if (rc) - GOTO(putgl, rc); - if (dv != llss->dv1) - GOTO(putgl, rc = -EAGAIN); + goto putgl; + if (dv != llss->dv1) { + rc = -EAGAIN; + goto putgl; + } } if (llss->check_dv2) { rc = ll_data_version(llss->inode2, &dv, 0); if (rc) - GOTO(putgl, rc); - if (dv != llss->dv2) - GOTO(putgl, rc = -EAGAIN); + goto putgl; + if (dv != llss->dv2) { + rc = -EAGAIN; + goto putgl; + } } /* struct md_op_data is used to send the swap args to the mdt @@ -1997,8 +2058,10 @@ static int ll_swap_layouts(struct file *file1, struct file *file2, rc = -ENOMEM; op_data = ll_prep_md_op_data(NULL, llss->inode1, llss->inode2, NULL, 0, 0, LUSTRE_OPC_ANY, &msl); - if (IS_ERR(op_data)) - GOTO(free, rc = PTR_ERR(op_data)); + if (IS_ERR(op_data)) { + rc = PTR_ERR(op_data); + goto free; + } rc = obd_iocontrol(LL_IOC_LOV_SWAP_LAYOUTS, ll_i2mdexp(llss->inode1), sizeof(*op_data), op_data, NULL); @@ -2012,7 +2075,7 @@ putgl: /* rc can be set from obd_iocontrol() or from a GOTO(putgl, ...) */ if (rc != 0) - GOTO(free, rc); + goto free; /* clear useless flags */ if (!(lsl->sl_flags & SWAP_LAYOUTS_KEEP_MTIME)) { @@ -2086,20 +2149,24 @@ static int ll_hsm_import(struct inode *inode, struct file *file, return -EINVAL; /* set HSM flags */ - OBD_ALLOC_PTR(hss); - if (hss == NULL) - GOTO(out, rc = -ENOMEM); + hss = kzalloc(sizeof(*hss), GFP_NOFS); + if (!hss) { + rc = -ENOMEM; + goto out; + } hss->hss_valid = HSS_SETMASK | HSS_ARCHIVE_ID; hss->hss_archive_id = hui->hui_archive_id; hss->hss_setmask = HS_ARCHIVED | HS_EXISTS | HS_RELEASED; rc = ll_hsm_state_set(inode, hss); if (rc != 0) - GOTO(out, rc); + goto out; - OBD_ALLOC_PTR(attr); - if (attr == NULL) - GOTO(out, rc = -ENOMEM); + attr = kzalloc(sizeof(*attr), GFP_NOFS); + if (!attr) { + rc = -ENOMEM; + goto out; + } attr->ia_mode = hui->hui_mode & (S_IRWXU | S_IRWXG | S_IRWXO); attr->ia_mode |= S_IFREG; @@ -2116,10 +2183,14 @@ static int ll_hsm_import(struct inode *inode, struct file *file, ATTR_MTIME | ATTR_MTIME_SET | ATTR_ATIME | ATTR_ATIME_SET; + mutex_lock(&inode->i_mutex); + rc = ll_setattr_raw(file->f_dentry, attr, true); if (rc == -ENODATA) rc = 0; + mutex_unlock(&inode->i_mutex); + out: if (hss != NULL) OBD_FREE_PTR(hss); @@ -2145,7 +2216,7 @@ ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) if (_IOC_TYPE(cmd) == 'T' || _IOC_TYPE(cmd) == 't') /* tty ioctls */ return -ENOTTY; - switch(cmd) { + switch (cmd) { case LL_IOC_GETFLAGS: /* Get the current value of the file flags */ return put_user(fd->fd_flags, (int *)arg); @@ -2257,7 +2328,7 @@ ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) if (mdtidx < 0) return mdtidx; - if (put_user((int)mdtidx, (int*)arg)) + if (put_user((int)mdtidx, (int *)arg)) return -EFAULT; return 0; @@ -2270,8 +2341,8 @@ ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) struct hsm_user_state *hus; int rc; - OBD_ALLOC_PTR(hus); - if (hus == NULL) + hus = kzalloc(sizeof(*hus), GFP_NOFS); + if (!hus) return -ENOMEM; op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL, 0, 0, @@ -2295,8 +2366,8 @@ ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) struct hsm_state_set *hss; int rc; - OBD_ALLOC_PTR(hss); - if (hss == NULL) + hss = kzalloc(sizeof(*hss), GFP_NOFS); + if (!hss) return -ENOMEM; if (copy_from_user(hss, (char *)arg, sizeof(*hss))) { @@ -2314,8 +2385,8 @@ ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) struct hsm_current_action *hca; int rc; - OBD_ALLOC_PTR(hca); - if (hca == NULL) + hca = kzalloc(sizeof(*hca), GFP_NOFS); + if (!hca) return -ENOMEM; op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL, 0, 0, @@ -2422,8 +2493,8 @@ ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) case LL_IOC_HSM_IMPORT: { struct hsm_user_import *hui; - OBD_ALLOC_PTR(hui); - if (hui == NULL) + hui = kzalloc(sizeof(*hui), GFP_NOFS); + if (!hui) return -ENOMEM; if (copy_from_user(hui, (void *)arg, sizeof(*hui))) { @@ -2869,13 +2940,13 @@ static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits) oit.it_create_mode &= ~M_CHECK_STALE; if (rc < 0) { rc = ll_inode_revalidate_fini(inode, rc); - GOTO (out, rc); + goto out; } rc = ll_revalidate_it_finish(req, &oit, dentry); if (rc != 0) { ll_intent_release(&oit); - GOTO(out, rc); + goto out; } /* Unlinked? Unhash dentry, so it is not picked up later by @@ -2888,7 +2959,7 @@ static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits) ll_lookup_finish_locks(&oit, dentry); } else if (!ll_have_md_lock(dentry->d_inode, &ibits, LCK_MINMODE)) { struct ll_sb_info *sbi = ll_i2sbi(dentry->d_inode); - obd_valid valid = OBD_MD_FLGETATTR; + u64 valid = OBD_MD_FLGETATTR; struct md_op_data *op_data; int ealen = 0; @@ -3158,8 +3229,8 @@ void *ll_iocontrol_register(llioc_callback_t cb, int count, unsigned int *cmd) return NULL; size = sizeof(*in_data) + count * sizeof(unsigned int); - OBD_ALLOC(in_data, size); - if (in_data == NULL) + in_data = kzalloc(size, GFP_NOFS); + if (!in_data) return NULL; memset(in_data, 0, sizeof(*in_data)); @@ -3299,20 +3370,28 @@ static int ll_layout_fetch(struct inode *inode, struct ldlm_lock *lock) return rc; body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY); - if (body == NULL) - GOTO(out, rc = -EPROTO); + if (body == NULL) { + rc = -EPROTO; + goto out; + } lmmsize = body->eadatasize; - if (lmmsize == 0) /* empty layout */ - GOTO(out, rc = 0); + if (lmmsize == 0) /* empty layout */ { + rc = 0; + goto out; + } lmm = req_capsule_server_sized_get(&req->rq_pill, &RMF_EADATA, lmmsize); - if (lmm == NULL) - GOTO(out, rc = -EFAULT); + if (lmm == NULL) { + rc = -EFAULT; + goto out; + } OBD_ALLOC_LARGE(lvbdata, lmmsize); - if (lvbdata == NULL) - GOTO(out, rc = -ENOMEM); + if (lvbdata == NULL) { + rc = -ENOMEM; + goto out; + } memcpy(lvbdata, lmm, lmmsize); lock_res_and_lock(lock); @@ -3369,12 +3448,12 @@ static int ll_layout_lock_set(struct lustre_handle *lockh, ldlm_mode_t mode, *gen = ll_layout_version_get(lli); rc = 0; } - GOTO(out, rc); + goto out; } rc = ll_layout_fetch(inode, lock); if (rc < 0) - GOTO(out, rc); + goto out; /* for layout lock, lmm is returned in lock's lvb. * lvb_data is immutable if the lock is held so it's safe to access it @@ -3395,7 +3474,7 @@ static int ll_layout_lock_set(struct lustre_handle *lockh, ldlm_mode_t mode, } } if (rc < 0) - GOTO(out, rc); + goto out; /* set layout to file. Unlikely this will fail as old layout was * surely eliminated */ @@ -3539,8 +3618,8 @@ int ll_layout_restore(struct inode *inode) len = sizeof(struct hsm_user_request) + sizeof(struct hsm_user_item); - OBD_ALLOC(hur, len); - if (hur == NULL) + hur = kzalloc(len, GFP_NOFS); + if (!hur) return -ENOMEM; hur->hur_request.hr_action = HUA_RESTORE; diff --git a/drivers/staging/lustre/lustre/llite/llite_capa.c b/drivers/staging/lustre/lustre/llite/llite_capa.c index 023c40518c6d..b1e39ee412cd 100644 --- a/drivers/staging/lustre/lustre/llite/llite_capa.c +++ b/drivers/staging/lustre/lustre/llite/llite_capa.c @@ -543,7 +543,7 @@ static int ll_update_capa(struct obd_capa *ocapa, struct lustre_capa *capa) "renewal failed: -EIO, " "retry in 2 mins"); ll_capa_renewal_retries++; - GOTO(retry, rc); + goto retry; } else { DEBUG_CAPA(D_ERROR, &ocapa->c_capa, "renewal failed(rc: %d) for", rc); diff --git a/drivers/staging/lustre/lustre/llite/llite_close.c b/drivers/staging/lustre/lustre/llite/llite_close.c index 6a3a7a303043..84e0003f2daf 100644 --- a/drivers/staging/lustre/lustre/llite/llite_close.c +++ b/drivers/staging/lustre/lustre/llite/llite_close.c @@ -155,7 +155,7 @@ void ll_ioepoch_close(struct inode *inode, struct md_op_data *op_data, inode = igrab(inode); LASSERT(inode); - GOTO(out, 0); + goto out; } if (flags & LLIF_DONE_WRITING) { /* Some pages are still dirty, it is early to send @@ -167,7 +167,7 @@ void ll_ioepoch_close(struct inode *inode, struct md_op_data *op_data, inode = igrab(inode); LASSERT(inode); - GOTO(out, 0); + goto out; } } CDEBUG(D_INODE, "Epoch %llu closed on "DFID"\n", @@ -184,14 +184,14 @@ void ll_ioepoch_close(struct inode *inode, struct md_op_data *op_data, /* Pack Size-on-MDS inode attributes only if they has changed */ if (!(lli->lli_flags & LLIF_SOM_DIRTY)) { spin_unlock(&lli->lli_lock); - GOTO(out, 0); + goto out; } /* There is a pending DONE_WRITE -- close epoch with no * attribute change. */ if (lli->lli_flags & LLIF_EPOCH_PENDING) { spin_unlock(&lli->lli_lock); - GOTO(out, 0); + goto out; } } @@ -285,8 +285,8 @@ static void ll_done_writing(struct inode *inode) LASSERT(exp_connect_som(ll_i2mdexp(inode))); - OBD_ALLOC_PTR(op_data); - if (op_data == NULL) { + op_data = kzalloc(sizeof(*op_data), GFP_NOFS); + if (!op_data) { CERROR("can't allocate op_data\n"); return; } @@ -294,7 +294,7 @@ static void ll_done_writing(struct inode *inode) ll_prepare_done_writing(inode, op_data, &och); /* If there is no @och, we do not do D_W yet. */ if (och == NULL) - GOTO(out, 0); + goto out; rc = md_done_writing(ll_i2sbi(inode)->ll_md_exp, op_data, NULL); if (rc == -EAGAIN) { @@ -367,8 +367,8 @@ int ll_close_thread_start(struct ll_close_queue **lcq_ret) if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD)) return -EINTR; - OBD_ALLOC(lcq, sizeof(*lcq)); - if (lcq == NULL) + lcq = kzalloc(sizeof(*lcq), GFP_NOFS); + if (!lcq) return -ENOMEM; spin_lock_init(&lcq->lcq_lock); diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h b/drivers/staging/lustre/lustre/llite/llite_internal.h index 634ffa645e06..36aa0fd147f2 100644 --- a/drivers/staging/lustre/lustre/llite/llite_internal.h +++ b/drivers/staging/lustre/lustre/llite/llite_internal.h @@ -45,7 +45,7 @@ #include "../include/cl_object.h" #include "../include/lclient.h" #include "../include/lustre_mdc.h" -#include "../include/linux/lustre_intent.h" +#include "../include/lustre_intent.h" #include <linux/compat.h> #include <linux/posix_acl_xattr.h> @@ -305,8 +305,8 @@ int ll_xattr_cache_get(struct inode *inode, void ll_inode_size_lock(struct inode *inode); void ll_inode_size_unlock(struct inode *inode); -// FIXME: replace the name of this with LL_I to conform to kernel stuff -// static inline struct ll_inode_info *LL_I(struct inode *inode) +/* FIXME: replace the name of this with LL_I to conform to kernel stuff */ +/* static inline struct ll_inode_info *LL_I(struct inode *inode) */ static inline struct ll_inode_info *ll_i2info(struct inode *inode) { return container_of(inode, struct ll_inode_info, lli_vfs_inode); @@ -652,7 +652,7 @@ static inline struct inode *ll_info2i(struct ll_inode_info *lli) } __u32 ll_i2suppgid(struct inode *i); -void ll_i2gids(__u32 *suppgids, struct inode *i1,struct inode *i2); +void ll_i2gids(__u32 *suppgids, struct inode *i1, struct inode *i2); static inline int ll_need_32bit_api(struct ll_sb_info *sbi) { @@ -775,7 +775,7 @@ int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp, int *lmm_size, struct ptlrpc_request **request); int ll_fsync(struct file *file, loff_t start, loff_t end, int data); int ll_merge_lvb(const struct lu_env *env, struct inode *inode); -int ll_fid2path(struct inode *inode, void *arg); +int ll_fid2path(struct inode *inode, void __user *arg); int ll_data_version(struct inode *inode, __u64 *data_version, int extent_lock); int ll_hsm_release(struct inode *inode); @@ -894,6 +894,10 @@ struct vvp_io { * fault API used bitflags for return code. */ unsigned int ft_flags; + /** + * check that flags are from filemap_fault + */ + bool ft_flags_valid; } fault; } fault; } u; @@ -991,7 +995,7 @@ int ll_close_thread_start(struct ll_close_queue **lcq_ret); /* llite/llite_mmap.c */ int ll_teardown_mmaps(struct address_space *mapping, __u64 first, __u64 last); -int ll_file_mmap(struct file * file, struct vm_area_struct * vma); +int ll_file_mmap(struct file *file, struct vm_area_struct *vma); void policy_from_vma(ldlm_policy_data_t *policy, struct vm_area_struct *vma, unsigned long addr, size_t count); struct vm_area_struct *our_vma(struct mm_struct *mm, unsigned long addr, @@ -1032,7 +1036,7 @@ static inline struct client_obd *sbi2mdc(struct ll_sb_info *sbi) return &obd->u.cli; } -// FIXME: replace the name of this with LL_SB to conform to kernel stuff +/* FIXME: replace the name of this with LL_SB to conform to kernel stuff */ static inline struct ll_sb_info *ll_i2sbi(struct inode *inode) { return ll_s2sbi(inode->i_sb); @@ -1124,7 +1128,7 @@ struct eacl_entry { ext_acl_xattr_header *ee_acl; }; -obd_valid rce_ops2valid(int ops); +u64 rce_ops2valid(int ops); struct rmtacl_ctl_entry *rct_search(struct rmtacl_ctl_table *rct, pid_t key); int rct_add(struct rmtacl_ctl_table *rct, pid_t key, int ops); int rct_del(struct rmtacl_ctl_table *rct, pid_t key); @@ -1140,7 +1144,7 @@ void et_search_free(struct eacl_table *et, pid_t key); void et_init(struct eacl_table *et); void et_fini(struct eacl_table *et); #else -static inline obd_valid rce_ops2valid(int ops) +static inline u64 rce_ops2valid(int ops) { return 0; } diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c index 0367f5a2cfe4..a8bcc51057f1 100644 --- a/drivers/staging/lustre/lustre/llite/llite_lib.c +++ b/drivers/staging/lustre/lustre/llite/llite_lib.c @@ -41,6 +41,7 @@ #define DEBUG_SUBSYSTEM S_LLITE #include <linux/module.h> +#include <linux/statfs.h> #include <linux/types.h> #include <linux/mm.h> @@ -74,7 +75,7 @@ static struct ll_sb_info *ll_init_sbi(void) class_uuid_t uuid; int i; - OBD_ALLOC(sbi, sizeof(*sbi)); + sbi = kzalloc(sizeof(*sbi), GFP_NOFS); if (!sbi) return NULL; @@ -162,7 +163,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, struct obd_uuid *uuid; struct md_op_data *op_data; struct lustre_md lmd; - obd_valid valid; + u64 valid; int size, err, checksum; obd = class_name2obd(md); @@ -171,12 +172,12 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, return -EINVAL; } - OBD_ALLOC_PTR(data); - if (data == NULL) + data = kzalloc(sizeof(*data), GFP_NOFS); + if (!data) return -ENOMEM; - OBD_ALLOC_PTR(osfs); - if (osfs == NULL) { + osfs = kzalloc(sizeof(*osfs), GFP_NOFS); + if (!osfs) { OBD_FREE_PTR(data); return -ENOMEM; } @@ -255,10 +256,10 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, "recovery, of which this client is not a " "part. Please wait for recovery to complete," " abort, or time out.\n", md); - GOTO(out, err); + goto out; } else if (err) { CERROR("cannot connect to %s: rc = %d\n", md, err); - GOTO(out, err); + goto out; } sbi->ll_md_exp->exp_connect_data = *data; @@ -268,7 +269,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, if (err) { CERROR("%s: Can't init metadata layer FID infrastructure, " "rc = %d\n", sbi->ll_md_exp->exp_obd->obd_name, err); - GOTO(out_md, err); + goto out_md; } /* For mount, we only need fs info from MDT0, and also in DNE, it @@ -278,7 +279,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS), OBD_STATFS_FOR_MDT0); if (err) - GOTO(out_md_fid, err); + goto out_md_fid; /* This needs to be after statfs to ensure connect has finished. * Note that "data" does NOT contain the valid connect reply. @@ -292,7 +293,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, valid != CLIENT_CONNECT_MDT_REQD) { char *buf; - OBD_ALLOC_WAIT(buf, PAGE_CACHE_SIZE); + buf = kzalloc(PAGE_CACHE_SIZE, GFP_KERNEL); obd_connect_flags2str(buf, PAGE_CACHE_SIZE, valid ^ CLIENT_CONNECT_MDT_REQD, ","); LCONSOLE_ERROR_MSG(0x170, "Server %s does not support " @@ -301,7 +302,8 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, "server or downgrade client.\n", sbi->ll_md_exp->exp_obd->obd_name, buf); OBD_FREE(buf, PAGE_CACHE_SIZE); - GOTO(out_md_fid, err = -EPROTO); + err = -EPROTO; + goto out_md_fid; } size = sizeof(*data); @@ -310,7 +312,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, if (err) { CERROR("%s: Get connect data failed: rc = %d\n", sbi->ll_md_exp->exp_obd->obd_name, err); - GOTO(out_md_fid, err); + goto out_md_fid; } LASSERT(osfs->os_bsize); @@ -391,7 +393,8 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, obd = class_name2obd(dt); if (!obd) { CERROR("DT %s: not setup or attached\n", dt); - GOTO(out_md_fid, err = -ENODEV); + err = -ENODEV; + goto out_md_fid; } data->ocd_connect_flags = OBD_CONNECT_GRANT | OBD_CONNECT_VERSION | @@ -442,11 +445,11 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, "recovery, of which this client is not a " "part. Please wait for recovery to " "complete, abort, or time out.\n", dt); - GOTO(out_md, err); + goto out_md; } else if (err) { CERROR("%s: Cannot connect to %s: rc = %d\n", sbi->ll_dt_exp->exp_obd->obd_name, dt, err); - GOTO(out_md, err); + goto out_md; } sbi->ll_dt_exp->exp_connect_data = *data; @@ -456,7 +459,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, if (err) { CERROR("%s: Can't init data layer FID infrastructure, " "rc = %d\n", sbi->ll_dt_exp->exp_obd->obd_name, err); - GOTO(out_dt, err); + goto out_dt; } mutex_lock(&sbi->ll_lco.lco_lock); @@ -469,13 +472,14 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, err = md_getstatus(sbi->ll_md_exp, &sbi->ll_root_fid, &oc); if (err) { CERROR("cannot mds_connect: rc = %d\n", err); - GOTO(out_lock_cn_cb, err); + goto out_lock_cn_cb; } if (!fid_is_sane(&sbi->ll_root_fid)) { CERROR("%s: Invalid root fid "DFID" during mount\n", sbi->ll_md_exp->exp_obd->obd_name, PFID(&sbi->ll_root_fid)); - GOTO(out_lock_cn_cb, err = -EINVAL); + err = -EINVAL; + goto out_lock_cn_cb; } CDEBUG(D_SUPER, "rootfid "DFID"\n", PFID(&sbi->ll_root_fid)); @@ -492,9 +496,11 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, else if (sbi->ll_flags & LL_SBI_ACL) valid |= OBD_MD_FLACL; - OBD_ALLOC_PTR(op_data); - if (op_data == NULL) - GOTO(out_lock_cn_cb, err = -ENOMEM); + op_data = kzalloc(sizeof(*op_data), GFP_NOFS); + if (!op_data) { + err = -ENOMEM; + goto out_lock_cn_cb; + } op_data->op_fid1 = sbi->ll_root_fid; op_data->op_mode = 0; @@ -508,7 +514,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, if (err) { CERROR("%s: md_getattr failed for root: rc = %d\n", sbi->ll_md_exp->exp_obd->obd_name, err); - GOTO(out_lock_cn_cb, err); + goto out_lock_cn_cb; } err = md_get_lustre_md(sbi->ll_md_exp, request, sbi->ll_dt_exp, @@ -516,7 +522,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, if (err) { CERROR("failed to understand root inode md: rc = %d\n", err); ptlrpc_req_finished(request); - GOTO(out_lock_cn_cb, err); + goto out_lock_cn_cb; } LASSERT(fid_is_sane(&sbi->ll_root_fid)); @@ -538,13 +544,13 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, err = IS_ERR(root) ? PTR_ERR(root) : -EBADF; root = NULL; CERROR("lustre_lite: bad iget4 for root\n"); - GOTO(out_root, err); + goto out_root; } err = ll_close_thread_start(&sbi->ll_lcq); if (err) { CERROR("cannot start close thread: rc %d\n", err); - GOTO(out_root, err); + goto out_root; } #ifdef CONFIG_FS_POSIX_ACL @@ -568,7 +574,8 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt, if (sb->s_root == NULL) { CERROR("%s: can't make root dentry\n", ll_get_fsname(sb, NULL, 0)); - GOTO(out_root, err = -ENOMEM); + err = -ENOMEM; + goto out_lock_cn_cb; } sbi->ll_sdev_orig = sb->s_dev; @@ -761,9 +768,9 @@ void ll_kill_super(struct super_block *sb) static inline int ll_set_opt(const char *opt, char *data, int fl) { if (strncmp(opt, data, strlen(opt)) != 0) - return(0); + return 0; else - return(fl); + return fl; } /* non-client-specific mount options are parsed in lmd_parse */ @@ -986,8 +993,8 @@ int ll_fill_super(struct super_block *sb, struct vfsmount *mnt) CDEBUG(D_VFSTRACE, "VFS Op: sb %p\n", sb); - OBD_ALLOC_PTR(cfg); - if (cfg == NULL) + cfg = kzalloc(sizeof(*cfg), GFP_NOFS); + if (!cfg) return -ENOMEM; try_module_get(THIS_MODULE); @@ -1002,16 +1009,16 @@ int ll_fill_super(struct super_block *sb, struct vfsmount *mnt) err = ll_options(lsi->lsi_lmd->lmd_opts, &sbi->ll_flags); if (err) - GOTO(out_free, err); + goto out_free; err = bdi_init(&lsi->lsi_bdi); if (err) - GOTO(out_free, err); + goto out_free; lsi->lsi_flags |= LSI_BDI_INITIALIZED; lsi->lsi_bdi.capabilities = BDI_CAP_MAP_COPY; err = ll_bdi_register(&lsi->lsi_bdi); if (err) - GOTO(out_free, err); + goto out_free; sb->s_bdi = &lsi->lsi_bdi; /* kernel >= 2.6.38 store dentry operations in sb->s_d_op. */ @@ -1027,7 +1034,7 @@ int ll_fill_super(struct super_block *sb, struct vfsmount *mnt) err = lustre_process_log(sb, profilenm, cfg); if (err < 0) { CERROR("Unable to process log: %d\n", err); - GOTO(out_free, err); + goto out_free; } /* Profile set with LCFG_MOUNTOPT so we can find our mdc and osc obds */ @@ -1036,19 +1043,24 @@ int ll_fill_super(struct super_block *sb, struct vfsmount *mnt) LCONSOLE_ERROR_MSG(0x156, "The client profile '%s' could not be" " read from the MGS. Does that filesystem " "exist?\n", profilenm); - GOTO(out_free, err = -EINVAL); + err = -EINVAL; + goto out_free; } CDEBUG(D_CONFIG, "Found profile %s: mdc=%s osc=%s\n", profilenm, lprof->lp_md, lprof->lp_dt); - OBD_ALLOC(dt, strlen(lprof->lp_dt) + instlen + 2); - if (!dt) - GOTO(out_free, err = -ENOMEM); + dt = kzalloc(strlen(lprof->lp_dt) + instlen + 2, GFP_NOFS); + if (!dt) { + err = -ENOMEM; + goto out_free; + } sprintf(dt, "%s-%p", lprof->lp_dt, cfg->cfg_instance); - OBD_ALLOC(md, strlen(lprof->lp_md) + instlen + 2); - if (!md) - GOTO(out_free, err = -ENOMEM); + md = kzalloc(strlen(lprof->lp_md) + instlen + 2, GFP_NOFS); + if (!md) { + err = -ENOMEM; + goto out_free; + } sprintf(md, "%s-%p", lprof->lp_md, cfg->cfg_instance); /* connections, registrations, sb setup */ @@ -1139,7 +1151,7 @@ struct inode *ll_inode_from_resource_lock(struct ldlm_lock *lock) /* NOTE: we depend on atomic igrab() -bzzz */ lock_res_and_lock(lock); if (lock->l_resource->lr_lvb_inode) { - struct ll_inode_info * lli; + struct ll_inode_info *lli; lli = ll_i2info(lock->l_resource->lr_lvb_inode); if (lli->lli_inode_magic == LLI_INODE_MAGIC) { inode = igrab(lock->l_resource->lr_lvb_inode); @@ -1225,7 +1237,7 @@ void ll_clear_inode(struct inode *inode) lli->lli_has_smd = false; } -int ll_md_setattr(struct dentry *dentry, struct md_op_data *op_data, +static int ll_md_setattr(struct dentry *dentry, struct md_op_data *op_data, struct md_open_data **mod) { struct lustre_md md; @@ -1377,7 +1389,7 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import) * OST maximum object size and number of stripes. This * needs another check in addition to the VFS check above. */ if (attr->ia_size > ll_file_maxbytes(inode)) { - CDEBUG(D_INODE,"file "DFID" too large %llu > %llu\n", + CDEBUG(D_INODE, "file "DFID" too large %llu > %llu\n", PFID(&lli->lli_fid), attr->ia_size, ll_file_maxbytes(inode)); return -EFBIG; @@ -1425,8 +1437,8 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import) /* We always do an MDS RPC, even if we're only changing the size; * only the MDS knows whether truncate() should fail with -ETXTBUSY */ - OBD_ALLOC_PTR(op_data); - if (op_data == NULL) + op_data = kzalloc(sizeof(*op_data), GFP_NOFS); + if (!op_data) return -ENOMEM; if (!S_ISDIR(inode->i_mode)) { @@ -1466,14 +1478,15 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import) rc = ll_md_setattr(dentry, op_data, &mod); if (rc) - GOTO(out, rc); + goto out; /* truncate failed (only when non HSM import), others succeed */ if (file_is_released) { if ((attr->ia_valid & ATTR_SIZE) && !hsm_import) - GOTO(out, rc = -ENODATA); + rc = -ENODATA; else - GOTO(out, rc = 0); + rc = 0; + goto out; } /* RPC to MDT is sent, cancel data modification flag */ @@ -1484,8 +1497,10 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import) } ll_ioepoch_open(lli, op_data->op_ioepoch); - if (!S_ISREG(inode->i_mode)) - GOTO(out, rc = 0); + if (!S_ISREG(inode->i_mode)) { + rc = 0; + goto out; + } if (attr->ia_valid & (ATTR_SIZE | ATTR_ATIME | ATTR_ATIME_SET | @@ -1568,7 +1583,8 @@ int ll_statfs_internal(struct super_block *sb, struct obd_statfs *osfs, osfs->os_type = sb->s_magic; CDEBUG(D_SUPER, "MDC blocks %llu/%llu objects %llu/%llu\n", - osfs->os_bavail, osfs->os_blocks, osfs->os_ffree,osfs->os_files); + osfs->os_bavail, osfs->os_blocks, osfs->os_ffree, + osfs->os_files); if (sbi->ll_flags & LL_SBI_LAZYSTATFS) flags |= OBD_STATFS_NODELAY; @@ -1885,7 +1901,7 @@ int ll_iocontrol(struct inode *inode, struct file *file, struct ptlrpc_request *req = NULL; int rc, flags = 0; - switch(cmd) { + switch (cmd) { case FSFILT_IOC_GETFLAGS: { struct mdt_body *body; struct md_op_data *op_data; @@ -2013,7 +2029,7 @@ void ll_umount_begin(struct super_block *sb) } obd->obd_force = 1; - OBD_ALLOC_PTR(ioc_data); + ioc_data = kzalloc(sizeof(*ioc_data), GFP_NOFS); if (ioc_data) { obd_iocontrol(IOC_OSC_SET_ACTIVE, sbi->ll_md_exp, sizeof(*ioc_data), ioc_data, NULL); @@ -2101,7 +2117,7 @@ int ll_prep_inode(struct inode **inode, struct ptlrpc_request *req, rc = IS_ERR(*inode) ? PTR_ERR(*inode) : -ENOMEM; *inode = NULL; CERROR("new_inode -fatal: rc %d\n", rc); - GOTO(out, rc); + goto out; } } @@ -2150,36 +2166,44 @@ int ll_obd_statfs(struct inode *inode, void *arg) __u32 flags; int len = 0, rc; - if (!inode || !(sbi = ll_i2sbi(inode))) - GOTO(out_statfs, rc = -EINVAL); + if (!inode || !(sbi = ll_i2sbi(inode))) { + rc = -EINVAL; + goto out_statfs; + } rc = obd_ioctl_getdata(&buf, &len, arg); if (rc) - GOTO(out_statfs, rc); + goto out_statfs; - data = (void*)buf; + data = (void *)buf; if (!data->ioc_inlbuf1 || !data->ioc_inlbuf2 || - !data->ioc_pbuf1 || !data->ioc_pbuf2) - GOTO(out_statfs, rc = -EINVAL); + !data->ioc_pbuf1 || !data->ioc_pbuf2) { + rc = -EINVAL; + goto out_statfs; + } if (data->ioc_inllen1 != sizeof(__u32) || data->ioc_inllen2 != sizeof(__u32) || data->ioc_plen1 != sizeof(struct obd_statfs) || - data->ioc_plen2 != sizeof(struct obd_uuid)) - GOTO(out_statfs, rc = -EINVAL); + data->ioc_plen2 != sizeof(struct obd_uuid)) { + rc = -EINVAL; + goto out_statfs; + } memcpy(&type, data->ioc_inlbuf1, sizeof(__u32)); if (type & LL_STATFS_LMV) exp = sbi->ll_md_exp; else if (type & LL_STATFS_LOV) exp = sbi->ll_dt_exp; - else - GOTO(out_statfs, rc = -ENODEV); + else { + rc = -ENODEV; + goto out_statfs; + } flags = (type & LL_STATFS_NODELAY) ? OBD_STATFS_NODELAY : 0; rc = obd_iocontrol(IOC_OBD_STATFS, exp, len, buf, &flags); if (rc) - GOTO(out_statfs, rc); + goto out_statfs; out_statfs: if (buf) obd_ioctl_freedata(buf, len); @@ -2212,11 +2236,11 @@ int ll_process_config(struct lustre_cfg *lcfg) lcfg, sb); if (rc > 0) rc = 0; - return(rc); + return rc; } /* this function prepares md_op_data hint for passing ot down to MD stack. */ -struct md_op_data * ll_prep_md_op_data(struct md_op_data *op_data, +struct md_op_data *ll_prep_md_op_data(struct md_op_data *op_data, struct inode *i1, struct inode *i2, const char *name, int namelen, int mode, __u32 opc, void *data) @@ -2227,7 +2251,7 @@ struct md_op_data * ll_prep_md_op_data(struct md_op_data *op_data, return ERR_PTR(-ENAMETOOLONG); if (op_data == NULL) - OBD_ALLOC_PTR(op_data); + op_data = kzalloc(sizeof(*op_data), GFP_NOFS); if (op_data == NULL) return ERR_PTR(-ENOMEM); diff --git a/drivers/staging/lustre/lustre/llite/llite_mmap.c b/drivers/staging/lustre/lustre/llite/llite_mmap.c index 7dae610f5c86..ae605a6d9dc2 100644 --- a/drivers/staging/lustre/lustre/llite/llite_mmap.c +++ b/drivers/staging/lustre/lustre/llite/llite_mmap.c @@ -71,7 +71,7 @@ struct vm_area_struct *our_vma(struct mm_struct *mm, unsigned long addr, /* mmap_sem must have been held by caller. */ LASSERT(!down_write_trylock(&mm->mmap_sem)); - for(vma = find_vma(mm, addr); + for (vma = find_vma(mm, addr); vma != NULL && vma->vm_start < (addr + count); vma = vma->vm_next) { if (vma->vm_ops && vma->vm_ops == &ll_file_vm_ops && vma->vm_flags & VM_SHARED) { @@ -181,12 +181,14 @@ static int ll_page_mkwrite0(struct vm_area_struct *vma, struct page *vmpage, LASSERT(vmpage != NULL); io = ll_fault_io_init(vma, &env, &nest, vmpage->index, NULL); - if (IS_ERR(io)) - GOTO(out, result = PTR_ERR(io)); + if (IS_ERR(io)) { + result = PTR_ERR(io); + goto out; + } result = io->ci_result; if (result < 0) - GOTO(out_io, result); + goto out_io; io->u.ci_fault.ft_mkwrite = 1; io->u.ci_fault.ft_writable = 1; @@ -261,7 +263,7 @@ out: static inline int to_fault_error(int result) { - switch(result) { + switch (result) { case 0: result = VM_FAULT_LOCKED; break; @@ -310,10 +312,16 @@ static int ll_fault0(struct vm_area_struct *vma, struct vm_fault *vmf) vio->u.fault.ft_vma = vma; vio->u.fault.ft_vmpage = NULL; vio->u.fault.fault.ft_vmf = vmf; + vio->u.fault.fault.ft_flags = 0; + vio->u.fault.fault.ft_flags_valid = 0; result = cl_io_loop(env, io); - fault_ret = vio->u.fault.fault.ft_flags; + /* ft_flags are only valid if we reached + * the call to filemap_fault */ + if (vio->u.fault.fault.ft_flags_valid) + fault_ret = vio->u.fault.fault.ft_flags; + vmpage = vio->u.fault.ft_vmpage; if (result != 0 && vmpage != NULL) { page_cache_release(vmpage); @@ -393,7 +401,7 @@ static int ll_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) } } while (retry); - switch(result) { + switch (result) { case 0: LASSERT(PageLocked(vmf->page)); result = VM_FAULT_LOCKED; @@ -420,7 +428,7 @@ static int ll_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) * To avoid cancel the locks covering mmapped region for lock cache pressure, * we track the mapped vma count in ccc_object::cob_mmap_cnt. */ -static void ll_vm_open(struct vm_area_struct * vma) +static void ll_vm_open(struct vm_area_struct *vma) { struct inode *inode = vma->vm_file->f_dentry->d_inode; struct ccc_object *vob = cl_inode2ccc(inode); @@ -466,7 +474,7 @@ static const struct vm_operations_struct ll_file_vm_ops = { .close = ll_vm_close, }; -int ll_file_mmap(struct file *file, struct vm_area_struct * vma) +int ll_file_mmap(struct file *file, struct vm_area_struct *vma) { struct inode *inode = file->f_dentry->d_inode; int rc; diff --git a/drivers/staging/lustre/lustre/llite/llite_nfs.c b/drivers/staging/lustre/lustre/llite/llite_nfs.c index 8fdd6e093d1a..ae3a12ab7fa1 100644 --- a/drivers/staging/lustre/lustre/llite/llite_nfs.c +++ b/drivers/staging/lustre/lustre/llite/llite_nfs.c @@ -106,8 +106,8 @@ struct inode *search_inode_for_lustre(struct super_block *sb, /* Because inode is NULL, ll_prep_md_op_data can not * be used here. So we allocate op_data ourselves */ - OBD_ALLOC_PTR(op_data); - if (op_data == NULL) + op_data = kzalloc(sizeof(*op_data), GFP_NOFS); + if (!op_data) return ERR_PTR(-ENOMEM); op_data->op_fid1 = *fid; @@ -236,11 +236,15 @@ static int ll_get_name(struct dentry *dentry, char *name, .ctx.actor = ll_nfs_get_name_filldir, }; - if (!dir || !S_ISDIR(dir->i_mode)) - GOTO(out, rc = -ENOTDIR); + if (!dir || !S_ISDIR(dir->i_mode)) { + rc = -ENOTDIR; + goto out; + } - if (!dir->i_fop) - GOTO(out, rc = -EINVAL); + if (!dir->i_fop) { + rc = -EINVAL; + goto out; + } mutex_lock(&dir->i_mutex); rc = ll_dir_read(dir, &lgd.ctx); diff --git a/drivers/staging/lustre/lustre/llite/llite_rmtacl.c b/drivers/staging/lustre/lustre/llite/llite_rmtacl.c index be0c3eff108c..586f49a374ec 100644 --- a/drivers/staging/lustre/lustre/llite/llite_rmtacl.c +++ b/drivers/staging/lustre/lustre/llite/llite_rmtacl.c @@ -58,7 +58,7 @@ static inline __u32 ee_hashfunc(uid_t id) return id & (EE_HASHES - 1); } -obd_valid rce_ops2valid(int ops) +u64 rce_ops2valid(int ops) { switch (ops) { case RMT_LSETFACL: @@ -78,7 +78,7 @@ static struct rmtacl_ctl_entry *rce_alloc(pid_t key, int ops) { struct rmtacl_ctl_entry *rce; - OBD_ALLOC_PTR(rce); + rce = kzalloc(sizeof(*rce), GFP_NOFS); if (!rce) return NULL; @@ -184,7 +184,7 @@ static struct eacl_entry *ee_alloc(pid_t key, struct lu_fid *fid, int type, { struct eacl_entry *ee; - OBD_ALLOC_PTR(ee); + ee = kzalloc(sizeof(*ee), GFP_NOFS); if (!ee) return NULL; diff --git a/drivers/staging/lustre/lustre/llite/lloop.c b/drivers/staging/lustre/lustre/llite/lloop.c index 808663898b73..264e5ec3fed6 100644 --- a/drivers/staging/lustre/lustre/llite/lloop.c +++ b/drivers/staging/lustre/lustre/llite/lloop.c @@ -126,7 +126,7 @@ struct lloop_device { struct block_device *lo_device; unsigned lo_blocksize; - int old_gfp_mask; + gfp_t old_gfp_mask; spinlock_t lo_lock; struct bio *lo_bio; @@ -192,7 +192,7 @@ static int do_bio_lustrebacked(struct lloop_device *lo, struct bio *head) pgoff_t offset; int ret; int rw; - obd_count page_count = 0; + u32 page_count = 0; struct bio_vec bvec; struct bvec_iter iter; struct bio *bio; @@ -409,8 +409,10 @@ static int loop_thread(void *data) lo->lo_state = LLOOP_BOUND; env = cl_env_get(&refcheck); - if (IS_ERR(env)) - GOTO(out, ret = PTR_ERR(env)); + if (IS_ERR(env)) { + ret = PTR_ERR(env); + goto out; + } lo->lo_env = env; memset(&lo->lo_pvec, 0, sizeof(lo->lo_pvec)); @@ -546,7 +548,7 @@ static int loop_clr_fd(struct lloop_device *lo, struct block_device *bdev, int count) { struct file *filp = lo->lo_backing_file; - int gfp = lo->old_gfp_mask; + gfp_t gfp = lo->old_gfp_mask; if (lo->lo_state != LLOOP_BOUND) return -ENXIO; @@ -670,8 +672,10 @@ static enum llioc_iter lloop_ioctl(struct inode *unused, struct file *file, if (magic != ll_iocontrol_magic) return LLIOC_CONT; - if (disks == NULL) - GOTO(out1, err = -ENODEV); + if (disks == NULL) { + err = -ENODEV; + goto out1; + } CWARN("Enter llop_ioctl\n"); @@ -692,19 +696,25 @@ static enum llioc_iter lloop_ioctl(struct inode *unused, struct file *file, file->f_dentry->d_inode) break; } - if (lo || !lo_free) - GOTO(out, err = -EBUSY); + if (lo || !lo_free) { + err = -EBUSY; + goto out; + } lo = lo_free; dev = MKDEV(lloop_major, lo->lo_number); /* quit if the used pointer is writable */ - if (put_user((long)old_encode_dev(dev), (long*)arg)) - GOTO(out, err = -EFAULT); + if (put_user((long)old_encode_dev(dev), (long *)arg)) { + err = -EFAULT; + goto out; + } bdev = blkdev_get_by_dev(dev, file->f_mode, NULL); - if (IS_ERR(bdev)) - GOTO(out, err = PTR_ERR(bdev)); + if (IS_ERR(bdev)) { + err = PTR_ERR(bdev); + goto out; + } get_file(file); err = loop_set_fd(lo, NULL, bdev, file); @@ -720,16 +730,22 @@ static enum llioc_iter lloop_ioctl(struct inode *unused, struct file *file, int minor; dev = old_decode_dev(arg); - if (MAJOR(dev) != lloop_major) - GOTO(out, err = -EINVAL); + if (MAJOR(dev) != lloop_major) { + err = -EINVAL; + goto out; + } minor = MINOR(dev); - if (minor > max_loop - 1) - GOTO(out, err = -EINVAL); + if (minor > max_loop - 1) { + err = -EINVAL; + goto out; + } lo = &loop_dev[minor]; - if (lo->lo_state != LLOOP_BOUND) - GOTO(out, err = -EINVAL); + if (lo->lo_state != LLOOP_BOUND) { + err = -EINVAL; + goto out; + } bdev = lo->lo_device; err = loop_clr_fd(lo, bdev, 1); @@ -777,11 +793,11 @@ static int __init lloop_init(void) if (ll_iocontrol_magic == NULL) goto out_mem1; - OBD_ALLOC_WAIT(loop_dev, max_loop * sizeof(*loop_dev)); + loop_dev = kzalloc(max_loop * sizeof(*loop_dev), GFP_KERNEL); if (!loop_dev) goto out_mem1; - OBD_ALLOC_WAIT(disks, max_loop * sizeof(*disks)); + disks = kzalloc(max_loop * sizeof(*disks), GFP_KERNEL); if (!disks) goto out_mem2; diff --git a/drivers/staging/lustre/lustre/llite/lproc_llite.c b/drivers/staging/lustre/lustre/llite/lproc_llite.c index 77f68b507fea..3b3df9f03422 100644 --- a/drivers/staging/lustre/lustre/llite/lproc_llite.c +++ b/drivers/staging/lustre/lustre/llite/lproc_llite.c @@ -410,7 +410,8 @@ static ssize_t ll_max_cached_mb_seq_write(struct file *file, /* easy - add more LRU slots. */ if (diff >= 0) { atomic_add(diff, &cache->ccc_lru_left); - GOTO(out, rc = 0); + rc = 0; + goto out; } diff = -diff; @@ -997,8 +998,10 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent, /* File operations stats */ sbi->ll_stats = lprocfs_alloc_stats(LPROC_LL_FILE_OPCODES, LPROCFS_STATS_FLAG_NONE); - if (sbi->ll_stats == NULL) - GOTO(out, err = -ENOMEM); + if (sbi->ll_stats == NULL) { + err = -ENOMEM; + goto out; + } /* do counter init */ for (id = 0; id < LPROC_LL_FILE_OPCODES; id++) { __u32 type = llite_opcode_table[id].type; @@ -1016,12 +1019,14 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent, } err = lprocfs_register_stats(sbi->ll_proc_root, "stats", sbi->ll_stats); if (err) - GOTO(out, err); + goto out; sbi->ll_ra_stats = lprocfs_alloc_stats(ARRAY_SIZE(ra_stat_string), LPROCFS_STATS_FLAG_NONE); - if (sbi->ll_ra_stats == NULL) - GOTO(out, err = -ENOMEM); + if (sbi->ll_ra_stats == NULL) { + err = -ENOMEM; + goto out; + } for (id = 0; id < ARRAY_SIZE(ra_stat_string); id++) lprocfs_counter_init(sbi->ll_ra_stats, id, 0, @@ -1029,12 +1034,12 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent, err = lprocfs_register_stats(sbi->ll_proc_root, "read_ahead_stats", sbi->ll_ra_stats); if (err) - GOTO(out, err); + goto out; err = lprocfs_add_vars(sbi->ll_proc_root, lprocfs_llite_obd_vars, sb); if (err) - GOTO(out, err); + goto out; /* MDC info */ obd = class_name2obd(mdc); @@ -1044,20 +1049,22 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent, LASSERT(obd->obd_type->typ_name != NULL); dir = proc_mkdir(obd->obd_type->typ_name, sbi->ll_proc_root); - if (dir == NULL) - GOTO(out, err = -ENOMEM); + if (dir == NULL) { + err = -ENOMEM; + goto out; + } snprintf(name, MAX_STRING_SIZE, "common_name"); lvars[0].fops = &llite_name_fops; err = lprocfs_add_vars(dir, lvars, obd); if (err) - GOTO(out, err); + goto out; snprintf(name, MAX_STRING_SIZE, "uuid"); lvars[0].fops = &llite_uuid_fops; err = lprocfs_add_vars(dir, lvars, obd); if (err) - GOTO(out, err); + goto out; /* OSC */ obd = class_name2obd(osc); @@ -1067,14 +1074,16 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent, LASSERT(obd->obd_type->typ_name != NULL); dir = proc_mkdir(obd->obd_type->typ_name, sbi->ll_proc_root); - if (dir == NULL) - GOTO(out, err = -ENOMEM); + if (dir == NULL) { + err = -ENOMEM; + goto out; + } snprintf(name, MAX_STRING_SIZE, "common_name"); lvars[0].fops = &llite_name_fops; err = lprocfs_add_vars(dir, lvars, obd); if (err) - GOTO(out, err); + goto out; snprintf(name, MAX_STRING_SIZE, "uuid"); lvars[0].fops = &llite_uuid_fops; @@ -1098,7 +1107,7 @@ void lprocfs_unregister_mountpoint(struct ll_sb_info *sbi) } #undef MAX_STRING_SIZE -#define pct(a,b) (b ? a * 100 / b : 0) +#define pct(a, b) (b ? a * 100 / b : 0) static void ll_display_extents_info(struct ll_rw_extents_info *io_extents, struct seq_file *seq, int which) @@ -1113,12 +1122,12 @@ static void ll_display_extents_info(struct ll_rw_extents_info *io_extents, write_cum = 0; start = 0; - for(i = 0; i < LL_HIST_MAX; i++) { + for (i = 0; i < LL_HIST_MAX; i++) { read_tot += pp_info->pp_r_hist.oh_buckets[i]; write_tot += pp_info->pp_w_hist.oh_buckets[i]; } - for(i = 0; i < LL_HIST_MAX; i++) { + for (i = 0; i < LL_HIST_MAX; i++) { r = pp_info->pp_r_hist.oh_buckets[i]; w = pp_info->pp_w_hist.oh_buckets[i]; read_cum += r; @@ -1305,15 +1314,15 @@ void ll_rw_stats_tally(struct ll_sb_info *sbi, pid_t pid, int *process_count = &sbi->ll_offset_process_count; struct ll_rw_extents_info *io_extents = &sbi->ll_rw_extents_info; - if(!sbi->ll_rw_stats_on) + if (!sbi->ll_rw_stats_on) return; process = sbi->ll_rw_process_info; offset = sbi->ll_rw_offset_info; spin_lock(&sbi->ll_pp_extent_lock); /* Extent statistics */ - for(i = 0; i < LL_PROCESS_HIST_MAX; i++) { - if(io_extents->pp_extents[i].pid == pid) { + for (i = 0; i < LL_PROCESS_HIST_MAX; i++) { + if (io_extents->pp_extents[i].pid == pid) { cur = i; break; } @@ -1376,9 +1385,9 @@ void ll_rw_stats_tally(struct ll_sb_info *sbi, pid_t pid, process[i].rw_offset = pos - process[i].rw_last_file_pos; } - if(process[i].rw_smallest_extent > count) + if (process[i].rw_smallest_extent > count) process[i].rw_smallest_extent = count; - if(process[i].rw_largest_extent < count) + if (process[i].rw_largest_extent < count) process[i].rw_largest_extent = count; process[i].rw_last_file_pos = pos + count; spin_unlock(&sbi->ll_process_lock); @@ -1421,7 +1430,7 @@ static int ll_rw_offset_stats_seq_show(struct seq_file *seq, void *v) "R/W", "PID", "RANGE START", "RANGE END", "SMALLEST EXTENT", "LARGEST EXTENT", "OFFSET"); /* We stored the discontiguous offsets here; print them first */ - for(i = 0; i < LL_OFFSET_HIST_MAX; i++) { + for (i = 0; i < LL_OFFSET_HIST_MAX; i++) { if (offset[i].rw_pid != 0) seq_printf(seq, "%3c %10d %14Lu %14Lu %17lu %17lu %14Lu", @@ -1434,7 +1443,7 @@ static int ll_rw_offset_stats_seq_show(struct seq_file *seq, void *v) offset[i].rw_offset); } /* Then print the current offsets for each process */ - for(i = 0; i < LL_PROCESS_HIST_MAX; i++) { + for (i = 0; i < LL_PROCESS_HIST_MAX; i++) { if (process[i].rw_pid != 0) seq_printf(seq, "%3c %10d %14Lu %14Lu %17lu %17lu %14Lu", diff --git a/drivers/staging/lustre/lustre/llite/namei.c b/drivers/staging/lustre/lustre/llite/namei.c index 0dc7173bbd41..7a68c1e027e0 100644 --- a/drivers/staging/lustre/lustre/llite/namei.c +++ b/drivers/staging/lustre/lustre/llite/namei.c @@ -523,8 +523,10 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry, rc = ll_statahead_enter(parent, &dentry, 0); if (rc == 1) { if (dentry == save) - GOTO(out, retval = NULL); - GOTO(out, retval = dentry); + retval = NULL; + else + retval = dentry; + goto out; } } @@ -546,13 +548,16 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry, rc = md_intent_lock(ll_i2mdexp(parent), op_data, NULL, 0, it, lookup_flags, &req, ll_md_blocking_ast, 0); ll_finish_md_op_data(op_data); - if (rc < 0) - GOTO(out, retval = ERR_PTR(rc)); + if (rc < 0) { + retval = ERR_PTR(rc); + goto out; + } rc = ll_lookup_it_finish(req, it, parent, &dentry); if (rc != 0) { ll_intent_release(it); - GOTO(out, retval = ERR_PTR(rc)); + retval = ERR_PTR(rc); + goto out; } if ((it->it_op & IT_OPEN) && dentry->d_inode && @@ -563,9 +568,10 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry, ll_lookup_finish_locks(it, dentry); if (dentry == save) - GOTO(out, retval = NULL); + retval = NULL; else - GOTO(out, retval = dentry); + retval = dentry; + goto out; out: if (req) ptlrpc_req_finished(req); @@ -618,7 +624,7 @@ static int ll_atomic_open(struct inode *dir, struct dentry *dentry, dentry->d_name.len, dentry->d_name.name, dir->i_ino, dir->i_generation, dir, file, open_flags, mode, *opened); - OBD_ALLOC(it, sizeof(*it)); + it = kzalloc(sizeof(*it), GFP_NOFS); if (!it) return -ENOMEM; @@ -697,8 +703,10 @@ static struct inode *ll_create_node(struct inode *dir, struct lookup_intent *it) request = it->d.lustre.it_data; it_clear_disposition(it, DISP_ENQ_CREATE_REF); rc = ll_prep_inode(&inode, request, dir->i_sb, it); - if (rc) - GOTO(out, inode = ERR_PTR(rc)); + if (rc) { + inode = ERR_PTR(rc); + goto out; + } LASSERT(ll_d_hlist_empty(&inode->i_dentry)); @@ -783,8 +791,10 @@ static int ll_new_node(struct inode *dir, struct qstr *name, op_data = ll_prep_md_op_data(NULL, dir, NULL, name->name, name->len, 0, opc, NULL); - if (IS_ERR(op_data)) - GOTO(err_exit, err = PTR_ERR(op_data)); + if (IS_ERR(op_data)) { + err = PTR_ERR(op_data); + goto err_exit; + } err = md_create(sbi->ll_md_exp, op_data, tgt, tgt_len, mode, from_kuid(&init_user_ns, current_fsuid()), @@ -792,14 +802,14 @@ static int ll_new_node(struct inode *dir, struct qstr *name, cfs_curproc_cap_pack(), rdev, &request); ll_finish_md_op_data(op_data); if (err) - GOTO(err_exit, err); + goto err_exit; ll_update_times(request, dir); if (dchild) { err = ll_prep_inode(&inode, request, dchild->d_sb, NULL); if (err) - GOTO(err_exit, err); + goto err_exit; d_instantiate(dchild, inode); } @@ -907,7 +917,7 @@ static int ll_link_generic(struct inode *src, struct inode *dir, err = md_link(sbi->ll_md_exp, op_data, &request); ll_finish_md_op_data(op_data); if (err) - GOTO(out, err); + goto out; ll_update_times(request, dir); ll_stats_ops_tally(sbi, LPROC_LL_LINK, 1); @@ -1028,7 +1038,8 @@ int ll_objects_destroy(struct ptlrpc_request *request, struct inode *dir) if (body->eadatasize == 0) { CERROR("OBD_MD_FLEASIZE set but eadatasize zero\n"); - GOTO(out, rc = -EPROTO); + rc = -EPROTO; + goto out; } /* The MDS sent back the EA because we unlinked the last reference @@ -1042,13 +1053,15 @@ int ll_objects_destroy(struct ptlrpc_request *request, struct inode *dir) rc = obd_unpackmd(ll_i2dtexp(dir), &lsm, eadata, body->eadatasize); if (rc < 0) { CERROR("obd_unpackmd: %d\n", rc); - GOTO(out, rc); + goto out; } LASSERT(rc >= sizeof(*lsm)); OBDO_ALLOC(oa); - if (oa == NULL) - GOTO(out_free_memmd, rc = -ENOMEM); + if (oa == NULL) { + rc = -ENOMEM; + goto out_free_memmd; + } oa->o_oi = lsm->lsm_oi; oa->o_mode = body->mode & S_IFMT; @@ -1070,7 +1083,7 @@ int ll_objects_destroy(struct ptlrpc_request *request, struct inode *dir) if (body->valid & OBD_MD_FLOSSCAPA) { rc = md_unpack_capa(ll_i2mdexp(dir), request, &RMF_CAPA2, &oc); if (rc) - GOTO(out_free_memmd, rc); + goto out_free_memmd; } rc = obd_destroy(NULL, ll_i2dtexp(dir), oa, lsm, &oti, @@ -1116,7 +1129,7 @@ static int ll_unlink_generic(struct inode *dir, struct dentry *dparent, rc = md_unlink(ll_i2sbi(dir)->ll_md_exp, op_data, &request); ll_finish_md_op_data(op_data); if (rc) - GOTO(out, rc); + goto out; ll_update_times(request, dir); ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_UNLINK, 1); @@ -1137,7 +1150,8 @@ static int ll_rename_generic(struct inode *src, struct dentry *src_dparent, struct md_op_data *op_data; int err; - CDEBUG(D_VFSTRACE,"VFS Op:oldname=%.*s,src_dir=%lu/%u(%p),newname=%.*s," + CDEBUG(D_VFSTRACE, + "VFS Op:oldname=%.*s,src_dir=%lu/%u(%p),newname=%.*s," "tgt_dir=%lu/%u(%p)\n", src_name->len, src_name->name, src->i_ino, src->i_generation, src, tgt_name->len, tgt_name->name, tgt->i_ino, tgt->i_generation, tgt); diff --git a/drivers/staging/lustre/lustre/llite/remote_perm.c b/drivers/staging/lustre/lustre/llite/remote_perm.c index f61fefc9baf0..c05a9126cfe3 100644 --- a/drivers/staging/lustre/lustre/llite/remote_perm.c +++ b/drivers/staging/lustre/lustre/llite/remote_perm.c @@ -100,7 +100,7 @@ void free_rmtperm_hash(struct hlist_head *hash) struct ll_remote_perm *lrp; struct hlist_node *next; - if(!hash) + if (!hash) return; for (i = 0; i < REMOTE_PERM_HASHSIZE; i++) @@ -144,8 +144,10 @@ static int do_check_remote_perm(struct ll_inode_info *lli, int mask) break; } - if (!found) - GOTO(out, rc = -ENOENT); + if (!found) { + rc = -ENOENT; + goto out; + } CDEBUG(D_SEC, "found remote perm: %u/%u/%u/%u - %#x\n", lrp->lrp_uid, lrp->lrp_gid, lrp->lrp_fsuid, lrp->lrp_fsgid, diff --git a/drivers/staging/lustre/lustre/llite/rw.c b/drivers/staging/lustre/lustre/llite/rw.c index ecd7a229cf9b..1f53b9863385 100644 --- a/drivers/staging/lustre/lustre/llite/rw.c +++ b/drivers/staging/lustre/lustre/llite/rw.c @@ -317,8 +317,10 @@ static unsigned long ll_ra_count_get(struct ll_sb_info *sbi, * otherwise it will form small read RPC(< 1M), which hurt server * performance a lot. */ ret = min(ra->ra_max_pages - atomic_read(&ra->ra_cur_pages), pages); - if (ret < 0 || ret < min_t(long, PTLRPC_MAX_BRW_PAGES, pages)) - GOTO(out, ret = 0); + if (ret < 0 || ret < min_t(long, PTLRPC_MAX_BRW_PAGES, pages)) { + ret = 0; + goto out; + } /* If the non-strided (ria_pages == 0) readahead window * (ria_start + ret) has grown across an RPC boundary, then trim @@ -1018,7 +1020,7 @@ void ras_update(struct ll_sb_info *sbi, struct inode *inode, ras->ras_next_readahead = 0; ras->ras_window_len = min(ra->ra_max_pages_per_file, ra->ra_max_read_ahead_whole_pages); - GOTO(out_unlock, 0); + goto out_unlock; } } if (zero) { @@ -1033,7 +1035,7 @@ void ras_update(struct ll_sb_info *sbi, struct inode *inode, } ras_reset(inode, ras, index); ras->ras_consecutive_pages++; - GOTO(out_unlock, 0); + goto out_unlock; } else { ras->ras_consecutive_pages = 0; ras->ras_consecutive_requests = 0; @@ -1058,7 +1060,7 @@ void ras_update(struct ll_sb_info *sbi, struct inode *inode, ras_reset(inode, ras, index); ras->ras_consecutive_pages++; ras_stride_reset(ras); - GOTO(out_unlock, 0); + goto out_unlock; } } else if (stride_io_mode(ras)) { /* If this is contiguous read but in stride I/O mode @@ -1090,7 +1092,7 @@ void ras_update(struct ll_sb_info *sbi, struct inode *inode, * is not incremented and thus can't be used to trigger RA */ if (!ras->ras_window_len && ras->ras_consecutive_pages == 4) { ras->ras_window_len = RAS_INCREASE_STEP(inode); - GOTO(out_unlock, 0); + goto out_unlock; } /* Initially reset the stride window offset to next_readahead*/ @@ -1136,8 +1138,10 @@ int ll_writepage(struct page *vmpage, struct writeback_control *wbc) LASSERT(ll_i2dtexp(inode) != NULL); env = cl_env_nested_get(&nest); - if (IS_ERR(env)) - GOTO(out, result = PTR_ERR(env)); + if (IS_ERR(env)) { + result = PTR_ERR(env); + goto out; + } clob = ll_i2info(inode)->lli_clob; LASSERT(clob != NULL); @@ -1197,7 +1201,7 @@ int ll_writepage(struct page *vmpage, struct writeback_control *wbc) } cl_env_nested_put(&nest, env); - GOTO(out, result); + goto out; out: if (result < 0) { diff --git a/drivers/staging/lustre/lustre/llite/rw26.c b/drivers/staging/lustre/lustre/llite/rw26.c index 3f157e76a15c..4c77ae8b9350 100644 --- a/drivers/staging/lustre/lustre/llite/rw26.c +++ b/drivers/staging/lustre/lustre/llite/rw26.c @@ -436,12 +436,12 @@ static ssize_t ll_direct_IO_26(int rw, struct kiocb *iocb, size = ((((size / 2) - 1) | ~CFS_PAGE_MASK) + 1) & CFS_PAGE_MASK; - CDEBUG(D_VFSTRACE,"DIO size now %lu\n", + CDEBUG(D_VFSTRACE, "DIO size now %lu\n", size); continue; } - GOTO(out, result); + goto out; } iov_iter_advance(iter, result); tot_bytes += result; diff --git a/drivers/staging/lustre/lustre/llite/statahead.c b/drivers/staging/lustre/lustre/llite/statahead.c index c39cf8d47d6e..06b71bcf97a7 100644 --- a/drivers/staging/lustre/lustre/llite/statahead.c +++ b/drivers/staging/lustre/lustre/llite/statahead.c @@ -202,8 +202,8 @@ ll_sa_entry_alloc(struct ll_statahead_info *sai, __u64 index, char *dname; entry_size = sizeof(struct ll_sa_entry) + (len & ~3) + 4; - OBD_ALLOC(entry, entry_size); - if (unlikely(entry == NULL)) + entry = kzalloc(entry_size, GFP_NOFS); + if (unlikely(!entry)) return ERR_PTR(-ENOMEM); CDEBUG(D_READA, "alloc sa entry %.*s(%p) index %llu\n", @@ -465,7 +465,7 @@ static struct ll_statahead_info *ll_sai_alloc(void) struct ll_statahead_info *sai; int i; - OBD_ALLOC_PTR(sai); + sai = kzalloc(sizeof(*sai), GFP_NOFS); if (!sai) return NULL; @@ -528,7 +528,7 @@ static void ll_sai_put(struct ll_statahead_info *sai) spin_unlock(&lli->lli_sa_lock); if (sai->sai_sent > sai->sai_replied) - CDEBUG(D_READA,"statahead for dir "DFID + CDEBUG(D_READA, "statahead for dir "DFID " does not finish: [sent:%llu] [replied:%llu]\n", PFID(&lli->lli_fid), sai->sai_sent, sai->sai_replied); @@ -637,8 +637,10 @@ static void ll_post_statahead(struct ll_statahead_info *sai) it = &minfo->mi_it; req = entry->se_req; body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY); - if (body == NULL) - GOTO(out, rc = -EFAULT); + if (body == NULL) { + rc = -EFAULT; + goto out; + } child = entry->se_inode; if (child == NULL) { @@ -649,8 +651,10 @@ static void ll_post_statahead(struct ll_statahead_info *sai) /* XXX: No fid in reply, this is probably cross-ref case. * SA can't handle it yet. */ - if (body->valid & OBD_MD_MDS) - GOTO(out, rc = -EAGAIN); + if (body->valid & OBD_MD_MDS) { + rc = -EAGAIN; + goto out; + } } else { /* * revalidate. @@ -665,12 +669,14 @@ static void ll_post_statahead(struct ll_statahead_info *sai) it->d.lustre.it_lock_handle = entry->se_handle; rc = md_revalidate_lock(ll_i2mdexp(dir), it, ll_inode2fid(dir), NULL); - if (rc != 1) - GOTO(out, rc = -EAGAIN); + if (rc != 1) { + rc = -EAGAIN; + goto out; + } rc = ll_prep_inode(&child, req, dir->i_sb, it); if (rc) - GOTO(out, rc); + goto out; CDEBUG(D_DLMTRACE, "setting l_data to inode %p (%lu/%u)\n", child, child->i_ino, child->i_generation); @@ -711,20 +717,23 @@ static int ll_statahead_interpret(struct ptlrpc_request *req, if (unlikely(lli->lli_sai == NULL || lli->lli_sai->sai_generation != minfo->mi_generation)) { spin_unlock(&lli->lli_sa_lock); - GOTO(out, rc = -ESTALE); + rc = -ESTALE; + goto out; } else { sai = ll_sai_get(lli->lli_sai); if (unlikely(!thread_is_running(&sai->sai_thread))) { sai->sai_replied++; spin_unlock(&lli->lli_sa_lock); - GOTO(out, rc = -EBADFD); + rc = -EBADFD; + goto out; } entry = ll_sa_entry_get_byindex(sai, minfo->mi_cbdata); if (entry == NULL) { sai->sai_replied++; spin_unlock(&lli->lli_sa_lock); - GOTO(out, rc = -EIDRM); + rc = -EIDRM; + goto out; } if (rc != 0) { @@ -793,12 +802,12 @@ static int sa_args_init(struct inode *dir, struct inode *child, struct ldlm_enqueue_info *einfo; struct md_op_data *op_data; - OBD_ALLOC_PTR(einfo); - if (einfo == NULL) + einfo = kzalloc(sizeof(*einfo), GFP_NOFS); + if (!einfo) return -ENOMEM; - OBD_ALLOC_PTR(minfo); - if (minfo == NULL) { + minfo = kzalloc(sizeof(*minfo), GFP_NOFS); + if (!minfo) { OBD_FREE_PTR(einfo); return -ENOMEM; } @@ -878,7 +887,8 @@ static int do_sa_revalidate(struct inode *dir, struct ll_sa_entry *entry, return 1; entry->se_inode = igrab(inode); - rc = md_revalidate_lock(ll_i2mdexp(dir), &it, ll_inode2fid(inode),NULL); + rc = md_revalidate_lock(ll_i2mdexp(dir), &it, ll_inode2fid(inode), + NULL); if (rc == 1) { entry->se_handle = it.d.lustre.it_lock_handle; ll_intent_release(&it); @@ -1084,7 +1094,7 @@ static int ll_statahead_thread(void *arg) CDEBUG(D_READA, "error reading dir "DFID" at %llu/%llu: [rc %d] [parent %u]\n", PFID(ll_inode2fid(dir)), pos, sai->sai_index, rc, plli->lli_opendir_pid); - GOTO(out, rc); + goto out; } dp = page_address(page); @@ -1149,7 +1159,8 @@ interpret_it: if (unlikely(!thread_is_running(thread))) { ll_release_page(page, 0); - GOTO(out, rc = 0); + rc = 0; + goto out; } /* If no window for metadata statahead, but there are @@ -1170,7 +1181,8 @@ interpret_it: if (unlikely( !thread_is_running(thread))) { ll_release_page(page, 0); - GOTO(out, rc = 0); + rc = 0; + goto out; } if (!sa_sent_full(sai)) @@ -1202,8 +1214,10 @@ do_it: while (!sa_received_empty(sai)) ll_post_statahead(sai); - if (unlikely(!thread_is_running(thread))) - GOTO(out, rc = 0); + if (unlikely(!thread_is_running(thread))) { + rc = 0; + goto out; + } if (sai->sai_sent == sai->sai_replied && sa_received_empty(sai)) @@ -1221,7 +1235,8 @@ do_it: } spin_unlock(&plli->lli_agl_lock); - GOTO(out, rc = 0); + rc = 0; + goto out; } else if (1) { /* * chain is exhausted. @@ -1421,7 +1436,7 @@ static int is_first_dirent(struct inode *dir, struct dentry *dentry) rc = LS_FIRST_DOT_DE; ll_release_page(page, 0); - GOTO(out, rc); + goto out; } pos = le64_to_cpu(dp->ldp_hash_end); if (pos == MDS_DIR_END_OFF) { @@ -1625,20 +1640,25 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp, /* I am the "lli_opendir_pid" owner, only me can set "lli_sai". */ rc = is_first_dirent(dir, *dentryp); - if (rc == LS_NONE_FIRST_DE) + if (rc == LS_NONE_FIRST_DE) { /* It is not "ls -{a}l" operation, no need statahead for it. */ - GOTO(out, rc = -EAGAIN); + rc = -EAGAIN; + goto out; + } sai = ll_sai_alloc(); - if (sai == NULL) - GOTO(out, rc = -ENOMEM); + if (sai == NULL) { + rc = -ENOMEM; + goto out; + } sai->sai_ls_all = (rc == LS_FIRST_DOT_DE); sai->sai_inode = igrab(dir); if (unlikely(sai->sai_inode == NULL)) { CWARN("Do not start stat ahead on dying inode "DFID"\n", PFID(&lli->lli_fid)); - GOTO(out, rc = -ESTALE); + rc = -ESTALE; + goto out; } /* get parent reference count here, and put it in ll_statahead_thread */ @@ -1652,7 +1672,8 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp, PFID(&lli->lli_fid), PFID(&nlli->lli_fid)); dput(parent); iput(sai->sai_inode); - GOTO(out, rc = -EAGAIN); + rc = -EAGAIN; + goto out; } CDEBUG(D_READA, "start statahead thread: sai %p, parent %.*s\n", diff --git a/drivers/staging/lustre/lustre/llite/super25.c b/drivers/staging/lustre/lustre/llite/super25.c index 078c0e95f4cf..e61dbed120a3 100644 --- a/drivers/staging/lustre/lustre/llite/super25.c +++ b/drivers/staging/lustre/lustre/llite/super25.c @@ -88,8 +88,7 @@ static void ll_destroy_inodecache(void) } /* exported operations */ -struct super_operations lustre_super_operations = -{ +struct super_operations lustre_super_operations = { .alloc_inode = ll_alloc_inode, .destroy_inode = ll_destroy_inode, .evict_inode = ll_delete_inode, diff --git a/drivers/staging/lustre/lustre/llite/symlink.c b/drivers/staging/lustre/lustre/llite/symlink.c index 20e678b31c7b..eccd3a717a4d 100644 --- a/drivers/staging/lustre/lustre/llite/symlink.c +++ b/drivers/staging/lustre/lustre/llite/symlink.c @@ -77,21 +77,23 @@ static int ll_readlink_internal(struct inode *inode, if (rc) { if (rc != -ENOENT) CERROR("inode %lu: rc = %d\n", inode->i_ino, rc); - GOTO (failed, rc); + goto failed; } body = req_capsule_server_get(&(*request)->rq_pill, &RMF_MDT_BODY); LASSERT(body != NULL); if ((body->valid & OBD_MD_LINKNAME) == 0) { CERROR("OBD_MD_LINKNAME not set on reply\n"); - GOTO(failed, rc = -EPROTO); + rc = -EPROTO; + goto failed; } LASSERT(symlen != 0); if (body->eadatasize != symlen) { CERROR("inode %lu: symlink length %d not expected %d\n", inode->i_ino, body->eadatasize - 1, symlen - 1); - GOTO(failed, rc = -EPROTO); + rc = -EPROTO; + goto failed; } *symname = req_capsule_server_get(&(*request)->rq_pill, &RMF_MDT_MD); @@ -100,10 +102,11 @@ static int ll_readlink_internal(struct inode *inode, /* not full/NULL terminated */ CERROR("inode %lu: symlink not NULL terminated string" "of length %d\n", inode->i_ino, symlen - 1); - GOTO(failed, rc = -EPROTO); + rc = -EPROTO; + goto failed; } - OBD_ALLOC(lli->lli_symlink_name, symlen); + lli->lli_symlink_name = kzalloc(symlen, GFP_NOFS); /* do not return an error if we cannot cache the symlink locally */ if (lli->lli_symlink_name) { memcpy(lli->lli_symlink_name, *symname, symlen); diff --git a/drivers/staging/lustre/lustre/llite/vvp_dev.c b/drivers/staging/lustre/lustre/llite/vvp_dev.c index 0f2e79d6b7f8..5a1078a4198d 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_dev.c +++ b/drivers/staging/lustre/lustre/llite/vvp_dev.c @@ -394,7 +394,7 @@ static loff_t vvp_pgcache_find(const struct lu_env *env, seq_printf(seq, "%s"#flag, has_flags ? "|" : ""); \ has_flags = 1; \ } \ -} while(0) +} while (0) static void vvp_pgcache_page_show(const struct lu_env *env, struct seq_file *seq, struct cl_page *page) @@ -405,7 +405,7 @@ static void vvp_pgcache_page_show(const struct lu_env *env, cpg = cl2ccc_page(cl_page_at(page, &vvp_device_type)); vmpage = cpg->cpg_page; - seq_printf(seq," %5i | %p %p %s %s %s %s | %p %lu/%u(%p) %lu %u [", + seq_printf(seq, " %5i | %p %p %s %s %s %s | %p %lu/%u(%p) %lu %u [", 0 /* gen */, cpg, page, "none", diff --git a/drivers/staging/lustre/lustre/llite/vvp_io.c b/drivers/staging/lustre/lustre/llite/vvp_io.c index a4117d6a3866..d3f967a78138 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_io.c +++ b/drivers/staging/lustre/lustre/llite/vvp_io.c @@ -238,7 +238,7 @@ static int vvp_mmap_locks(const struct lu_env *env, addr &= CFS_PAGE_MASK; down_read(&mm->mmap_sem); - while((vma = our_vma(mm, addr, count)) != NULL) { + while ((vma = our_vma(mm, addr, count)) != NULL) { struct inode *inode = vma->vm_file->f_dentry->d_inode; int flags = CEF_MUST; @@ -615,6 +615,7 @@ static int vvp_io_kernel_fault(struct vvp_fault_io *cfio) struct vm_fault *vmf = cfio->fault.ft_vmf; cfio->fault.ft_flags = filemap_fault(cfio->ft_vma, vmf); + cfio->fault.ft_flags_valid = 1; if (vmf->page) { CDEBUG(D_PAGE, @@ -703,7 +704,8 @@ static int vvp_io_fault_start(const struct lu_env *env, /* return +1 to stop cl_io_loop() and ll_fault() will catch * and retry. */ - GOTO(out, result = +1); + result = +1; + goto out; } @@ -720,7 +722,7 @@ static int vvp_io_fault_start(const struct lu_env *env, CDEBUG(D_PAGE, "llite: mkwrite and truncate race happened: " "%p: 0x%lx 0x%lx\n", - vmpage->mapping,fio->ft_index,last_index); + vmpage->mapping, fio->ft_index, last_index); /* * We need to return if we are * passed the end of the file. This will propagate @@ -732,13 +734,16 @@ static int vvp_io_fault_start(const struct lu_env *env, * in ll_page_mkwrite0. Thus we return -ENODATA * to handle both cases */ - GOTO(out, result = -ENODATA); + result = -ENODATA; + goto out; } } page = cl_page_find(env, obj, fio->ft_index, vmpage, CPT_CACHEABLE); - if (IS_ERR(page)) - GOTO(out, result = PTR_ERR(page)); + if (IS_ERR(page)) { + result = PTR_ERR(page); + goto out; + } /* if page is going to be written, we should add this page into cache * earlier. */ @@ -770,7 +775,7 @@ static int vvp_io_fault_start(const struct lu_env *env, /* we're in big trouble, what can we do now? */ if (result == -EDQUOT) result = -ENOSPC; - GOTO(out, result); + goto out; } else cl_page_disown(env, io, page); } diff --git a/drivers/staging/lustre/lustre/llite/xattr.c b/drivers/staging/lustre/lustre/llite/xattr.c index 665ca572027f..252a6194ed9b 100644 --- a/drivers/staging/lustre/lustre/llite/xattr.c +++ b/drivers/staging/lustre/lustre/llite/xattr.c @@ -364,7 +364,7 @@ do_getxattr: if (rc == -EAGAIN) goto getxattr_nocache; if (rc < 0) - GOTO(out_xattr, rc); + goto out_xattr; /* Add "system.posix_acl_access" to the list */ if (lli->lli_posix_acl != NULL && valid & OBD_MD_FLXATTRLS) { @@ -375,7 +375,8 @@ do_getxattr: sizeof(XATTR_NAME_ACL_ACCESS)); rc += sizeof(XATTR_NAME_ACL_ACCESS); } else { - GOTO(out_xattr, rc = -ERANGE); + rc = -ERANGE; + goto out_xattr; } } } else { @@ -387,29 +388,36 @@ getxattr_nocache: capa_put(oc); if (rc < 0) - GOTO(out_xattr, rc); + goto out_xattr; body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY); LASSERT(body); /* only detect the xattr size */ - if (size == 0) - GOTO(out, rc = body->eadatasize); + if (size == 0) { + rc = body->eadatasize; + goto out; + } if (size < body->eadatasize) { CERROR("server bug: replied size %u > %u\n", body->eadatasize, (int)size); - GOTO(out, rc = -ERANGE); + rc = -ERANGE; + goto out; } - if (body->eadatasize == 0) - GOTO(out, rc = -ENODATA); + if (body->eadatasize == 0) { + rc = -ENODATA; + goto out; + } /* do not need swab xattr data */ xdata = req_capsule_server_sized_get(&req->rq_pill, &RMF_EADATA, body->eadatasize); - if (!xdata) - GOTO(out, rc = -EFAULT); + if (!xdata) { + rc = -EFAULT; + goto out; + } memcpy(buffer, xdata, body->eadatasize); rc = body->eadatasize; @@ -421,14 +429,16 @@ getxattr_nocache: acl = lustre_posix_acl_xattr_2ext( (posix_acl_xattr_header *)buffer, rc); - if (IS_ERR(acl)) - GOTO(out, rc = PTR_ERR(acl)); + if (IS_ERR(acl)) { + rc = PTR_ERR(acl); + goto out; + } rc = ee_add(&sbi->ll_et, current_pid(), ll_inode2fid(inode), xattr_type, acl); if (unlikely(rc < 0)) { lustre_ext_acl_xattr_free(acl); - GOTO(out, rc); + goto out; } } #endif @@ -476,7 +486,8 @@ ssize_t ll_getxattr(struct dentry *dentry, const char *name, if (size == 0 && S_ISDIR(inode->i_mode)) { /* XXX directory EA is fix for now, optimize to save * RPC transfer */ - GOTO(out, rc = sizeof(struct lov_user_md)); + rc = sizeof(struct lov_user_md); + goto out; } lsm = ccc_inode_lsm_get(inode); @@ -496,7 +507,7 @@ ssize_t ll_getxattr(struct dentry *dentry, const char *name, ccc_inode_lsm_put(inode, lsm); if (rc < 0) - GOTO(out, rc); + goto out; if (size == 0) { /* used to call ll_get_max_mdsize() forward to get @@ -504,13 +515,14 @@ ssize_t ll_getxattr(struct dentry *dentry, const char *name, * rsync 3.0.x) care much about the exact xattr value * size */ rc = lmmsize; - GOTO(out, rc); + goto out; } if (size < lmmsize) { CERROR("server bug: replied size %d > %d for %s (%s)\n", lmmsize, (int)size, dentry->d_name.name, name); - GOTO(out, rc = -ERANGE); + rc = -ERANGE; + goto out; } lump = (struct lov_user_md *)buffer; @@ -526,7 +538,7 @@ out: ptlrpc_req_finished(request); else if (lmm) obd_free_diskmd(ll_i2dtexp(inode), &lmm); - return(rc); + return rc; } return ll_getxattr_common(inode, name, buffer, size, OBD_MD_FLXATTR); @@ -549,7 +561,7 @@ ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size) rc = ll_getxattr_common(inode, NULL, buffer, size, OBD_MD_FLXATTRLS); if (rc < 0) - GOTO(out, rc); + goto out; if (buffer != NULL) { struct ll_sb_info *sbi = ll_i2sbi(inode); @@ -582,7 +594,8 @@ ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size) } if (rc2 < 0) { - GOTO(out, rc2 = 0); + rc2 = 0; + goto out; } else if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)) { const int prefix_len = sizeof(XATTR_LUSTRE_PREFIX) - 1; const size_t name_len = sizeof("lov") - 1; diff --git a/drivers/staging/lustre/lustre/llite/xattr_cache.c b/drivers/staging/lustre/lustre/llite/xattr_cache.c index edec945d2eb3..627cbe242f22 100644 --- a/drivers/staging/lustre/lustre/llite/xattr_cache.c +++ b/drivers/staging/lustre/lustre/llite/xattr_cache.c @@ -128,13 +128,13 @@ static int ll_xattr_cache_add(struct list_head *cache, xattr->xe_namelen = strlen(xattr_name) + 1; - OBD_ALLOC(xattr->xe_name, xattr->xe_namelen); + xattr->xe_name = kzalloc(xattr->xe_namelen, GFP_NOFS); if (!xattr->xe_name) { CDEBUG(D_CACHE, "failed to alloc xattr name %u\n", xattr->xe_namelen); goto err_name; } - OBD_ALLOC(xattr->xe_value, xattr_val_len); + xattr->xe_value = kzalloc(xattr_val_len, GFP_NOFS); if (!xattr->xe_value) { CDEBUG(D_CACHE, "failed to alloc xattr value %d\n", xattr_val_len); @@ -365,18 +365,20 @@ static int ll_xattr_cache_refill(struct inode *inode, struct lookup_intent *oit) rc = ll_xattr_find_get_lock(inode, oit, &req); if (rc) - GOTO(out_no_unlock, rc); + goto out_no_unlock; /* Do we have the data at this point? */ if (ll_xattr_cache_valid(lli)) { ll_stats_ops_tally(sbi, LPROC_LL_GETXATTR_HITS, 1); - GOTO(out_maybe_drop, rc = 0); + rc = 0; + goto out_maybe_drop; } /* Matched but no cache? Cancelled on error by a parallel refill. */ if (unlikely(req == NULL)) { CDEBUG(D_CACHE, "cancelled by a parallel getxattr\n"); - GOTO(out_maybe_drop, rc = -EIO); + rc = -EIO; + goto out_maybe_drop; } if (oit->d.lustre.it_status < 0) { @@ -386,13 +388,14 @@ static int ll_xattr_cache_refill(struct inode *inode, struct lookup_intent *oit) /* xattr data is so large that we don't want to cache it */ if (rc == -ERANGE) rc = -EAGAIN; - GOTO(out_destroy, rc); + goto out_destroy; } body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY); if (body == NULL) { CERROR("no MDT BODY in the refill xattr reply\n"); - GOTO(out_destroy, rc = -EPROTO); + rc = -EPROTO; + goto out_destroy; } /* do not need swab xattr data */ xdata = req_capsule_server_sized_get(&req->rq_pill, &RMF_EADATA, @@ -403,7 +406,8 @@ static int ll_xattr_cache_refill(struct inode *inode, struct lookup_intent *oit) body->max_mdsize * sizeof(__u32)); if (xdata == NULL || xval == NULL || xsizes == NULL) { CERROR("wrong setxattr reply\n"); - GOTO(out_destroy, rc = -EPROTO); + rc = -EPROTO; + goto out_destroy; } xtail = xdata + body->eadatasize; @@ -435,7 +439,7 @@ static int ll_xattr_cache_refill(struct inode *inode, struct lookup_intent *oit) } if (rc < 0) { ll_xattr_cache_destroy_locked(lli); - GOTO(out_destroy, rc); + goto out_destroy; } xdata += strlen(xdata) + 1; xval += *xsizes; @@ -447,7 +451,7 @@ static int ll_xattr_cache_refill(struct inode *inode, struct lookup_intent *oit) ll_set_lock_data(sbi->ll_md_exp, inode, oit, NULL); - GOTO(out_maybe_drop, rc); + goto out_maybe_drop; out_maybe_drop: ll_intent_drop_lock(oit); @@ -528,7 +532,7 @@ int ll_xattr_cache_get(struct inode *inode, size ? buffer : NULL, size); } - GOTO(out, rc); + goto out; out: up_read(&lli->lli_xattrs_list_rwsem); diff --git a/drivers/staging/lustre/lustre/lmv/lmv_fld.c b/drivers/staging/lustre/lustre/lmv/lmv_fld.c index 8289bcc5f8e1..e8421f04beda 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_fld.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_fld.c @@ -53,7 +53,7 @@ int lmv_fld_lookup(struct lmv_obd *lmv, const struct lu_fid *fid, - mdsno_t *mds) + u32 *mds) { int rc; diff --git a/drivers/staging/lustre/lustre/lmv/lmv_intent.c b/drivers/staging/lustre/lustre/lmv/lmv_intent.c index aba698f4489c..5106124b7d92 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_intent.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_intent.c @@ -41,7 +41,7 @@ #include <asm/div64.h> #include <linux/seq_file.h> #include <linux/namei.h> -#include "../include/linux/lustre_intent.h" +#include "../include/lustre_intent.h" #include "../include/obd_support.h" #include "../include/lustre/lustre_idl.h" #include "../include/lustre_lib.h" @@ -94,12 +94,16 @@ static int lmv_intent_remote(struct obd_export *exp, void *lmm, LASSERT(fid_is_sane(&body->fid1)); tgt = lmv_find_target(lmv, &body->fid1); - if (IS_ERR(tgt)) - GOTO(out, rc = PTR_ERR(tgt)); + if (IS_ERR(tgt)) { + rc = PTR_ERR(tgt); + goto out; + } OBD_ALLOC_PTR(op_data); - if (op_data == NULL) - GOTO(out, rc = -ENOMEM); + if (op_data == NULL) { + rc = -ENOMEM; + goto out; + } op_data->op_fid1 = body->fid1; /* Sent the parent FID to the remote MDT */ @@ -121,7 +125,7 @@ static int lmv_intent_remote(struct obd_export *exp, void *lmm, rc = md_intent_lock(tgt->ltd_exp, op_data, lmm, lmmsize, it, flags, &req, cb_blocking, extra_lock_flags); if (rc) - GOTO(out_free_op_data, rc); + goto out_free_op_data; /* * LLite needs LOOKUP lock to track dentry revocation in order to diff --git a/drivers/staging/lustre/lustre/lmv/lmv_internal.h b/drivers/staging/lustre/lustre/lmv/lmv_internal.h index eb18a5900e13..b911e7643874 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_internal.h +++ b/drivers/staging/lustre/lustre/lmv/lmv_internal.h @@ -70,10 +70,8 @@ int lmv_intent_open(struct obd_export *exp, struct md_op_data *op_data, int lmv_blocking_ast(struct ldlm_lock *, struct ldlm_lock_desc *, void *, int); -int lmv_fld_lookup(struct lmv_obd *lmv, const struct lu_fid *fid, - mdsno_t *mds); -int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid *fid, - mdsno_t mds); +int lmv_fld_lookup(struct lmv_obd *lmv, const struct lu_fid *fid, u32 *mds); +int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid *fid, u32 mds); int lmv_fid_alloc(struct obd_export *exp, struct lu_fid *fid, struct md_op_data *op_data); @@ -95,7 +93,7 @@ static inline struct lmv_stripe_md *lmv_get_mea(struct ptlrpc_request *req) if (mea->mea_count == 0) return NULL; - if( mea->mea_magic != MEA_MAGIC_LAST_CHAR && + if (mea->mea_magic != MEA_MAGIC_LAST_CHAR && mea->mea_magic != MEA_MAGIC_ALL_CHARS && mea->mea_magic != MEA_MAGIC_HASH_SEGMENT) return NULL; @@ -111,7 +109,7 @@ static inline int lmv_get_easize(struct lmv_obd *lmv) } static inline struct lmv_tgt_desc * -lmv_get_target(struct lmv_obd *lmv, mdsno_t mds) +lmv_get_target(struct lmv_obd *lmv, u32 mds) { int count = lmv->desc.ld_tgt_count; int i; @@ -130,7 +128,7 @@ lmv_get_target(struct lmv_obd *lmv, mdsno_t mds) static inline struct lmv_tgt_desc * lmv_find_target(struct lmv_obd *lmv, const struct lu_fid *fid) { - mdsno_t mds = 0; + u32 mds = 0; int rc; if (lmv->desc.ld_tgt_count > 1) { @@ -146,7 +144,7 @@ struct lmv_tgt_desc *lmv_locate_mds(struct lmv_obd *lmv, struct md_op_data *op_data, struct lu_fid *fid); /* lproc_lmv.c */ -#if defined (CONFIG_PROC_FS) +#if defined(CONFIG_PROC_FS) void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars); #else static inline void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars) diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c b/drivers/staging/lustre/lustre/lmv/lmv_obd.c index a66b3e000d57..1a5821289c39 100644 --- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c +++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c @@ -97,12 +97,16 @@ static int lmv_set_mdc_active(struct lmv_obd *lmv, struct obd_uuid *uuid, break; } - if (i == lmv->desc.ld_tgt_count) - GOTO(out_lmv_lock, rc = -EINVAL); + if (i == lmv->desc.ld_tgt_count) { + rc = -EINVAL; + goto out_lmv_lock; + } obd = class_exp2obd(tgt->ltd_exp); - if (obd == NULL) - GOTO(out_lmv_lock, rc = -ENOTCONN); + if (obd == NULL) { + rc = -ENOTCONN; + goto out_lmv_lock; + } CDEBUG(D_INFO, "Found OBD %s=%s device %d (%p) type %s at LMV idx %d\n", obd->obd_name, obd->obd_uuid.uuid, obd->obd_minor, obd, @@ -112,7 +116,7 @@ static int lmv_set_mdc_active(struct lmv_obd *lmv, struct obd_uuid *uuid, if (tgt->ltd_active == activate) { CDEBUG(D_INFO, "OBD %p already %sactive!\n", obd, activate ? "" : "in"); - GOTO(out_lmv_lock, rc); + goto out_lmv_lock; } CDEBUG(D_INFO, "Marking OBD %p %sactive\n", obd, @@ -574,7 +578,7 @@ int lmv_check_connect(struct obd_device *obd) continue; rc = lmv_connect_mdc(obd, tgt); if (rc) - GOTO(out_disc, rc); + goto out_disc; } lmv_set_timeouts(obd); @@ -712,7 +716,7 @@ static int lmv_fid2path(struct obd_export *exp, int len, void *karg, void *uarg) repeat_fid2path: rc = obd_iocontrol(OBD_IOC_FID2PATH, tgt->ltd_exp, len, gf, uarg); if (rc != 0 && rc != -EREMOTE) - GOTO(out_fid2path, rc); + goto out_fid2path; /* If remote_gf != NULL, it means just building the * path on the remote MDT, copy this path segment to gf */ @@ -722,8 +726,10 @@ repeat_fid2path: ori_gf = (struct getinfo_fid2path *)karg; if (strlen(ori_gf->gf_path) + - strlen(gf->gf_path) > ori_gf->gf_pathlen) - GOTO(out_fid2path, rc = -EOVERFLOW); + strlen(gf->gf_path) > ori_gf->gf_pathlen) { + rc = -EOVERFLOW; + goto out_fid2path; + } ptr = ori_gf->gf_path; @@ -741,14 +747,16 @@ repeat_fid2path: gf->gf_linkno); if (rc == 0) - GOTO(out_fid2path, rc); + goto out_fid2path; /* sigh, has to go to another MDT to do path building further */ if (remote_gf == NULL) { remote_gf_size = sizeof(*remote_gf) + PATH_MAX; OBD_ALLOC(remote_gf, remote_gf_size); - if (remote_gf == NULL) - GOTO(out_fid2path, rc = -ENOMEM); + if (remote_gf == NULL) { + rc = -ENOMEM; + goto out_fid2path; + } remote_gf->gf_pathlen = PATH_MAX; } @@ -756,12 +764,15 @@ repeat_fid2path: CERROR("%s: invalid FID "DFID": rc = %d\n", tgt->ltd_exp->exp_obd->obd_name, PFID(&gf->gf_fid), -EINVAL); - GOTO(out_fid2path, rc = -EINVAL); + rc = -EINVAL; + goto out_fid2path; } tgt = lmv_find_target(lmv, &gf->gf_fid); - if (IS_ERR(tgt)) - GOTO(out_fid2path, rc = -EINVAL); + if (IS_ERR(tgt)) { + rc = -EINVAL; + goto out_fid2path; + } remote_gf->gf_fid = gf->gf_fid; remote_gf->gf_recno = -1; @@ -1178,7 +1189,7 @@ static int lmv_nid_policy(struct lmv_obd *lmv) } static int lmv_choose_mds(struct lmv_obd *lmv, struct md_op_data *op_data, - placement_policy_t placement) + enum placement_policy placement) { switch (placement) { case PLACEMENT_CHAR_POLICY: @@ -1201,8 +1212,7 @@ static int lmv_choose_mds(struct lmv_obd *lmv, struct md_op_data *op_data, * This is _inode_ placement policy function (not name). */ static int lmv_placement_policy(struct obd_device *obd, - struct md_op_data *op_data, - mdsno_t *mds) + struct md_op_data *op_data, u32 *mds) { struct lmv_obd *lmv = &obd->u.lmv; @@ -1241,8 +1251,7 @@ static int lmv_placement_policy(struct obd_device *obd, return 0; } -int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid *fid, - mdsno_t mds) +int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid *fid, u32 mds) { struct lmv_tgt_desc *tgt; int rc; @@ -1257,8 +1266,10 @@ int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid *fid, */ mutex_lock(&tgt->ltd_fid_mutex); - if (tgt->ltd_active == 0 || tgt->ltd_exp == NULL) - GOTO(out, rc = -ENODEV); + if (tgt->ltd_active == 0 || tgt->ltd_exp == NULL) { + rc = -ENODEV; + goto out; + } /* * Asking underlaying tgt layer to allocate new fid. @@ -1279,7 +1290,7 @@ int lmv_fid_alloc(struct obd_export *exp, struct lu_fid *fid, { struct obd_device *obd = class_exp2obd(exp); struct lmv_obd *lmv = &obd->u.lmv; - mdsno_t mds = 0; + u32 mds = 0; int rc; LASSERT(op_data != NULL); @@ -1352,7 +1363,7 @@ static int lmv_setup(struct obd_device *obd, struct lustre_cfg *lcfg) LUSTRE_CLI_FLD_HASH_DHT); if (rc) { CERROR("Can't init FLD, err %d\n", rc); - GOTO(out, rc); + goto out; } return 0; @@ -1379,7 +1390,7 @@ static int lmv_cleanup(struct obd_device *obd) return 0; } -static int lmv_process_config(struct obd_device *obd, obd_count len, void *buf) +static int lmv_process_config(struct obd_device *obd, u32 len, void *buf) { struct lustre_cfg *lcfg = buf; struct obd_uuid obd_uuid; @@ -1391,20 +1402,27 @@ static int lmv_process_config(struct obd_device *obd, obd_count len, void *buf) case LCFG_ADD_MDC: /* modify_mdc_tgts add 0:lustre-clilmv 1:lustre-MDT0000_UUID * 2:0 3:1 4:lustre-MDT0000-mdc_UUID */ - if (LUSTRE_CFG_BUFLEN(lcfg, 1) > sizeof(obd_uuid.uuid)) - GOTO(out, rc = -EINVAL); + if (LUSTRE_CFG_BUFLEN(lcfg, 1) > sizeof(obd_uuid.uuid)) { + rc = -EINVAL; + goto out; + } obd_str2uuid(&obd_uuid, lustre_cfg_buf(lcfg, 1)); - if (sscanf(lustre_cfg_buf(lcfg, 2), "%d", &index) != 1) - GOTO(out, rc = -EINVAL); - if (sscanf(lustre_cfg_buf(lcfg, 3), "%d", &gen) != 1) - GOTO(out, rc = -EINVAL); + if (sscanf(lustre_cfg_buf(lcfg, 2), "%d", &index) != 1) { + rc = -EINVAL; + goto out; + } + if (sscanf(lustre_cfg_buf(lcfg, 3), "%d", &gen) != 1) { + rc = -EINVAL; + goto out; + } rc = lmv_add_target(obd, &obd_uuid, index, gen); - GOTO(out, rc); + goto out; default: CERROR("Unknown command: %d\n", lcfg->lcfg_command); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } out: return rc; @@ -1437,7 +1455,7 @@ static int lmv_statfs(const struct lu_env *env, struct obd_export *exp, CERROR("can't stat MDS #%d (%s), error %d\n", i, lmv->tgts[i]->ltd_exp->exp_obd->obd_name, rc); - GOTO(out_free_temp, rc); + goto out_free_temp; } if (i == 0) { @@ -1449,7 +1467,7 @@ static int lmv_statfs(const struct lu_env *env, struct obd_export *exp, * And also clients can be mounted as long as * MDT0 is in service*/ if (flags & OBD_STATFS_FOR_MDT0) - GOTO(out_free_temp, rc); + goto out_free_temp; } else { osfs->os_bavail += temp->os_bavail; osfs->os_blocks += temp->os_blocks; @@ -1480,7 +1498,7 @@ static int lmv_getstatus(struct obd_export *exp, } static int lmv_getxattr(struct obd_export *exp, const struct lu_fid *fid, - struct obd_capa *oc, obd_valid valid, const char *name, + struct obd_capa *oc, u64 valid, const char *name, const char *input, int input_size, int output_size, int flags, struct ptlrpc_request **request) { @@ -1504,7 +1522,7 @@ static int lmv_getxattr(struct obd_export *exp, const struct lu_fid *fid, } static int lmv_setxattr(struct obd_export *exp, const struct lu_fid *fid, - struct obd_capa *oc, obd_valid valid, const char *name, + struct obd_capa *oc, u64 valid, const char *name, const char *input, int input_size, int output_size, int flags, __u32 suppgid, struct ptlrpc_request **request) @@ -1750,12 +1768,16 @@ lmv_enqueue_remote(struct obd_export *exp, struct ldlm_enqueue_info *einfo, ptlrpc_req_finished(req); tgt = lmv_find_target(lmv, &fid1); - if (IS_ERR(tgt)) - GOTO(out, rc = PTR_ERR(tgt)); + if (IS_ERR(tgt)) { + rc = PTR_ERR(tgt); + goto out; + } OBD_ALLOC_PTR(rdata); - if (rdata == NULL) - GOTO(out, rc = -ENOMEM); + if (rdata == NULL) { + rc = -ENOMEM; + goto out; + } rdata->op_fid1 = fid1; rdata->op_bias = MDS_CROSS_REF; @@ -1804,7 +1826,7 @@ lmv_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo, } static int -lmv_getattr_name(struct obd_export *exp,struct md_op_data *op_data, +lmv_getattr_name(struct obd_export *exp, struct md_op_data *op_data, struct ptlrpc_request **request) { struct ptlrpc_request *req = NULL; @@ -2371,7 +2393,7 @@ static int lmv_get_info(const struct lu_env *env, struct obd_export *exp, } int lmv_set_info_async(const struct lu_env *env, struct obd_export *exp, - obd_count keylen, void *key, obd_count vallen, + u32 keylen, void *key, u32 vallen, void *val, struct ptlrpc_request_set *set) { struct lmv_tgt_desc *tgt; @@ -2488,8 +2510,7 @@ int lmv_unpackmd(struct obd_export *exp, struct lov_stripe_md **lsmp, if (mea->mea_magic == MEA_MAGIC_LAST_CHAR || mea->mea_magic == MEA_MAGIC_ALL_CHARS || - mea->mea_magic == MEA_MAGIC_HASH_SEGMENT) - { + mea->mea_magic == MEA_MAGIC_HASH_SEGMENT) { magic = le32_to_cpu(mea->mea_magic); } else { /* diff --git a/drivers/staging/lustre/lustre/lmv/lproc_lmv.c b/drivers/staging/lustre/lustre/lmv/lproc_lmv.c index 310df44f948d..117002097b28 100644 --- a/drivers/staging/lustre/lustre/lmv/lproc_lmv.c +++ b/drivers/staging/lustre/lustre/lmv/lproc_lmv.c @@ -37,7 +37,7 @@ #define DEBUG_SUBSYSTEM S_CLASS #include <linux/seq_file.h> -#include <asm/statfs.h> +#include <linux/statfs.h> #include "../include/lprocfs_status.h" #include "../include/obd_class.h" @@ -58,7 +58,7 @@ static const char *placement_name[] = { [PLACEMENT_INVAL_POLICY] = "INVAL" }; -static placement_policy_t placement_name2policy(char *name, int len) +static enum placement_policy placement_name2policy(char *name, int len) { int i; @@ -69,7 +69,7 @@ static placement_policy_t placement_name2policy(char *name, int len) return PLACEMENT_INVAL_POLICY; } -static const char *placement_policy2name(placement_policy_t placement) +static const char *placement_policy2name(enum placement_policy placement) { LASSERT(placement < PLACEMENT_MAX_POLICY); return placement_name[placement]; @@ -94,7 +94,7 @@ static ssize_t lmv_placement_seq_write(struct file *file, struct obd_device *dev = ((struct seq_file *)file->private_data)->private; char dummy[MAX_POLICY_STRING_SIZE + 1]; int len = count; - placement_policy_t policy; + enum placement_policy policy; struct lmv_obd *lmv; if (copy_from_user(dummy, buffer, MAX_POLICY_STRING_SIZE)) diff --git a/drivers/staging/lustre/lustre/lov/lov_cl_internal.h b/drivers/staging/lustre/lustre/lov/lov_cl_internal.h index 99ade92c5e64..314ce8525aed 100644 --- a/drivers/staging/lustre/lustre/lov/lov_cl_internal.h +++ b/drivers/staging/lustre/lustre/lov/lov_cl_internal.h @@ -515,12 +515,12 @@ struct lov_io { * starting position within a file, for the current io loop iteration * (stripe), used by ci_io_loop(). */ - obd_off lis_pos; + u64 lis_pos; /** * end position with in a file, for the current stripe io. This is * exclusive (i.e., next offset after last byte affected by io). */ - obd_off lis_endpos; + u64 lis_endpos; int lis_mem_frozen; int lis_stripe_count; diff --git a/drivers/staging/lustre/lustre/lov/lov_ea.c b/drivers/staging/lustre/lustre/lov/lov_ea.c index 2401ca872507..9e21e5efcdb6 100644 --- a/drivers/staging/lustre/lustre/lov/lov_ea.c +++ b/drivers/staging/lustre/lustre/lov/lov_ea.c @@ -143,18 +143,18 @@ static void lsm_unpackmd_common(struct lov_stripe_md *lsm, static void lsm_stripe_by_index_plain(struct lov_stripe_md *lsm, int *stripeno, - obd_off *lov_off, obd_off *swidth) + u64 *lov_off, u64 *swidth) { if (swidth) - *swidth = (obd_off)lsm->lsm_stripe_size * lsm->lsm_stripe_count; + *swidth = (u64)lsm->lsm_stripe_size * lsm->lsm_stripe_count; } static void lsm_stripe_by_offset_plain(struct lov_stripe_md *lsm, int *stripeno, - obd_off *lov_off, obd_off *swidth) + u64 *lov_off, u64 *swidth) { if (swidth) - *swidth = (obd_off)lsm->lsm_stripe_size * lsm->lsm_stripe_count; + *swidth = (u64)lsm->lsm_stripe_size * lsm->lsm_stripe_count; } static int lsm_destroy_plain(struct lov_stripe_md *lsm, struct obdo *oa, diff --git a/drivers/staging/lustre/lustre/lov/lov_internal.h b/drivers/staging/lustre/lustre/lov/lov_internal.h index 017961a5cc3e..8c8508bbbb80 100644 --- a/drivers/staging/lustre/lustre/lov/lov_internal.h +++ b/drivers/staging/lustre/lustre/lov/lov_internal.h @@ -90,8 +90,8 @@ struct lov_request { int rq_rc; int rq_buflen; /* length of sub_md */ - obd_count rq_oabufs; - obd_count rq_pgaidx; + u32 rq_oabufs; + u32 rq_pgaidx; }; struct lov_request_set { @@ -109,7 +109,7 @@ struct lov_request_set { struct llog_cookie *set_cookies; int set_cookie_sent; struct obd_trans_info *set_oti; - obd_count set_oabufs; + u32 set_oabufs; struct brw_page *set_pga; struct lov_lock_handles *set_lockh; struct list_head set_list; @@ -140,7 +140,7 @@ static inline struct lov_lock_handles * lov_handle2llh(struct lustre_handle *handle) { LASSERT(handle != NULL); - return(class_handle2object(handle->cookie)); + return class_handle2object(handle->cookie); } static inline void lov_llh_put(struct lov_lock_handles *llh) @@ -166,26 +166,24 @@ static inline void lov_llh_put(struct lov_lock_handles *llh) (char *)((lv)->lov_tgts[index]->ltd_uuid.uuid) /* lov_merge.c */ -void lov_merge_attrs(struct obdo *tgt, struct obdo *src, obd_valid valid, +void lov_merge_attrs(struct obdo *tgt, struct obdo *src, u64 valid, struct lov_stripe_md *lsm, int stripeno, int *set); -int lov_merge_lvb(struct obd_export *exp, struct lov_stripe_md *lsm, - struct ost_lvb *lvb, int kms_only); int lov_adjust_kms(struct obd_export *exp, struct lov_stripe_md *lsm, - obd_off size, int shrink); + u64 size, int shrink); int lov_merge_lvb_kms(struct lov_stripe_md *lsm, struct ost_lvb *lvb, __u64 *kms_place); /* lov_offset.c */ -obd_size lov_stripe_size(struct lov_stripe_md *lsm, obd_size ost_size, +u64 lov_stripe_size(struct lov_stripe_md *lsm, u64 ost_size, int stripeno); -int lov_stripe_offset(struct lov_stripe_md *lsm, obd_off lov_off, - int stripeno, obd_off *obd_off); -obd_off lov_size_to_stripe(struct lov_stripe_md *lsm, obd_off file_size, +int lov_stripe_offset(struct lov_stripe_md *lsm, u64 lov_off, + int stripeno, u64 *u64); +u64 lov_size_to_stripe(struct lov_stripe_md *lsm, u64 file_size, int stripeno); int lov_stripe_intersects(struct lov_stripe_md *lsm, int stripeno, - obd_off start, obd_off end, - obd_off *obd_start, obd_off *obd_end); -int lov_stripe_number(struct lov_stripe_md *lsm, obd_off lov_off); + u64 start, u64 end, + u64 *obd_start, u64 *obd_end); +int lov_stripe_number(struct lov_stripe_md *lsm, u64 lov_off); /* lov_qos.c */ #define LOV_USES_ASSIGNED_STRIPE 0 @@ -207,17 +205,6 @@ void lov_update_set(struct lov_request_set *set, int lov_update_common_set(struct lov_request_set *set, struct lov_request *req, int rc); int lov_check_and_wait_active(struct lov_obd *lov, int ost_idx); -int lov_prep_create_set(struct obd_export *exp, struct obd_info *oifo, - struct lov_stripe_md **ea, struct obdo *src_oa, - struct obd_trans_info *oti, - struct lov_request_set **reqset); -int cb_create_update(void *cookie, int rc); -int lov_fini_create_set(struct lov_request_set *set, struct lov_stripe_md **ea); -int lov_prep_brw_set(struct obd_export *exp, struct obd_info *oinfo, - obd_count oa_bufs, struct brw_page *pga, - struct obd_trans_info *oti, - struct lov_request_set **reqset); -int lov_fini_brw_set(struct lov_request_set *set); int lov_prep_getattr_set(struct obd_export *exp, struct obd_info *oinfo, struct lov_request_set **reqset); int lov_fini_getattr_set(struct lov_request_set *set); @@ -225,8 +212,6 @@ int lov_prep_destroy_set(struct obd_export *exp, struct obd_info *oinfo, struct obdo *src_oa, struct lov_stripe_md *lsm, struct obd_trans_info *oti, struct lov_request_set **reqset); -int lov_update_destroy_set(struct lov_request_set *set, - struct lov_request *req, int rc); int lov_fini_destroy_set(struct lov_request_set *set); int lov_prep_setattr_set(struct obd_export *exp, struct obd_info *oinfo, struct obd_trans_info *oti, @@ -234,30 +219,6 @@ int lov_prep_setattr_set(struct obd_export *exp, struct obd_info *oinfo, int lov_update_setattr_set(struct lov_request_set *set, struct lov_request *req, int rc); int lov_fini_setattr_set(struct lov_request_set *set); -int lov_prep_punch_set(struct obd_export *exp, struct obd_info *oinfo, - struct obd_trans_info *oti, - struct lov_request_set **reqset); -int lov_fini_punch_set(struct lov_request_set *set); -int lov_prep_sync_set(struct obd_export *exp, struct obd_info *obd_info, - obd_off start, obd_off end, - struct lov_request_set **reqset); -int lov_fini_sync_set(struct lov_request_set *set); -int lov_prep_enqueue_set(struct obd_export *exp, struct obd_info *oinfo, - struct ldlm_enqueue_info *einfo, - struct lov_request_set **reqset); -int lov_fini_enqueue_set(struct lov_request_set *set, __u32 mode, int rc, - struct ptlrpc_request_set *rqset); -int lov_prep_match_set(struct obd_export *exp, struct obd_info *oinfo, - struct lov_stripe_md *lsm, - ldlm_policy_data_t *policy, __u32 mode, - struct lustre_handle *lockh, - struct lov_request_set **reqset); -int lov_fini_match_set(struct lov_request_set *set, __u32 mode, __u64 flags); -int lov_prep_cancel_set(struct obd_export *exp, struct obd_info *oinfo, - struct lov_stripe_md *lsm, - __u32 mode, struct lustre_handle *lockh, - struct lov_request_set **reqset); -int lov_fini_cancel_set(struct lov_request_set *set); int lov_prep_statfs_set(struct obd_device *obd, struct obd_info *oinfo, struct lov_request_set **reqset); void lov_update_statfs(struct obd_statfs *osfs, struct obd_statfs *lov_sfs, @@ -287,10 +248,6 @@ int lov_packmd(struct obd_export *exp, struct lov_mds_md **lmm, struct lov_stripe_md *lsm); int lov_unpackmd(struct obd_export *exp, struct lov_stripe_md **lsmp, struct lov_mds_md *lmm, int lmm_bytes); -int lov_setstripe(struct obd_export *exp, int max_lmm_size, - struct lov_stripe_md **lsmp, struct lov_user_md *lump); -int lov_setea(struct obd_export *exp, struct lov_stripe_md **lsmp, - struct lov_user_md *lump); int lov_getstripe(struct obd_export *exp, struct lov_stripe_md *lsm, struct lov_user_md *lump); int lov_alloc_memmd(struct lov_stripe_md **lsmp, __u16 stripe_count, @@ -307,8 +264,6 @@ struct lov_stripe_md *lsm_alloc_plain(__u16 stripe_count, int *size); void lsm_free_plain(struct lov_stripe_md *lsm); void dump_lsm(unsigned int level, const struct lov_stripe_md *lsm); -int lovea_destroy_object(struct lov_obd *lov, struct lov_stripe_md *lsm, - struct obdo *oa, void *data); /* lproc_lov.c */ #if defined (CONFIG_PROC_FS) extern const struct file_operations lov_proc_target_fops; diff --git a/drivers/staging/lustre/lustre/lov/lov_io.c b/drivers/staging/lustre/lustre/lov/lov_io.c index ce074c54a003..f1f6db3f664a 100644 --- a/drivers/staging/lustre/lustre/lov/lov_io.c +++ b/drivers/staging/lustre/lustre/lov/lov_io.c @@ -366,7 +366,7 @@ static void lov_io_fini(const struct lu_env *env, const struct cl_io_slice *ios) wake_up_all(&lov->lo_waitq); } -static obd_off lov_offset_mod(obd_off val, int delta) +static u64 lov_offset_mod(u64 val, int delta) { if (val != OBD_OBJECT_EOF) val += delta; @@ -379,9 +379,9 @@ static int lov_io_iter_init(const struct lu_env *env, struct lov_io *lio = cl2lov_io(env, ios); struct lov_stripe_md *lsm = lio->lis_object->lo_lsm; struct lov_io_sub *sub; - obd_off endpos; - obd_off start; - obd_off end; + u64 endpos; + u64 start; + u64 end; int stripe; int rc = 0; diff --git a/drivers/staging/lustre/lustre/lov/lov_lock.c b/drivers/staging/lustre/lustre/lov/lov_lock.c index 08ac3745f0da..49e694222ac8 100644 --- a/drivers/staging/lustre/lustre/lov/lov_lock.c +++ b/drivers/staging/lustre/lustre/lov/lov_lock.c @@ -290,10 +290,10 @@ static int lov_lock_sub_init(const struct lu_env *env, int result = 0; int i; int nr; - obd_off start; - obd_off end; - obd_off file_start; - obd_off file_end; + u64 start; + u64 end; + u64 file_start; + u64 file_end; struct lov_object *loo = cl2lov(lck->lls_cl.cls_obj); struct lov_layout_raid0 *r0 = lov_r0(loo); @@ -860,10 +860,10 @@ static int lock_lock_multi_match() struct lov_layout_raid0 *r0 = lov_r0(loo); struct lov_lock_sub *sub; struct cl_object *subobj; - obd_off fstart; - obd_off fend; - obd_off start; - obd_off end; + u64 fstart; + u64 fend; + u64 start; + u64 end; int i; fstart = cl_offset(need->cld_obj, need->cld_start); @@ -900,8 +900,8 @@ static int lov_lock_stripe_is_matching(const struct lu_env *env, const struct cl_lock_descr *descr) { struct lov_stripe_md *lsm = lov->lo_lsm; - obd_off start; - obd_off end; + u64 start; + u64 end; int result; if (lov_r0(lov)->lo_nr == 1) @@ -919,8 +919,8 @@ static int lov_lock_stripe_is_matching(const struct lu_env *env, stripe == lov_stripe_number(lsm, end); if (result) { struct cl_lock_descr *subd = &lov_env_info(env)->lti_ldescr; - obd_off sub_start; - obd_off sub_end; + u64 sub_start; + u64 sub_end; subd->cld_obj = NULL; /* don't need sub object at all */ subd->cld_mode = descr->cld_mode; diff --git a/drivers/staging/lustre/lustre/lov/lov_merge.c b/drivers/staging/lustre/lustre/lov/lov_merge.c index 85144b8da96d..b7e7bfabe382 100644 --- a/drivers/staging/lustre/lustre/lov/lov_merge.c +++ b/drivers/staging/lustre/lustre/lov/lov_merge.c @@ -52,9 +52,9 @@ int lov_merge_lvb_kms(struct lov_stripe_md *lsm, __u64 size = 0; __u64 kms = 0; __u64 blocks = 0; - obd_time current_mtime = lvb->lvb_mtime; - obd_time current_atime = lvb->lvb_atime; - obd_time current_ctime = lvb->lvb_ctime; + s64 current_mtime = lvb->lvb_mtime; + s64 current_atime = lvb->lvb_atime; + s64 current_ctime = lvb->lvb_ctime; int i; int rc = 0; @@ -66,7 +66,7 @@ int lov_merge_lvb_kms(struct lov_stripe_md *lsm, lvb->lvb_atime, lvb->lvb_ctime, lvb->lvb_blocks); for (i = 0; i < lsm->lsm_stripe_count; i++) { struct lov_oinfo *loi = lsm->lsm_oinfo[i]; - obd_size lov_size, tmpsize; + u64 lov_size, tmpsize; if (OST_LVB_IS_ERR(loi->loi_lvb.lvb_blocks)) { rc = OST_LVB_GET_ERR(loi->loi_lvb.lvb_blocks); @@ -109,36 +109,9 @@ int lov_merge_lvb_kms(struct lov_stripe_md *lsm, return rc; } -/** Merge the lock value block(&lvb) attributes from each of the stripes in a - * file into a single lvb. It is expected that the caller initializes the - * current atime, mtime, ctime to avoid regressing a more uptodate time on - * the local client. - * - * If \a kms_only is set then we do not consider the recently seen size (rss) - * when updating the known minimum size (kms). Even when merging RSS, we will - * take the KMS value if it's larger. This prevents getattr from stomping on - * dirty cached pages which extend the file size. */ -int lov_merge_lvb(struct obd_export *exp, - struct lov_stripe_md *lsm, struct ost_lvb *lvb, int kms_only) -{ - int rc; - __u64 kms; - - lov_stripe_lock(lsm); - rc = lov_merge_lvb_kms(lsm, lvb, &kms); - lov_stripe_unlock(lsm); - if (kms_only) - lvb->lvb_size = kms; - - CDEBUG(D_INODE, "merged for ID "DOSTID" s=%llu m=%llu a=%llu c=%llu b=%llu\n", - POSTID(&lsm->lsm_oi), lvb->lvb_size, lvb->lvb_mtime, - lvb->lvb_atime, lvb->lvb_ctime, lvb->lvb_blocks); - return rc; -} - /* Must be called under the lov_stripe_lock() */ int lov_adjust_kms(struct obd_export *exp, struct lov_stripe_md *lsm, - obd_off size, int shrink) + u64 size, int shrink) { struct lov_oinfo *loi; int stripe = 0; @@ -173,7 +146,7 @@ int lov_adjust_kms(struct obd_export *exp, struct lov_stripe_md *lsm, return 0; } -void lov_merge_attrs(struct obdo *tgt, struct obdo *src, obd_valid valid, +void lov_merge_attrs(struct obdo *tgt, struct obdo *src, u64 valid, struct lov_stripe_md *lsm, int stripeno, int *set) { valid &= src->o_valid; @@ -181,7 +154,7 @@ void lov_merge_attrs(struct obdo *tgt, struct obdo *src, obd_valid valid, if (*set) { if (valid & OBD_MD_FLSIZE) { /* this handles sparse files properly */ - obd_size lov_size; + u64 lov_size; lov_size = lov_stripe_size(lsm, src->o_size, stripeno); if (lov_size > tgt->o_size) diff --git a/drivers/staging/lustre/lustre/lov/lov_obd.c b/drivers/staging/lustre/lustre/lov/lov_obd.c index e4f4fe3f71c7..94dfd64bd283 100644 --- a/drivers/staging/lustre/lustre/lov/lov_obd.c +++ b/drivers/staging/lustre/lustre/lov/lov_obd.c @@ -51,7 +51,6 @@ #include "../include/lustre_dlm.h" #include "../include/lustre_mds.h" #include "../include/obd_class.h" -#include "../include/obd_ost.h" #include "../include/lprocfs_status.h" #include "../include/lustre_param.h" #include "../include/cl_object.h" @@ -389,8 +388,10 @@ static int lov_set_osc_active(struct obd_device *obd, struct obd_uuid *uuid, break; } - if (index == lov->desc.ld_tgt_count) - GOTO(out, index = -EINVAL); + if (index == lov->desc.ld_tgt_count) { + index = -EINVAL; + goto out; + } if (ev == OBD_NOTIFY_DEACTIVATE || ev == OBD_NOTIFY_ACTIVATE) { activate = (ev == OBD_NOTIFY_ACTIVATE) ? 1 : 0; @@ -410,7 +411,7 @@ static int lov_set_osc_active(struct obd_device *obd, struct obd_uuid *uuid, if (lov->lov_tgts[index]->ltd_active == active) { CDEBUG(D_INFO, "OSC %s already %sactive!\n", uuid->uuid, active ? "" : "in"); - GOTO(out, index); + goto out; } else { CDEBUG(D_CONFIG, "Marking OSC %s %sactive\n", obd_uuid2str(uuid), active ? "" : "in"); @@ -618,11 +619,13 @@ static int lov_add_target(struct obd_device *obd, struct obd_uuid *uuidp, rc = lov_connect_obd(obd, index, active, &lov->lov_ocd); if (rc) - GOTO(out, rc); + goto out; /* connect to administrative disabled ost */ - if (!tgt->ltd_exp) - GOTO(out, rc = 0); + if (!tgt->ltd_exp) { + rc = 0; + goto out; + } if (lov->lov_cache != NULL) { rc = obd_set_info_async(NULL, tgt->ltd_exp, @@ -630,7 +633,7 @@ static int lov_add_target(struct obd_device *obd, struct obd_uuid *uuidp, sizeof(struct cl_client_cache), lov->lov_cache, NULL); if (rc < 0) - GOTO(out, rc); + goto out; } rc = lov_notify(obd, tgt->ltd_exp->exp_obd, @@ -667,14 +670,16 @@ int lov_del_target(struct obd_device *obd, __u32 index, if (!lov->lov_tgts[index]) { CERROR("LOV target at index %d is not setup.\n", index); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } if (uuidp && !obd_uuid_equals(uuidp, &lov->lov_tgts[index]->ltd_uuid)) { CERROR("LOV target UUID %s at index %d doesn't match %s.\n", lov_uuid2str(lov, index), index, obd_uuid2str(uuidp)); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } CDEBUG(D_CONFIG, "uuid: %s idx: %d gen: %d exp: %p active: %d\n", @@ -816,7 +821,7 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg) lov->lov_pool_count = 0; rc = lov_ost_pool_init(&lov->lov_packed, 0); if (rc) - GOTO(out, rc); + goto out; lprocfs_lov_init_vars(&lvars); lprocfs_obd_setup(obd, lvars.obd_vars); @@ -923,15 +928,21 @@ int lov_process_config_base(struct obd_device *obd, struct lustre_cfg *lcfg, __u32 index; int gen; /* lov_modify_tgts add 0:lov_mdsA 1:ost1_UUID 2:0 3:1 */ - if (LUSTRE_CFG_BUFLEN(lcfg, 1) > sizeof(obd_uuid.uuid)) - GOTO(out, rc = -EINVAL); + if (LUSTRE_CFG_BUFLEN(lcfg, 1) > sizeof(obd_uuid.uuid)) { + rc = -EINVAL; + goto out; + } obd_str2uuid(&obd_uuid, lustre_cfg_buf(lcfg, 1)); - if (sscanf(lustre_cfg_buf(lcfg, 2), "%d", indexp) != 1) - GOTO(out, rc = -EINVAL); - if (sscanf(lustre_cfg_buf(lcfg, 3), "%d", genp) != 1) - GOTO(out, rc = -EINVAL); + if (sscanf(lustre_cfg_buf(lcfg, 2), "%d", indexp) != 1) { + rc = -EINVAL; + goto out; + } + if (sscanf(lustre_cfg_buf(lcfg, 3), "%d", genp) != 1) { + rc = -EINVAL; + goto out; + } index = *indexp; gen = *genp; if (cmd == LCFG_LOV_ADD_OBD) @@ -940,14 +951,16 @@ int lov_process_config_base(struct obd_device *obd, struct lustre_cfg *lcfg, rc = lov_add_target(obd, &obd_uuid, index, gen, 0); else rc = lov_del_target(obd, index, &obd_uuid, gen); - GOTO(out, rc); + goto out; } case LCFG_PARAM: { struct lprocfs_static_vars lvars = { NULL }; struct lov_desc *desc = &(obd->u.lov.desc); - if (!desc) - GOTO(out, rc = -EINVAL); + if (!desc) { + rc = -EINVAL; + goto out; + } lprocfs_lov_init_vars(&lvars); @@ -955,17 +968,18 @@ int lov_process_config_base(struct obd_device *obd, struct lustre_cfg *lcfg, lcfg, obd); if (rc > 0) rc = 0; - GOTO(out, rc); + goto out; } case LCFG_POOL_NEW: case LCFG_POOL_ADD: case LCFG_POOL_DEL: case LCFG_POOL_REM: - GOTO(out, rc); + goto out; default: { CERROR("Unknown command: %d\n", lcfg->lcfg_command); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } } @@ -990,22 +1004,30 @@ static int lov_recreate(struct obd_export *exp, struct obdo *src_oa, ost_idx = src_oa->o_nlink; lsm = *ea; - if (lsm == NULL) - GOTO(out, rc = -EINVAL); + if (lsm == NULL) { + rc = -EINVAL; + goto out; + } if (ost_idx >= lov->desc.ld_tgt_count || - !lov->lov_tgts[ost_idx]) - GOTO(out, rc = -EINVAL); + !lov->lov_tgts[ost_idx]) { + rc = -EINVAL; + goto out; + } for (i = 0; i < lsm->lsm_stripe_count; i++) { if (lsm->lsm_oinfo[i]->loi_ost_idx == ost_idx) { if (ostid_id(&lsm->lsm_oinfo[i]->loi_oi) != - ostid_id(&src_oa->o_oi)) - GOTO(out, rc = -EINVAL); + ostid_id(&src_oa->o_oi)) { + rc = -EINVAL; + goto out; + } break; } } - if (i == lsm->lsm_stripe_count) - GOTO(out, rc = -EINVAL); + if (i == lsm->lsm_stripe_count) { + rc = -EINVAL; + goto out; + } rc = obd_create(NULL, lov->lov_tgts[ost_idx]->ltd_exp, src_oa, &obj_mdp, oti); @@ -1081,7 +1103,7 @@ static int lov_destroy(const struct lu_env *env, struct obd_export *exp, obd_getref(exp->exp_obd); rc = lov_prep_destroy_set(exp, &oinfo, oa, lsm, oti, &set); if (rc) - GOTO(out, rc); + goto out; list_for_each(pos, &set->set_list) { req = list_entry(pos, struct lov_request, rq_link); @@ -1113,54 +1135,6 @@ out: return rc ? rc : err; } -static int lov_getattr(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo) -{ - struct lov_request_set *set; - struct lov_request *req; - struct list_head *pos; - struct lov_obd *lov; - int err = 0, rc = 0; - - LASSERT(oinfo); - ASSERT_LSM_MAGIC(oinfo->oi_md); - - if (!exp || !exp->exp_obd) - return -ENODEV; - - lov = &exp->exp_obd->u.lov; - - rc = lov_prep_getattr_set(exp, oinfo, &set); - if (rc) - return rc; - - list_for_each(pos, &set->set_list) { - req = list_entry(pos, struct lov_request, rq_link); - - CDEBUG(D_INFO, "objid "DOSTID"[%d] has subobj "DOSTID" at idx" - " %u\n", POSTID(&oinfo->oi_oa->o_oi), req->rq_stripe, - POSTID(&req->rq_oi.oi_oa->o_oi), req->rq_idx); - - rc = obd_getattr(env, lov->lov_tgts[req->rq_idx]->ltd_exp, - &req->rq_oi); - err = lov_update_common_set(set, req, rc); - if (err) { - CERROR("%s: getattr objid "DOSTID" subobj " - DOSTID" on OST idx %d: rc = %d\n", - exp->exp_obd->obd_name, - POSTID(&oinfo->oi_oa->o_oi), - POSTID(&req->rq_oi.oi_oa->o_oi), - req->rq_idx, err); - break; - } - } - - rc = lov_fini_getattr_set(set); - if (err) - rc = err; - return rc; -} - static int lov_getattr_interpret(struct ptlrpc_request_set *rqset, void *data, int rc) { @@ -1214,7 +1188,7 @@ static int lov_getattr_async(struct obd_export *exp, struct obd_info *oinfo, POSTID(&oinfo->oi_oa->o_oi), POSTID(&req->rq_oi.oi_oa->o_oi), req->rq_idx, rc); - GOTO(out, rc); + goto out; } } @@ -1232,57 +1206,6 @@ out: return rc ? rc : err; } -static int lov_setattr(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo, struct obd_trans_info *oti) -{ - struct lov_request_set *set; - struct lov_obd *lov; - struct list_head *pos; - struct lov_request *req; - int err = 0, rc = 0; - - LASSERT(oinfo); - ASSERT_LSM_MAGIC(oinfo->oi_md); - - if (!exp || !exp->exp_obd) - return -ENODEV; - - /* for now, we only expect the following updates here */ - LASSERT(!(oinfo->oi_oa->o_valid & ~(OBD_MD_FLID | OBD_MD_FLTYPE | - OBD_MD_FLMODE | OBD_MD_FLATIME | - OBD_MD_FLMTIME | OBD_MD_FLCTIME | - OBD_MD_FLFLAGS | OBD_MD_FLSIZE | - OBD_MD_FLGROUP | OBD_MD_FLUID | - OBD_MD_FLGID | OBD_MD_FLFID | - OBD_MD_FLGENER))); - lov = &exp->exp_obd->u.lov; - rc = lov_prep_setattr_set(exp, oinfo, oti, &set); - if (rc) - return rc; - - list_for_each(pos, &set->set_list) { - req = list_entry(pos, struct lov_request, rq_link); - - rc = obd_setattr(env, lov->lov_tgts[req->rq_idx]->ltd_exp, - &req->rq_oi, NULL); - err = lov_update_setattr_set(set, req, rc); - if (err) { - CERROR("%s: setattr objid "DOSTID" subobj " - DOSTID" on OST idx %d: rc = %d\n", - exp->exp_obd->obd_name, - POSTID(&set->set_oi->oi_oa->o_oi), - POSTID(&req->rq_oi.oi_oa->o_oi), req->rq_idx, - err); - if (!rc) - rc = err; - } - } - err = lov_fini_setattr_set(set); - if (!rc) - rc = err; - return rc; -} - static int lov_setattr_interpret(struct ptlrpc_request_set *rqset, void *data, int rc) { @@ -1365,297 +1288,6 @@ static int lov_setattr_async(struct obd_export *exp, struct obd_info *oinfo, return 0; } -static int lov_punch_interpret(struct ptlrpc_request_set *rqset, - void *data, int rc) -{ - struct lov_request_set *lovset = (struct lov_request_set *)data; - int err; - - if (rc) - atomic_set(&lovset->set_completes, 0); - err = lov_fini_punch_set(lovset); - return rc ? rc : err; -} - -/* FIXME: maybe we'll just make one node the authoritative attribute node, then - * we can send this 'punch' to just the authoritative node and the nodes - * that the punch will affect. */ -static int lov_punch(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo, struct obd_trans_info *oti, - struct ptlrpc_request_set *rqset) -{ - struct lov_request_set *set; - struct lov_obd *lov; - struct list_head *pos; - struct lov_request *req; - int rc = 0; - - LASSERT(oinfo); - ASSERT_LSM_MAGIC(oinfo->oi_md); - - if (!exp || !exp->exp_obd) - return -ENODEV; - - lov = &exp->exp_obd->u.lov; - rc = lov_prep_punch_set(exp, oinfo, oti, &set); - if (rc) - return rc; - - list_for_each(pos, &set->set_list) { - req = list_entry(pos, struct lov_request, rq_link); - - rc = obd_punch(env, lov->lov_tgts[req->rq_idx]->ltd_exp, - &req->rq_oi, NULL, rqset); - if (rc) { - CERROR("%s: punch objid "DOSTID" subobj "DOSTID - " on OST idx %d: rc = %d\n", - exp->exp_obd->obd_name, - POSTID(&set->set_oi->oi_oa->o_oi), - POSTID(&req->rq_oi.oi_oa->o_oi), req->rq_idx, rc); - break; - } - } - - if (rc || list_empty(&rqset->set_requests)) { - int err; - err = lov_fini_punch_set(set); - return rc ? rc : err; - } - - LASSERT(rqset->set_interpret == NULL); - rqset->set_interpret = lov_punch_interpret; - rqset->set_arg = (void *)set; - - return 0; -} - -static int lov_sync_interpret(struct ptlrpc_request_set *rqset, - void *data, int rc) -{ - struct lov_request_set *lovset = data; - int err; - - if (rc) - atomic_set(&lovset->set_completes, 0); - err = lov_fini_sync_set(lovset); - return rc ?: err; -} - -static int lov_sync(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo, obd_off start, obd_off end, - struct ptlrpc_request_set *rqset) -{ - struct lov_request_set *set = NULL; - struct lov_obd *lov; - struct list_head *pos; - struct lov_request *req; - int rc = 0; - - ASSERT_LSM_MAGIC(oinfo->oi_md); - LASSERT(rqset != NULL); - - if (!exp->exp_obd) - return -ENODEV; - - lov = &exp->exp_obd->u.lov; - rc = lov_prep_sync_set(exp, oinfo, start, end, &set); - if (rc) - return rc; - - CDEBUG(D_INFO, "fsync objid "DOSTID" [%#llx, %#llx]\n", - POSTID(&set->set_oi->oi_oa->o_oi), start, end); - - list_for_each(pos, &set->set_list) { - req = list_entry(pos, struct lov_request, rq_link); - - rc = obd_sync(env, lov->lov_tgts[req->rq_idx]->ltd_exp, - &req->rq_oi, req->rq_oi.oi_policy.l_extent.start, - req->rq_oi.oi_policy.l_extent.end, rqset); - if (rc) { - CERROR("%s: fsync objid "DOSTID" subobj "DOSTID - " on OST idx %d: rc = %d\n", - exp->exp_obd->obd_name, - POSTID(&set->set_oi->oi_oa->o_oi), - POSTID(&req->rq_oi.oi_oa->o_oi), req->rq_idx, - rc); - break; - } - } - - /* If we are not waiting for responses on async requests, return. */ - if (rc || list_empty(&rqset->set_requests)) { - int err = lov_fini_sync_set(set); - - return rc ?: err; - } - - LASSERT(rqset->set_interpret == NULL); - rqset->set_interpret = lov_sync_interpret; - rqset->set_arg = (void *)set; - - return 0; -} - -static int lov_brw_check(struct lov_obd *lov, struct obd_info *lov_oinfo, - obd_count oa_bufs, struct brw_page *pga) -{ - struct obd_info oinfo = { { { 0 } } }; - int i, rc = 0; - - oinfo.oi_oa = lov_oinfo->oi_oa; - - /* The caller just wants to know if there's a chance that this - * I/O can succeed */ - for (i = 0; i < oa_bufs; i++) { - int stripe = lov_stripe_number(lov_oinfo->oi_md, pga[i].off); - int ost = lov_oinfo->oi_md->lsm_oinfo[stripe]->loi_ost_idx; - obd_off start, end; - - if (!lov_stripe_intersects(lov_oinfo->oi_md, i, pga[i].off, - pga[i].off + pga[i].count - 1, - &start, &end)) - continue; - - if (!lov->lov_tgts[ost] || !lov->lov_tgts[ost]->ltd_active) { - CDEBUG(D_HA, "lov idx %d inactive\n", ost); - return -EIO; - } - - rc = obd_brw(OBD_BRW_CHECK, lov->lov_tgts[ost]->ltd_exp, &oinfo, - 1, &pga[i], NULL); - if (rc) - break; - } - return rc; -} - -static int lov_brw(int cmd, struct obd_export *exp, struct obd_info *oinfo, - obd_count oa_bufs, struct brw_page *pga, - struct obd_trans_info *oti) -{ - struct lov_request_set *set; - struct lov_request *req; - struct list_head *pos; - struct lov_obd *lov = &exp->exp_obd->u.lov; - int err, rc = 0; - - ASSERT_LSM_MAGIC(oinfo->oi_md); - - if (cmd == OBD_BRW_CHECK) { - rc = lov_brw_check(lov, oinfo, oa_bufs, pga); - return rc; - } - - rc = lov_prep_brw_set(exp, oinfo, oa_bufs, pga, oti, &set); - if (rc) - return rc; - - list_for_each(pos, &set->set_list) { - struct obd_export *sub_exp; - struct brw_page *sub_pga; - req = list_entry(pos, struct lov_request, rq_link); - - sub_exp = lov->lov_tgts[req->rq_idx]->ltd_exp; - sub_pga = set->set_pga + req->rq_pgaidx; - rc = obd_brw(cmd, sub_exp, &req->rq_oi, req->rq_oabufs, - sub_pga, oti); - if (rc) - break; - lov_update_common_set(set, req, rc); - } - - err = lov_fini_brw_set(set); - if (!rc) - rc = err; - return rc; -} - -static int lov_enqueue_interpret(struct ptlrpc_request_set *rqset, - void *data, int rc) -{ - struct lov_request_set *lovset = (struct lov_request_set *)data; - - rc = lov_fini_enqueue_set(lovset, lovset->set_ei->ei_mode, rc, rqset); - return rc; -} - -static int lov_enqueue(struct obd_export *exp, struct obd_info *oinfo, - struct ldlm_enqueue_info *einfo, - struct ptlrpc_request_set *rqset) -{ - ldlm_mode_t mode = einfo->ei_mode; - struct lov_request_set *set; - struct lov_request *req; - struct list_head *pos; - struct lov_obd *lov; - ldlm_error_t rc; - - LASSERT(oinfo); - ASSERT_LSM_MAGIC(oinfo->oi_md); - LASSERT(mode == (mode & -mode)); - - /* we should never be asked to replay a lock this way. */ - LASSERT((oinfo->oi_flags & LDLM_FL_REPLAY) == 0); - - if (!exp || !exp->exp_obd) - return -ENODEV; - - lov = &exp->exp_obd->u.lov; - rc = lov_prep_enqueue_set(exp, oinfo, einfo, &set); - if (rc) - return rc; - - list_for_each(pos, &set->set_list) { - req = list_entry(pos, struct lov_request, rq_link); - - rc = obd_enqueue(lov->lov_tgts[req->rq_idx]->ltd_exp, - &req->rq_oi, einfo, rqset); - if (rc != ELDLM_OK) - GOTO(out, rc); - } - - if (rqset && !list_empty(&rqset->set_requests)) { - LASSERT(rc == 0); - LASSERT(rqset->set_interpret == NULL); - rqset->set_interpret = lov_enqueue_interpret; - rqset->set_arg = (void *)set; - return rc; - } -out: - rc = lov_fini_enqueue_set(set, mode, rc, rqset); - return rc; -} - -static int lov_change_cbdata(struct obd_export *exp, - struct lov_stripe_md *lsm, ldlm_iterator_t it, - void *data) -{ - struct lov_obd *lov; - int rc = 0, i; - - ASSERT_LSM_MAGIC(lsm); - - if (!exp || !exp->exp_obd) - return -ENODEV; - - lov = &exp->exp_obd->u.lov; - for (i = 0; i < lsm->lsm_stripe_count; i++) { - struct lov_stripe_md submd; - struct lov_oinfo *loi = lsm->lsm_oinfo[i]; - - if (!lov->lov_tgts[loi->loi_ost_idx]) { - CDEBUG(D_HA, "lov idx %d NULL \n", loi->loi_ost_idx); - continue; - } - - submd.lsm_oi = loi->loi_oi; - submd.lsm_stripe_count = 0; - rc = obd_change_cbdata(lov->lov_tgts[loi->loi_ost_idx]->ltd_exp, - &submd, it, data); - } - return rc; -} - /* find any ldlm lock of the inode in lov * return 0 not find * 1 find one @@ -1691,106 +1323,6 @@ static int lov_find_cbdata(struct obd_export *exp, return rc; } -static int lov_cancel(struct obd_export *exp, struct lov_stripe_md *lsm, - __u32 mode, struct lustre_handle *lockh) -{ - struct lov_request_set *set; - struct obd_info oinfo; - struct lov_request *req; - struct list_head *pos; - struct lov_obd *lov; - struct lustre_handle *lov_lockhp; - int err = 0, rc = 0; - - ASSERT_LSM_MAGIC(lsm); - - if (!exp || !exp->exp_obd) - return -ENODEV; - - LASSERT(lockh); - lov = &exp->exp_obd->u.lov; - rc = lov_prep_cancel_set(exp, &oinfo, lsm, mode, lockh, &set); - if (rc) - return rc; - - list_for_each(pos, &set->set_list) { - req = list_entry(pos, struct lov_request, rq_link); - lov_lockhp = set->set_lockh->llh_handles + req->rq_stripe; - - rc = obd_cancel(lov->lov_tgts[req->rq_idx]->ltd_exp, - req->rq_oi.oi_md, mode, lov_lockhp); - rc = lov_update_common_set(set, req, rc); - if (rc) { - CERROR("%s: cancel objid "DOSTID" subobj " - DOSTID" on OST idx %d: rc = %d\n", - exp->exp_obd->obd_name, POSTID(&lsm->lsm_oi), - POSTID(&req->rq_oi.oi_md->lsm_oi), - req->rq_idx, rc); - err = rc; - } - - } - lov_fini_cancel_set(set); - return err; -} - -static int lov_cancel_unused(struct obd_export *exp, - struct lov_stripe_md *lsm, - ldlm_cancel_flags_t flags, void *opaque) -{ - struct lov_obd *lov; - int rc = 0, i; - - if (!exp || !exp->exp_obd) - return -ENODEV; - - lov = &exp->exp_obd->u.lov; - if (lsm == NULL) { - for (i = 0; i < lov->desc.ld_tgt_count; i++) { - int err; - if (!lov->lov_tgts[i] || !lov->lov_tgts[i]->ltd_exp) - continue; - - err = obd_cancel_unused(lov->lov_tgts[i]->ltd_exp, NULL, - flags, opaque); - if (!rc) - rc = err; - } - return rc; - } - - ASSERT_LSM_MAGIC(lsm); - - for (i = 0; i < lsm->lsm_stripe_count; i++) { - struct lov_stripe_md submd; - struct lov_oinfo *loi = lsm->lsm_oinfo[i]; - int idx = loi->loi_ost_idx; - int err; - - if (!lov->lov_tgts[idx]) { - CDEBUG(D_HA, "lov idx %d NULL\n", idx); - continue; - } - - if (!lov->lov_tgts[idx]->ltd_active) - CDEBUG(D_HA, "lov idx %d inactive\n", idx); - - submd.lsm_oi = loi->loi_oi; - submd.lsm_stripe_count = 0; - err = obd_cancel_unused(lov->lov_tgts[idx]->ltd_exp, - &submd, flags, opaque); - if (err && lov->lov_tgts[idx]->ltd_active) { - CERROR("%s: cancel unused objid "DOSTID - " subobj "DOSTID" on OST idx %d: rc = %d\n", - exp->exp_obd->obd_name, POSTID(&lsm->lsm_oi), - POSTID(&loi->loi_oi), idx, err); - if (!rc) - rc = err; - } - } - return rc; -} - int lov_statfs_interpret(struct ptlrpc_request_set *rqset, void *data, int rc) { struct lov_request_set *lovset = (struct lov_request_set *)data; @@ -1960,15 +1492,9 @@ static int lov_iocontrol(unsigned int cmd, struct obd_export *exp, int len, obd_ioctl_freedata(buf, len); break; } - case LL_IOC_LOV_SETSTRIPE: - rc = lov_setstripe(exp, len, karg, uarg); - break; case LL_IOC_LOV_GETSTRIPE: rc = lov_getstripe(exp, karg, uarg); break; - case LL_IOC_LOV_SETEA: - rc = lov_setea(exp, karg, uarg); - break; case OBD_IOC_QUOTACTL: { struct if_quotactl *qctl = karg; struct lov_tgt_desc *tgt = NULL; @@ -2080,13 +1606,13 @@ static int lov_iocontrol(unsigned int cmd, struct obd_export *exp, int len, * \param fm_end logical end of mapping * \param start_stripe starting stripe will be returned in this */ -obd_size fiemap_calc_fm_end_offset(struct ll_user_fiemap *fiemap, - struct lov_stripe_md *lsm, obd_size fm_start, - obd_size fm_end, int *start_stripe) +u64 fiemap_calc_fm_end_offset(struct ll_user_fiemap *fiemap, + struct lov_stripe_md *lsm, u64 fm_start, + u64 fm_end, int *start_stripe) { - obd_size local_end = fiemap->fm_extents[0].fe_logical; - obd_off lun_start, lun_end; - obd_size fm_end_offset; + u64 local_end = fiemap->fm_extents[0].fe_logical; + u64 lun_start, lun_end; + u64 fm_end_offset; int stripe_no = -1, i; if (fiemap->fm_extent_count == 0 || @@ -2137,12 +1663,12 @@ obd_size fiemap_calc_fm_end_offset(struct ll_user_fiemap *fiemap, * * \retval last_stripe return the last stripe of the mapping */ -int fiemap_calc_last_stripe(struct lov_stripe_md *lsm, obd_size fm_start, - obd_size fm_end, int start_stripe, +int fiemap_calc_last_stripe(struct lov_stripe_md *lsm, u64 fm_start, + u64 fm_end, int start_stripe, int *stripe_count) { int last_stripe; - obd_off obd_start, obd_end; + u64 obd_start, obd_end; int i, j; if (fm_end - fm_start > lsm->lsm_stripe_size * lsm->lsm_stripe_count) { @@ -2206,8 +1732,8 @@ static int lov_fiemap(struct lov_obd *lov, __u32 keylen, void *key, int count_local; unsigned int get_num_extents = 0; int ost_index = 0, actual_start_stripe, start_stripe; - obd_size fm_start, fm_end, fm_length, fm_end_offset; - obd_size curr_loc; + u64 fm_start, fm_end, fm_length, fm_end_offset; + u64 curr_loc; int current_extent = 0, rc = 0, i; int ost_eof = 0; /* EOF for object */ int ost_done = 0; /* done with required mapping for this OST? */ @@ -2215,15 +1741,19 @@ static int lov_fiemap(struct lov_obd *lov, __u32 keylen, void *key, int cur_stripe = 0, cur_stripe_wrap = 0, stripe_count; unsigned int buffer_size = FIEMAP_BUFFER_SIZE; - if (!lsm_has_objects(lsm)) - GOTO(out, rc = 0); + if (!lsm_has_objects(lsm)) { + rc = 0; + goto out; + } if (fiemap_count_to_size(fm_key->fiemap.fm_extent_count) < buffer_size) buffer_size = fiemap_count_to_size(fm_key->fiemap.fm_extent_count); OBD_ALLOC_LARGE(fm_local, buffer_size); - if (fm_local == NULL) - GOTO(out, rc = -ENOMEM); + if (fm_local == NULL) { + rc = -ENOMEM; + goto out; + } lcl_fm_ext = &fm_local->fm_extents[0]; count_local = fiemap_size_to_count(buffer_size); @@ -2244,8 +1774,10 @@ static int lov_fiemap(struct lov_obd *lov, __u32 keylen, void *key, fm_end_offset = fiemap_calc_fm_end_offset(fiemap, lsm, fm_start, fm_end, &start_stripe); - if (fm_end_offset == -EINVAL) - GOTO(out, rc = -EINVAL); + if (fm_end_offset == -EINVAL) { + rc = -EINVAL; + goto out; + } if (fiemap_count_to_size(fiemap->fm_extent_count) > *vallen) fiemap->fm_extent_count = fiemap_size_to_count(*vallen); @@ -2256,9 +1788,9 @@ static int lov_fiemap(struct lov_obd *lov, __u32 keylen, void *key, /* Check each stripe */ for (cur_stripe = start_stripe, i = 0; i < stripe_count; i++, cur_stripe = (cur_stripe + 1) % lsm->lsm_stripe_count) { - obd_size req_fm_len; /* Stores length of required mapping */ - obd_size len_mapped_single_call; - obd_off lun_start, lun_end, obd_object_end; + u64 req_fm_len; /* Stores length of required mapping */ + u64 len_mapped_single_call; + u64 lun_start, lun_end, obd_object_end; unsigned int ext_count; cur_stripe_wrap = cur_stripe; @@ -2314,8 +1846,11 @@ static int lov_fiemap(struct lov_obd *lov, __u32 keylen, void *key, fm_key->oa.o_oi = lsm->lsm_oinfo[cur_stripe]->loi_oi; ost_index = lsm->lsm_oinfo[cur_stripe]->loi_ost_idx; - if (ost_index < 0 || ost_index >=lov->desc.ld_tgt_count) - GOTO(out, rc = -EINVAL); + if (ost_index < 0 || + ost_index >= lov->desc.ld_tgt_count) { + rc = -EINVAL; + goto out; + } /* If OST is inactive, return extent with UNKNOWN flag */ if (!lov->lov_tgts[ost_index]->ltd_active) { @@ -2338,7 +1873,7 @@ static int lov_fiemap(struct lov_obd *lov, __u32 keylen, void *key, lov->lov_tgts[ost_index]->ltd_exp, keylen, key, vallen, fm_local, lsm); if (rc != 0) - GOTO(out, rc); + goto out; inactive_tgt: ext_count = fm_local->fm_mapped_extents; @@ -2441,8 +1976,10 @@ static int lov_get_info(const struct lu_env *env, struct obd_export *exp, struct lov_oinfo *loi; __u32 *stripe = val; - if (*vallen < sizeof(*stripe)) - GOTO(out, rc = -EFAULT); + if (*vallen < sizeof(*stripe)) { + rc = -EFAULT; + goto out; + } *vallen = sizeof(*stripe); /* XXX This is another one of those bits that will need to @@ -2459,34 +1996,40 @@ static int lov_get_info(const struct lu_env *env, struct obd_export *exp, data->lock->l_conn_export && ostid_res_name_eq(&loi->loi_oi, res_id)) { *stripe = i; - GOTO(out, rc = 0); + rc = 0; + goto out; } } LDLM_ERROR(data->lock, "lock on inode without such object"); dump_lsm(D_ERROR, lsm); - GOTO(out, rc = -ENXIO); + rc = -ENXIO; + goto out; } else if (KEY_IS(KEY_LAST_ID)) { struct obd_id_info *info = val; - __u32 size = sizeof(obd_id); + __u32 size = sizeof(u64); struct lov_tgt_desc *tgt; LASSERT(*vallen == sizeof(struct obd_id_info)); tgt = lov->lov_tgts[info->idx]; - if (!tgt || !tgt->ltd_active) - GOTO(out, rc = -ESRCH); + if (!tgt || !tgt->ltd_active) { + rc = -ESRCH; + goto out; + } rc = obd_get_info(env, tgt->ltd_exp, keylen, key, &size, info->data, NULL); - GOTO(out, rc = 0); + rc = 0; + goto out; } else if (KEY_IS(KEY_LOVDESC)) { struct lov_desc *desc_ret = val; *desc_ret = lov->desc; - GOTO(out, rc = 0); + rc = 0; + goto out; } else if (KEY_IS(KEY_FIEMAP)) { rc = lov_fiemap(lov, keylen, key, vallen, val, lsm); - GOTO(out, rc); + goto out; } else if (KEY_IS(KEY_CONNECT_FLAG)) { struct lov_tgt_desc *tgt; __u64 ost_idx = *((__u64 *)val); @@ -2495,14 +2038,18 @@ static int lov_get_info(const struct lu_env *env, struct obd_export *exp, LASSERT(ost_idx < lov->desc.ld_tgt_count); tgt = lov->lov_tgts[ost_idx]; - if (!tgt || !tgt->ltd_exp) - GOTO(out, rc = -ESRCH); + if (!tgt || !tgt->ltd_exp) { + rc = -ESRCH; + goto out; + } *((__u64 *)val) = exp_connect_flags(tgt->ltd_exp); - GOTO(out, rc = 0); + rc = 0; + goto out; } else if (KEY_IS(KEY_TGT_COUNT)) { *((int *)val) = lov->desc.ld_tgt_count; - GOTO(out, rc = 0); + rc = 0; + goto out; } rc = -EINVAL; @@ -2513,12 +2060,12 @@ out: } static int lov_set_info_async(const struct lu_env *env, struct obd_export *exp, - obd_count keylen, void *key, obd_count vallen, + u32 keylen, void *key, u32 vallen, void *val, struct ptlrpc_request_set *set) { struct obd_device *obddev = class_exp2obd(exp); struct lov_obd *lov = &obddev->u.lov; - obd_count count; + u32 count; int i, rc = 0, err; struct lov_tgt_desc *tgt; unsigned incr, check_uuid, @@ -2538,7 +2085,7 @@ static int lov_set_info_async(const struct lu_env *env, struct obd_export *exp, if (KEY_IS(KEY_NEXT_ID)) { count = vallen / sizeof(struct obd_id_info); - vallen = sizeof(obd_id); + vallen = sizeof(u64); incr = sizeof(struct obd_id_info); do_inactive = 1; next_id = 1; @@ -2625,30 +2172,8 @@ static int lov_set_info_async(const struct lu_env *env, struct obd_export *exp, return rc; } -static int lov_extent_calc(struct obd_export *exp, struct lov_stripe_md *lsm, - int cmd, __u64 *offset) -{ - __u32 ssize = lsm->lsm_stripe_size; - __u64 start; - - start = *offset; - lov_do_div64(start, ssize); - start = start * ssize; - - CDEBUG(D_DLMTRACE, "offset %llu, stripe %u, start %llu, end %llu\n", - *offset, ssize, start, start + ssize - 1); - if (cmd == OBD_CALC_STRIPE_END) { - *offset = start + ssize - 1; - } else if (cmd == OBD_CALC_STRIPE_START) { - *offset = start; - } else { - LBUG(); - } - - return 0; -} - void lov_stripe_lock(struct lov_stripe_md *md) + __acquires(&md->lsm_lock) { LASSERT(md->lsm_lock_owner != current_pid()); spin_lock(&md->lsm_lock); @@ -2658,6 +2183,7 @@ void lov_stripe_lock(struct lov_stripe_md *md) EXPORT_SYMBOL(lov_stripe_lock); void lov_stripe_unlock(struct lov_stripe_md *md) + __releases(&md->lsm_lock) { LASSERT(md->lsm_lock_owner == current_pid()); md->lsm_lock_owner = 0; @@ -2783,24 +2309,13 @@ struct obd_ops lov_obd_ops = { .o_unpackmd = lov_unpackmd, .o_create = lov_create, .o_destroy = lov_destroy, - .o_getattr = lov_getattr, .o_getattr_async = lov_getattr_async, - .o_setattr = lov_setattr, .o_setattr_async = lov_setattr_async, - .o_brw = lov_brw, - .o_merge_lvb = lov_merge_lvb, .o_adjust_kms = lov_adjust_kms, - .o_punch = lov_punch, - .o_sync = lov_sync, - .o_enqueue = lov_enqueue, - .o_change_cbdata = lov_change_cbdata, .o_find_cbdata = lov_find_cbdata, - .o_cancel = lov_cancel, - .o_cancel_unused = lov_cancel_unused, .o_iocontrol = lov_iocontrol, .o_get_info = lov_get_info, .o_set_info_async = lov_set_info_async, - .o_extent_calc = lov_extent_calc, .o_notify = lov_notify, .o_pool_new = lov_pool_new, .o_pool_rem = lov_pool_remove, diff --git a/drivers/staging/lustre/lustre/lov/lov_object.c b/drivers/staging/lustre/lustre/lov/lov_object.c index 992c80ab3d53..4cab730ab429 100644 --- a/drivers/staging/lustre/lustre/lov/lov_object.c +++ b/drivers/staging/lustre/lustre/lov/lov_object.c @@ -233,7 +233,7 @@ static int lov_init_raid0(const struct lu_env *env, result = ostid_to_fid(ofid, &oinfo->loi_oi, oinfo->loi_ost_idx); if (result != 0) - GOTO(out, result); + goto out; subdev = lovsub2cl_dev(dev->ld_target[ost_idx]); subconf->u.coc_oinfo = oinfo; @@ -747,7 +747,8 @@ static int lov_conf_set(const struct lu_env *env, struct cl_object *obj, lov_conf_lock(lov); if (conf->coc_opc == OBJECT_CONF_INVALIDATE) { lov->lo_layout_invalid = true; - GOTO(out, result = 0); + result = 0; + goto out; } if (conf->coc_opc == OBJECT_CONF_WAIT) { @@ -757,7 +758,7 @@ static int lov_conf_set(const struct lu_env *env, struct cl_object *obj, result = lov_layout_wait(env, lov); lov_conf_lock(lov); } - GOTO(out, result); + goto out; } LASSERT(conf->coc_opc == OBJECT_CONF_SET); @@ -770,13 +771,15 @@ static int lov_conf_set(const struct lu_env *env, struct cl_object *obj, (lov->lo_lsm->lsm_pattern == lsm->lsm_pattern))) { /* same version of layout */ lov->lo_layout_invalid = false; - GOTO(out, result = 0); + result = 0; + goto out; } /* will change layout - check if there still exists active IO. */ if (atomic_read(&lov->lo_active_ios) > 0) { lov->lo_layout_invalid = true; - GOTO(out, result = -EBUSY); + result = -EBUSY; + goto out; } lov->lo_layout_invalid = lov_layout_change(env, lov, conf); diff --git a/drivers/staging/lustre/lustre/lov/lov_offset.c b/drivers/staging/lustre/lustre/lov/lov_offset.c index 8e1c3bacc0a0..9c8c77c05a8a 100644 --- a/drivers/staging/lustre/lustre/lov/lov_offset.c +++ b/drivers/staging/lustre/lustre/lov/lov_offset.c @@ -43,13 +43,13 @@ #include "lov_internal.h" /* compute object size given "stripeno" and the ost size */ -obd_size lov_stripe_size(struct lov_stripe_md *lsm, obd_size ost_size, +u64 lov_stripe_size(struct lov_stripe_md *lsm, u64 ost_size, int stripeno) { unsigned long ssize = lsm->lsm_stripe_size; unsigned long stripe_size; - obd_off swidth; - obd_size lov_size; + u64 swidth; + u64 lov_size; int magic = lsm->lsm_magic; if (ost_size == 0) @@ -116,11 +116,11 @@ obd_size lov_stripe_size(struct lov_stripe_md *lsm, obd_size ost_size, * was moved forward to the start of the stripe in question; 0 when it * falls in the stripe and no shifting was done; > 0 when the offset * was outside the stripe and was pulled back to its final byte. */ -int lov_stripe_offset(struct lov_stripe_md *lsm, obd_off lov_off, - int stripeno, obd_off *obdoff) +int lov_stripe_offset(struct lov_stripe_md *lsm, u64 lov_off, + int stripeno, u64 *obdoff) { unsigned long ssize = lsm->lsm_stripe_size; - obd_off stripe_off, this_stripe, swidth; + u64 stripe_off, this_stripe, swidth; int magic = lsm->lsm_magic; int ret = 0; @@ -137,7 +137,7 @@ int lov_stripe_offset(struct lov_stripe_md *lsm, obd_off lov_off, /* lov_do_div64(a, b) returns a % b, and a = a / b */ stripe_off = lov_do_div64(lov_off, swidth); - this_stripe = (obd_off)stripeno * ssize; + this_stripe = (u64)stripeno * ssize; if (stripe_off < this_stripe) { stripe_off = 0; ret = -1; @@ -173,11 +173,11 @@ int lov_stripe_offset(struct lov_stripe_md *lsm, obd_off lov_off, * | 0 | 1 | 2 | 0 | 1 | 2 | * --------------------------------------------------------------------- */ -obd_off lov_size_to_stripe(struct lov_stripe_md *lsm, obd_off file_size, - int stripeno) +u64 lov_size_to_stripe(struct lov_stripe_md *lsm, u64 file_size, + int stripeno) { unsigned long ssize = lsm->lsm_stripe_size; - obd_off stripe_off, this_stripe, swidth; + u64 stripe_off, this_stripe, swidth; int magic = lsm->lsm_magic; if (file_size == OBD_OBJECT_EOF) @@ -190,7 +190,7 @@ obd_off lov_size_to_stripe(struct lov_stripe_md *lsm, obd_off file_size, /* lov_do_div64(a, b) returns a % b, and a = a / b */ stripe_off = lov_do_div64(file_size, swidth); - this_stripe = (obd_off)stripeno * ssize; + this_stripe = (u64)stripeno * ssize; if (stripe_off < this_stripe) { /* Move to end of previous stripe, or zero */ if (file_size > 0) { @@ -215,8 +215,7 @@ obd_off lov_size_to_stripe(struct lov_stripe_md *lsm, obd_off file_size, * that is contained within the lov extent. this returns true if the given * stripe does intersect with the lov extent. */ int lov_stripe_intersects(struct lov_stripe_md *lsm, int stripeno, - obd_off start, obd_off end, - obd_off *obd_start, obd_off *obd_end) + u64 start, u64 end, u64 *obd_start, u64 *obd_end) { int start_side, end_side; @@ -247,10 +246,10 @@ int lov_stripe_intersects(struct lov_stripe_md *lsm, int stripeno, } /* compute which stripe number "lov_off" will be written into */ -int lov_stripe_number(struct lov_stripe_md *lsm, obd_off lov_off) +int lov_stripe_number(struct lov_stripe_md *lsm, u64 lov_off) { unsigned long ssize = lsm->lsm_stripe_size; - obd_off stripe_off, swidth; + u64 stripe_off, swidth; int magic = lsm->lsm_magic; LASSERT(lsm_op_find(magic) != NULL); diff --git a/drivers/staging/lustre/lustre/lov/lov_pack.c b/drivers/staging/lustre/lustre/lov/lov_pack.c index a5b190f32c0f..5edd6a3a9c54 100644 --- a/drivers/staging/lustre/lustre/lov/lov_pack.c +++ b/drivers/staging/lustre/lustre/lov/lov_pack.c @@ -95,7 +95,7 @@ void lov_dump_lmm_v1(int level, struct lov_mds_md_v1 *lmm) void lov_dump_lmm_v3(int level, struct lov_mds_md_v3 *lmm) { lov_dump_lmm_common(level, lmm); - CDEBUG(level,"pool_name "LOV_POOLNAMEF"\n", lmm->lmm_pool_name); + CDEBUG(level, "pool_name "LOV_POOLNAMEF"\n", lmm->lmm_pool_name); lov_dump_lmm_objects(level, lmm->lmm_objects, le16_to_cpu(lmm->lmm_stripe_count)); } @@ -125,7 +125,7 @@ void lov_dump_lmm(int level, void *lmm) * * XXX In the future, this will be enhanced to get the EA size from the * underlying OSC device(s) to get their EA sizes so we can stack - * LOVs properly. For now lov_mds_md_size() just assumes one obd_id + * LOVs properly. For now lov_mds_md_size() just assumes one u64 * per stripe. */ int lov_packmd(struct obd_export *exp, struct lov_mds_md **lmmp, @@ -403,178 +403,6 @@ int lov_unpackmd(struct obd_export *exp, struct lov_stripe_md **lsmp, return lsm_size; } -static int __lov_setstripe(struct obd_export *exp, int max_lmm_size, - struct lov_stripe_md **lsmp, - struct lov_user_md *lump) -{ - struct obd_device *obd = class_exp2obd(exp); - struct lov_obd *lov = &obd->u.lov; - char buffer[sizeof(struct lov_user_md_v3)]; - struct lov_user_md_v3 *lumv3 = (struct lov_user_md_v3 *)&buffer[0]; - struct lov_user_md_v1 *lumv1 = (struct lov_user_md_v1 *)&buffer[0]; - int lmm_magic; - __u16 stripe_count; - int rc; - int cplen = 0; - - rc = lov_lum_swab_if_needed(lumv3, &lmm_magic, lump); - if (rc) - return rc; - - /* in the rest of the tests, as *lumv1 and lumv3 have the same - * fields, we use lumv1 to avoid code duplication */ - - if (lumv1->lmm_pattern == 0) { - lumv1->lmm_pattern = lov->desc.ld_pattern ? - lov->desc.ld_pattern : LOV_PATTERN_RAID0; - } - - if (lov_pattern(lumv1->lmm_pattern) != LOV_PATTERN_RAID0) { - CDEBUG(D_IOCTL, "bad userland stripe pattern: %#x\n", - lumv1->lmm_pattern); - return -EINVAL; - } - - /* 64kB is the largest common page size we see (ia64), and matches the - * check in lfs */ - if (lumv1->lmm_stripe_size & (LOV_MIN_STRIPE_SIZE - 1)) { - CDEBUG(D_IOCTL, "stripe size %u not multiple of %u, fixing\n", - lumv1->lmm_stripe_size, LOV_MIN_STRIPE_SIZE); - lumv1->lmm_stripe_size = LOV_MIN_STRIPE_SIZE; - } - - if ((lumv1->lmm_stripe_offset >= lov->desc.ld_tgt_count) && - (lumv1->lmm_stripe_offset != - (typeof(lumv1->lmm_stripe_offset))(-1))) { - CDEBUG(D_IOCTL, "stripe offset %u > number of OSTs %u\n", - lumv1->lmm_stripe_offset, lov->desc.ld_tgt_count); - return -EINVAL; - } - stripe_count = lov_get_stripecnt(lov, lmm_magic, - lumv1->lmm_stripe_count); - - if (max_lmm_size) { - int max_stripes = (max_lmm_size - - lov_mds_md_size(0, lmm_magic)) / - sizeof(struct lov_ost_data_v1); - if (unlikely(max_stripes < stripe_count)) { - CDEBUG(D_IOCTL, "stripe count reset from %d to %d\n", - stripe_count, max_stripes); - stripe_count = max_stripes; - } - } - - if (lmm_magic == LOV_USER_MAGIC_V3) { - struct pool_desc *pool; - - /* In the function below, .hs_keycmp resolves to - * pool_hashkey_keycmp() */ - /* coverity[overrun-buffer-val] */ - pool = lov_find_pool(lov, lumv3->lmm_pool_name); - if (pool != NULL) { - if (lumv3->lmm_stripe_offset != - (typeof(lumv3->lmm_stripe_offset))(-1)) { - rc = lov_check_index_in_pool( - lumv3->lmm_stripe_offset, pool); - if (rc < 0) { - lov_pool_putref(pool); - return -EINVAL; - } - } - - if (stripe_count > pool_tgt_count(pool)) - stripe_count = pool_tgt_count(pool); - - lov_pool_putref(pool); - } - } - - if (lumv1->lmm_pattern & LOV_PATTERN_F_RELEASED) - stripe_count = 0; - - rc = lov_alloc_memmd(lsmp, stripe_count, lumv1->lmm_pattern, lmm_magic); - - if (rc >= 0) { - (*lsmp)->lsm_oinfo[0]->loi_ost_idx = lumv1->lmm_stripe_offset; - (*lsmp)->lsm_stripe_size = lumv1->lmm_stripe_size; - if (lmm_magic == LOV_USER_MAGIC_V3) { - cplen = strlcpy((*lsmp)->lsm_pool_name, - lumv3->lmm_pool_name, - sizeof((*lsmp)->lsm_pool_name)); - if (cplen >= sizeof((*lsmp)->lsm_pool_name)) - rc = -E2BIG; - } - rc = 0; - } - - return rc; -} - -/* Configure object striping information on a new file. - * - * @lmmu is a pointer to a user struct with one or more of the fields set to - * indicate the application preference: lmm_stripe_count, lmm_stripe_size, - * lmm_stripe_offset, and lmm_stripe_pattern. lmm_magic must be LOV_MAGIC. - * @lsmp is a pointer to an in-core stripe MD that needs to be filled in. - */ -int lov_setstripe(struct obd_export *exp, int max_lmm_size, - struct lov_stripe_md **lsmp, struct lov_user_md *lump) -{ - int rc; - mm_segment_t seg; - - seg = get_fs(); - set_fs(KERNEL_DS); - - rc = __lov_setstripe(exp, max_lmm_size, lsmp, lump); - set_fs(seg); - return rc; -} - -int lov_setea(struct obd_export *exp, struct lov_stripe_md **lsmp, - struct lov_user_md *lump) -{ - int i; - int rc; - struct obd_export *oexp; - struct lov_obd *lov = &exp->exp_obd->u.lov; - obd_id last_id = 0; - struct lov_user_ost_data_v1 *lmm_objects; - - if (lump->lmm_magic == LOV_USER_MAGIC_V3) - lmm_objects = ((struct lov_user_md_v3 *)lump)->lmm_objects; - else - lmm_objects = lump->lmm_objects; - - for (i = 0; i < lump->lmm_stripe_count; i++) { - __u32 len = sizeof(last_id); - oexp = lov->lov_tgts[lmm_objects[i].l_ost_idx]->ltd_exp; - rc = obd_get_info(NULL, oexp, sizeof(KEY_LAST_ID), KEY_LAST_ID, - &len, &last_id, NULL); - if (rc) - return rc; - if (ostid_id(&lmm_objects[i].l_ost_oi) > last_id) { - CERROR("Setting EA for object > than last id on" - " ost idx %d "DOSTID" > %lld \n", - lmm_objects[i].l_ost_idx, - POSTID(&lmm_objects[i].l_ost_oi), last_id); - return -EINVAL; - } - } - - rc = lov_setstripe(exp, 0, lsmp, lump); - if (rc) - return rc; - - for (i = 0; i < lump->lmm_stripe_count; i++) { - (*lsmp)->lsm_oinfo[i]->loi_ost_idx = - lmm_objects[i].l_ost_idx; - (*lsmp)->lsm_oinfo[i]->loi_oi = lmm_objects[i].l_ost_oi; - } - return 0; -} - - /* Retrieve object striping information. * * @lump is a pointer to an in-core struct with lmm_ost_count indicating @@ -607,22 +435,27 @@ int lov_getstripe(struct obd_export *exp, struct lov_stripe_md *lsm, /* we only need the header part from user space to get lmm_magic and * lmm_stripe_count, (the header part is common to v1 and v3) */ lum_size = sizeof(struct lov_user_md_v1); - if (copy_from_user(&lum, lump, lum_size)) - GOTO(out_set, rc = -EFAULT); + if (copy_from_user(&lum, lump, lum_size)) { + rc = -EFAULT; + goto out_set; + } else if ((lum.lmm_magic != LOV_USER_MAGIC) && - (lum.lmm_magic != LOV_USER_MAGIC_V3)) - GOTO(out_set, rc = -EINVAL); + (lum.lmm_magic != LOV_USER_MAGIC_V3)) { + rc = -EINVAL; + goto out_set; + } if (lum.lmm_stripe_count && (lum.lmm_stripe_count < lsm->lsm_stripe_count)) { /* Return right size of stripe to user */ lum.lmm_stripe_count = lsm->lsm_stripe_count; rc = copy_to_user(lump, &lum, lum_size); - GOTO(out_set, rc = -EOVERFLOW); + rc = -EOVERFLOW; + goto out_set; } rc = lov_packmd(exp, &lmmk, lsm); if (rc < 0) - GOTO(out_set, rc); + goto out_set; lmm_size = rc; rc = 0; @@ -657,8 +490,10 @@ int lov_getstripe(struct obd_export *exp, struct lov_stripe_md *lsm, /* User wasn't expecting this many OST entries */ if (lum.lmm_stripe_count == 0) lmm_size = lum_size; - else if (lum.lmm_stripe_count < lmmk->lmm_stripe_count) - GOTO(out_set, rc = -EOVERFLOW); + else if (lum.lmm_stripe_count < lmmk->lmm_stripe_count) { + rc = -EOVERFLOW; + goto out_set; + } /* * Have a difference between lov_mds_md & lov_user_md. * So we have to re-order the data before copy to user. diff --git a/drivers/staging/lustre/lustre/lov/lov_page.c b/drivers/staging/lustre/lustre/lov/lov_page.c index 674e61781c20..c4596e8e5783 100644 --- a/drivers/staging/lustre/lustre/lov/lov_page.c +++ b/drivers/staging/lustre/lustre/lov/lov_page.c @@ -165,7 +165,7 @@ int lov_page_init_raid0(const struct lu_env *env, struct cl_object *obj, struct lov_io_sub *sub; struct lov_page *lpg = cl_object_page_slice(obj, page); loff_t offset; - obd_off suboff; + u64 suboff; int stripe; int rc; @@ -180,15 +180,19 @@ int lov_page_init_raid0(const struct lu_env *env, struct cl_object *obj, cl_page_slice_add(page, &lpg->lps_cl, obj, &lov_page_ops); sub = lov_sub_get(env, lio, stripe); - if (IS_ERR(sub)) - GOTO(out, rc = PTR_ERR(sub)); + if (IS_ERR(sub)) { + rc = PTR_ERR(sub); + goto out; + } subobj = lovsub2cl(r0->lo_sub[stripe]); subpage = cl_page_find_sub(sub->sub_env, subobj, cl_index(subobj, suboff), vmpage, page); lov_sub_put(sub); - if (IS_ERR(subpage)) - GOTO(out, rc = PTR_ERR(subpage)); + if (IS_ERR(subpage)) { + rc = PTR_ERR(subpage); + goto out; + } if (likely(subpage->cp_parent == page)) { lu_ref_add(&subpage->cp_reference, "lov", page); diff --git a/drivers/staging/lustre/lustre/lov/lov_pool.c b/drivers/staging/lustre/lustre/lov/lov_pool.c index 91b3509a8083..0e0ea60de4c8 100644 --- a/drivers/staging/lustre/lustre/lov/lov_pool.c +++ b/drivers/staging/lustre/lustre/lov/lov_pool.c @@ -107,7 +107,7 @@ static void *pool_key(struct hlist_node *hnode) struct pool_desc *pool; pool = hlist_entry(hnode, struct pool_desc, pool_hash); - return (pool->pool_name); + return pool->pool_name; } static int pool_hashkey_keycmp(const void *key, struct hlist_node *compared_hnode) @@ -367,12 +367,14 @@ int lov_ost_pool_add(struct ost_pool *op, __u32 idx, unsigned int min_count) rc = lov_ost_pool_extend(op, min_count); if (rc) - GOTO(out, rc); + goto out; /* search ost in pool array */ for (i = 0; i < op->op_count; i++) { - if (op->op_array[i] == idx) - GOTO(out, rc = -EEXIST); + if (op->op_array[i] == idx) { + rc = -EEXIST; + goto out; + } } /* ost not found we add it */ op->op_array[op->op_count] = idx; @@ -443,12 +445,12 @@ int lov_pool_new(struct obd_device *obd, char *poolname) atomic_set(&new_pool->pool_refcount, 1); rc = lov_ost_pool_init(&new_pool->pool_obds, 0); if (rc) - GOTO(out_err, rc); + goto out_err; memset(&(new_pool->pool_rr), 0, sizeof(struct lov_qos_rr)); rc = lov_ost_pool_init(&new_pool->pool_rr.lqr_pool, 0); if (rc) - GOTO(out_free_pool_obds, rc); + goto out_free_pool_obds; INIT_HLIST_NODE(&new_pool->pool_hash); @@ -475,8 +477,10 @@ int lov_pool_new(struct obd_device *obd, char *poolname) /* add to find only when it fully ready */ rc = cfs_hash_add_unique(lov->lov_pools_hash_body, poolname, &new_pool->pool_hash); - if (rc) - GOTO(out_err, rc = -EEXIST); + if (rc) { + rc = -EEXIST; + goto out_err; + } CDEBUG(D_CONFIG, LOV_POOLNAMEF" is pool #%d\n", poolname, lov->lov_pool_count); @@ -555,12 +559,14 @@ int lov_pool_add(struct obd_device *obd, char *poolname, char *ostname) break; } /* test if ost found in lov */ - if (lov_idx == lov->desc.ld_tgt_count) - GOTO(out, rc = -EINVAL); + if (lov_idx == lov->desc.ld_tgt_count) { + rc = -EINVAL; + goto out; + } rc = lov_ost_pool_add(&pool->pool_obds, lov_idx, lov->lov_tgt_size); if (rc) - GOTO(out, rc); + goto out; pool->pool_rr.lqr_dirty = 1; @@ -601,8 +607,10 @@ int lov_pool_remove(struct obd_device *obd, char *poolname, char *ostname) } /* test if ost found in lov */ - if (lov_idx == lov->desc.ld_tgt_count) - GOTO(out, rc = -EINVAL); + if (lov_idx == lov->desc.ld_tgt_count) { + rc = -EINVAL; + goto out; + } lov_ost_pool_remove(&pool->pool_obds, lov_idx); @@ -630,8 +638,10 @@ int lov_check_index_in_pool(__u32 idx, struct pool_desc *pool) down_read(&pool_tgt_rw_sem(pool)); for (i = 0; i < pool_tgt_count(pool); i++) { - if (pool_tgt_array(pool)[i] == idx) - GOTO(out, rc = 0); + if (pool_tgt_array(pool)[i] == idx) { + rc = 0; + goto out; + } } rc = -ENOENT; out: diff --git a/drivers/staging/lustre/lustre/lov/lov_request.c b/drivers/staging/lustre/lustre/lov/lov_request.c index e4bb02a54b0d..7358b9d29103 100644 --- a/drivers/staging/lustre/lustre/lov/lov_request.c +++ b/drivers/staging/lustre/lustre/lov/lov_request.c @@ -39,7 +39,6 @@ #include "../../include/linux/libcfs/libcfs.h" #include "../include/obd_class.h" -#include "../include/obd_ost.h" #include "../include/lustre/lustre_idl.h" #include "lov_internal.h" @@ -168,14 +167,20 @@ int lov_check_and_wait_active(struct lov_obd *lov, int ost_idx) tgt = lov->lov_tgts[ost_idx]; - if (unlikely(tgt == NULL)) - GOTO(out, rc = 0); + if (unlikely(tgt == NULL)) { + rc = 0; + goto out; + } - if (likely(tgt->ltd_active)) - GOTO(out, rc = 1); + if (likely(tgt->ltd_active)) { + rc = 1; + goto out; + } - if (tgt->ltd_exp && class_exp2cliimp(tgt->ltd_exp)->imp_connect_tried) - GOTO(out, rc = 0); + if (tgt->ltd_exp && class_exp2cliimp(tgt->ltd_exp)->imp_connect_tried) { + rc = 0; + goto out; + } mutex_unlock(&lov->lov_lock); @@ -194,418 +199,6 @@ out: return rc; } -static int lov_update_enqueue_lov(struct obd_export *exp, - struct lustre_handle *lov_lockhp, - struct lov_oinfo *loi, __u64 flags, int idx, - struct ost_id *oi, int rc) -{ - struct lov_obd *lov = &exp->exp_obd->u.lov; - - if (rc != ELDLM_OK && - !(rc == ELDLM_LOCK_ABORTED && (flags & LDLM_FL_HAS_INTENT))) { - memset(lov_lockhp, 0, sizeof(*lov_lockhp)); - if (lov->lov_tgts[idx] && lov->lov_tgts[idx]->ltd_active) { - /* -EUSERS used by OST to report file contention */ - if (rc != -EINTR && rc != -EUSERS) - CERROR("%s: enqueue objid "DOSTID" subobj" - DOSTID" on OST idx %d: rc %d\n", - exp->exp_obd->obd_name, - POSTID(oi), POSTID(&loi->loi_oi), - loi->loi_ost_idx, rc); - } else - rc = ELDLM_OK; - } - return rc; -} - -int lov_update_enqueue_set(struct lov_request *req, __u32 mode, int rc) -{ - struct lov_request_set *set = req->rq_rqset; - struct lustre_handle *lov_lockhp; - struct obd_info *oi = set->set_oi; - struct lov_oinfo *loi; - - LASSERT(oi != NULL); - - lov_lockhp = set->set_lockh->llh_handles + req->rq_stripe; - loi = oi->oi_md->lsm_oinfo[req->rq_stripe]; - - /* XXX LOV STACKING: OSC gets a copy, created in lov_prep_enqueue_set - * and that copy can be arbitrarily out of date. - * - * The LOV API is due for a serious rewriting anyways, and this - * can be addressed then. */ - - lov_stripe_lock(oi->oi_md); - osc_update_enqueue(lov_lockhp, loi, oi->oi_flags, - &req->rq_oi.oi_md->lsm_oinfo[0]->loi_lvb, mode, rc); - if (rc == ELDLM_LOCK_ABORTED && (oi->oi_flags & LDLM_FL_HAS_INTENT)) - memset(lov_lockhp, 0, sizeof(*lov_lockhp)); - rc = lov_update_enqueue_lov(set->set_exp, lov_lockhp, loi, oi->oi_flags, - req->rq_idx, &oi->oi_md->lsm_oi, rc); - lov_stripe_unlock(oi->oi_md); - lov_update_set(set, req, rc); - return rc; -} - -/* The callback for osc_enqueue that updates lov info for every OSC request. */ -static int cb_update_enqueue(void *cookie, int rc) -{ - struct obd_info *oinfo = cookie; - struct ldlm_enqueue_info *einfo; - struct lov_request *lovreq; - - lovreq = container_of(oinfo, struct lov_request, rq_oi); - einfo = lovreq->rq_rqset->set_ei; - return lov_update_enqueue_set(lovreq, einfo->ei_mode, rc); -} - -static int enqueue_done(struct lov_request_set *set, __u32 mode) -{ - struct lov_request *req; - struct lov_obd *lov = &set->set_exp->exp_obd->u.lov; - int completes = atomic_read(&set->set_completes); - int rc = 0; - - /* enqueue/match success, just return */ - if (completes && completes == atomic_read(&set->set_success)) - return 0; - - /* cancel enqueued/matched locks */ - list_for_each_entry(req, &set->set_list, rq_link) { - struct lustre_handle *lov_lockhp; - - if (!req->rq_complete || req->rq_rc) - continue; - - lov_lockhp = set->set_lockh->llh_handles + req->rq_stripe; - LASSERT(lov_lockhp); - if (!lustre_handle_is_used(lov_lockhp)) - continue; - - rc = obd_cancel(lov->lov_tgts[req->rq_idx]->ltd_exp, - req->rq_oi.oi_md, mode, lov_lockhp); - if (rc && lov->lov_tgts[req->rq_idx] && - lov->lov_tgts[req->rq_idx]->ltd_active) - CERROR("%s: cancelling obdjid "DOSTID" on OST" - "idx %d error: rc = %d\n", - set->set_exp->exp_obd->obd_name, - POSTID(&req->rq_oi.oi_md->lsm_oi), - req->rq_idx, rc); - } - if (set->set_lockh) - lov_llh_put(set->set_lockh); - return rc; -} - -int lov_fini_enqueue_set(struct lov_request_set *set, __u32 mode, int rc, - struct ptlrpc_request_set *rqset) -{ - int ret = 0; - - if (set == NULL) - return 0; - LASSERT(set->set_exp); - /* Do enqueue_done only for sync requests and if any request - * succeeded. */ - if (!rqset) { - if (rc) - atomic_set(&set->set_completes, 0); - ret = enqueue_done(set, mode); - } else if (set->set_lockh) - lov_llh_put(set->set_lockh); - - lov_put_reqset(set); - - return rc ? rc : ret; -} - -static void lov_llh_addref(void *llhp) -{ - struct lov_lock_handles *llh = llhp; - - atomic_inc(&llh->llh_refcount); - CDEBUG(D_INFO, "GETting llh %p : new refcount %d\n", llh, - atomic_read(&llh->llh_refcount)); -} - -static struct portals_handle_ops lov_handle_ops = { - .hop_addref = lov_llh_addref, - .hop_free = NULL, -}; - -static struct lov_lock_handles *lov_llh_new(struct lov_stripe_md *lsm) -{ - struct lov_lock_handles *llh; - - OBD_ALLOC(llh, sizeof(*llh) + - sizeof(*llh->llh_handles) * lsm->lsm_stripe_count); - if (llh == NULL) - return NULL; - - atomic_set(&llh->llh_refcount, 2); - llh->llh_stripe_count = lsm->lsm_stripe_count; - INIT_LIST_HEAD(&llh->llh_handle.h_link); - class_handle_hash(&llh->llh_handle, &lov_handle_ops); - - return llh; -} - -int lov_prep_enqueue_set(struct obd_export *exp, struct obd_info *oinfo, - struct ldlm_enqueue_info *einfo, - struct lov_request_set **reqset) -{ - struct lov_obd *lov = &exp->exp_obd->u.lov; - struct lov_request_set *set; - int i, rc = 0; - - OBD_ALLOC(set, sizeof(*set)); - if (set == NULL) - return -ENOMEM; - lov_init_set(set); - - set->set_exp = exp; - set->set_oi = oinfo; - set->set_ei = einfo; - set->set_lockh = lov_llh_new(oinfo->oi_md); - if (set->set_lockh == NULL) - GOTO(out_set, rc = -ENOMEM); - oinfo->oi_lockh->cookie = set->set_lockh->llh_handle.h_cookie; - - for (i = 0; i < oinfo->oi_md->lsm_stripe_count; i++) { - struct lov_oinfo *loi; - struct lov_request *req; - obd_off start, end; - - loi = oinfo->oi_md->lsm_oinfo[i]; - if (!lov_stripe_intersects(oinfo->oi_md, i, - oinfo->oi_policy.l_extent.start, - oinfo->oi_policy.l_extent.end, - &start, &end)) - continue; - - if (!lov_check_and_wait_active(lov, loi->loi_ost_idx)) { - CDEBUG(D_HA, "lov idx %d inactive\n", loi->loi_ost_idx); - continue; - } - - OBD_ALLOC(req, sizeof(*req)); - if (req == NULL) - GOTO(out_set, rc = -ENOMEM); - - req->rq_buflen = sizeof(*req->rq_oi.oi_md) + - sizeof(struct lov_oinfo *) + - sizeof(struct lov_oinfo); - OBD_ALLOC_LARGE(req->rq_oi.oi_md, req->rq_buflen); - if (req->rq_oi.oi_md == NULL) { - OBD_FREE(req, sizeof(*req)); - GOTO(out_set, rc = -ENOMEM); - } - req->rq_oi.oi_md->lsm_oinfo[0] = - ((void *)req->rq_oi.oi_md) + sizeof(*req->rq_oi.oi_md) + - sizeof(struct lov_oinfo *); - - /* Set lov request specific parameters. */ - req->rq_oi.oi_lockh = set->set_lockh->llh_handles + i; - req->rq_oi.oi_cb_up = cb_update_enqueue; - req->rq_oi.oi_flags = oinfo->oi_flags; - - LASSERT(req->rq_oi.oi_lockh); - - req->rq_oi.oi_policy.l_extent.gid = - oinfo->oi_policy.l_extent.gid; - req->rq_oi.oi_policy.l_extent.start = start; - req->rq_oi.oi_policy.l_extent.end = end; - - req->rq_idx = loi->loi_ost_idx; - req->rq_stripe = i; - - /* XXX LOV STACKING: submd should be from the subobj */ - req->rq_oi.oi_md->lsm_oi = loi->loi_oi; - req->rq_oi.oi_md->lsm_stripe_count = 0; - req->rq_oi.oi_md->lsm_oinfo[0]->loi_kms_valid = - loi->loi_kms_valid; - req->rq_oi.oi_md->lsm_oinfo[0]->loi_kms = loi->loi_kms; - req->rq_oi.oi_md->lsm_oinfo[0]->loi_lvb = loi->loi_lvb; - - lov_set_add_req(req, set); - } - if (!set->set_count) - GOTO(out_set, rc = -EIO); - *reqset = set; - return 0; -out_set: - lov_fini_enqueue_set(set, einfo->ei_mode, rc, NULL); - return rc; -} - -int lov_fini_match_set(struct lov_request_set *set, __u32 mode, __u64 flags) -{ - int rc = 0; - - if (set == NULL) - return 0; - LASSERT(set->set_exp); - rc = enqueue_done(set, mode); - if ((set->set_count == atomic_read(&set->set_success)) && - (flags & LDLM_FL_TEST_LOCK)) - lov_llh_put(set->set_lockh); - - lov_put_reqset(set); - - return rc; -} - -int lov_prep_match_set(struct obd_export *exp, struct obd_info *oinfo, - struct lov_stripe_md *lsm, ldlm_policy_data_t *policy, - __u32 mode, struct lustre_handle *lockh, - struct lov_request_set **reqset) -{ - struct lov_obd *lov = &exp->exp_obd->u.lov; - struct lov_request_set *set; - int i, rc = 0; - - OBD_ALLOC(set, sizeof(*set)); - if (set == NULL) - return -ENOMEM; - lov_init_set(set); - - set->set_exp = exp; - set->set_oi = oinfo; - set->set_oi->oi_md = lsm; - set->set_lockh = lov_llh_new(lsm); - if (set->set_lockh == NULL) - GOTO(out_set, rc = -ENOMEM); - lockh->cookie = set->set_lockh->llh_handle.h_cookie; - - for (i = 0; i < lsm->lsm_stripe_count; i++) { - struct lov_oinfo *loi; - struct lov_request *req; - obd_off start, end; - - loi = lsm->lsm_oinfo[i]; - if (!lov_stripe_intersects(lsm, i, policy->l_extent.start, - policy->l_extent.end, &start, &end)) - continue; - - /* FIXME raid1 should grace this error */ - if (!lov_check_and_wait_active(lov, loi->loi_ost_idx)) { - CDEBUG(D_HA, "lov idx %d inactive\n", loi->loi_ost_idx); - GOTO(out_set, rc = -EIO); - } - - OBD_ALLOC(req, sizeof(*req)); - if (req == NULL) - GOTO(out_set, rc = -ENOMEM); - - req->rq_buflen = sizeof(*req->rq_oi.oi_md); - OBD_ALLOC_LARGE(req->rq_oi.oi_md, req->rq_buflen); - if (req->rq_oi.oi_md == NULL) { - OBD_FREE(req, sizeof(*req)); - GOTO(out_set, rc = -ENOMEM); - } - - req->rq_oi.oi_policy.l_extent.start = start; - req->rq_oi.oi_policy.l_extent.end = end; - req->rq_oi.oi_policy.l_extent.gid = policy->l_extent.gid; - - req->rq_idx = loi->loi_ost_idx; - req->rq_stripe = i; - - /* XXX LOV STACKING: submd should be from the subobj */ - req->rq_oi.oi_md->lsm_oi = loi->loi_oi; - req->rq_oi.oi_md->lsm_stripe_count = 0; - - lov_set_add_req(req, set); - } - if (!set->set_count) - GOTO(out_set, rc = -EIO); - *reqset = set; - return rc; -out_set: - lov_fini_match_set(set, mode, 0); - return rc; -} - -int lov_fini_cancel_set(struct lov_request_set *set) -{ - int rc = 0; - - if (set == NULL) - return 0; - - LASSERT(set->set_exp); - if (set->set_lockh) - lov_llh_put(set->set_lockh); - - lov_put_reqset(set); - - return rc; -} - -int lov_prep_cancel_set(struct obd_export *exp, struct obd_info *oinfo, - struct lov_stripe_md *lsm, __u32 mode, - struct lustre_handle *lockh, - struct lov_request_set **reqset) -{ - struct lov_request_set *set; - int i, rc = 0; - - OBD_ALLOC(set, sizeof(*set)); - if (set == NULL) - return -ENOMEM; - lov_init_set(set); - - set->set_exp = exp; - set->set_oi = oinfo; - set->set_oi->oi_md = lsm; - set->set_lockh = lov_handle2llh(lockh); - if (set->set_lockh == NULL) { - CERROR("LOV: invalid lov lock handle %p\n", lockh); - GOTO(out_set, rc = -EINVAL); - } - lockh->cookie = set->set_lockh->llh_handle.h_cookie; - - for (i = 0; i < lsm->lsm_stripe_count; i++) { - struct lov_request *req; - struct lustre_handle *lov_lockhp; - struct lov_oinfo *loi = lsm->lsm_oinfo[i]; - - lov_lockhp = set->set_lockh->llh_handles + i; - if (!lustre_handle_is_used(lov_lockhp)) { - CDEBUG(D_INFO, "lov idx %d subobj "DOSTID" no lock\n", - loi->loi_ost_idx, POSTID(&loi->loi_oi)); - continue; - } - - OBD_ALLOC(req, sizeof(*req)); - if (req == NULL) - GOTO(out_set, rc = -ENOMEM); - - req->rq_buflen = sizeof(*req->rq_oi.oi_md); - OBD_ALLOC_LARGE(req->rq_oi.oi_md, req->rq_buflen); - if (req->rq_oi.oi_md == NULL) { - OBD_FREE(req, sizeof(*req)); - GOTO(out_set, rc = -ENOMEM); - } - - req->rq_idx = loi->loi_ost_idx; - req->rq_stripe = i; - - /* XXX LOV STACKING: submd should be from the subobj */ - req->rq_oi.oi_md->lsm_oi = loi->loi_oi; - req->rq_oi.oi_md->lsm_stripe_count = 0; - - lov_set_add_req(req, set); - } - if (!set->set_count) - GOTO(out_set, rc = -EIO); - *reqset = set; - return rc; -out_set: - lov_fini_cancel_set(set); - return rc; -} static int common_attr_done(struct lov_request_set *set) { struct list_head *pos; @@ -622,8 +215,10 @@ static int common_attr_done(struct lov_request_set *set) return -EIO; OBDO_ALLOC(tmp_oa); - if (tmp_oa == NULL) - GOTO(out, rc = -ENOMEM); + if (tmp_oa == NULL) { + rc = -ENOMEM; + goto out; + } list_for_each(pos, &set->set_list) { req = list_entry(pos, struct lov_request, rq_link); @@ -645,7 +240,8 @@ static int common_attr_done(struct lov_request_set *set) /* When we take attributes of some epoch, we require all the * ost to be active. */ CERROR("Not all the stripes had valid attrs\n"); - GOTO(out, rc = -EIO); + rc = -EIO; + goto out; } tmp_oa->o_oi = set->set_oi->oi_oa->o_oi; @@ -657,164 +253,6 @@ out: } -static int brw_done(struct lov_request_set *set) -{ - struct lov_stripe_md *lsm = set->set_oi->oi_md; - struct lov_oinfo *loi = NULL; - struct list_head *pos; - struct lov_request *req; - - list_for_each(pos, &set->set_list) { - req = list_entry(pos, struct lov_request, rq_link); - - if (!req->rq_complete || req->rq_rc) - continue; - - loi = lsm->lsm_oinfo[req->rq_stripe]; - - if (req->rq_oi.oi_oa->o_valid & OBD_MD_FLBLOCKS) - loi->loi_lvb.lvb_blocks = req->rq_oi.oi_oa->o_blocks; - } - - return 0; -} - -int lov_fini_brw_set(struct lov_request_set *set) -{ - int rc = 0; - - if (set == NULL) - return 0; - LASSERT(set->set_exp); - if (atomic_read(&set->set_completes)) { - rc = brw_done(set); - /* FIXME update qos data here */ - } - lov_put_reqset(set); - - return rc; -} - -int lov_prep_brw_set(struct obd_export *exp, struct obd_info *oinfo, - obd_count oa_bufs, struct brw_page *pga, - struct obd_trans_info *oti, - struct lov_request_set **reqset) -{ - struct { - obd_count index; - obd_count count; - obd_count off; - } *info = NULL; - struct lov_request_set *set; - struct lov_obd *lov = &exp->exp_obd->u.lov; - int rc = 0, i, shift; - - OBD_ALLOC(set, sizeof(*set)); - if (set == NULL) - return -ENOMEM; - lov_init_set(set); - - set->set_exp = exp; - set->set_oti = oti; - set->set_oi = oinfo; - set->set_oabufs = oa_bufs; - OBD_ALLOC_LARGE(set->set_pga, oa_bufs * sizeof(*set->set_pga)); - if (!set->set_pga) - GOTO(out, rc = -ENOMEM); - - OBD_ALLOC_LARGE(info, sizeof(*info) * oinfo->oi_md->lsm_stripe_count); - if (!info) - GOTO(out, rc = -ENOMEM); - - /* calculate the page count for each stripe */ - for (i = 0; i < oa_bufs; i++) { - int stripe = lov_stripe_number(oinfo->oi_md, pga[i].off); - info[stripe].count++; - } - - /* alloc and initialize lov request */ - shift = 0; - for (i = 0; i < oinfo->oi_md->lsm_stripe_count; i++) { - struct lov_oinfo *loi = NULL; - struct lov_request *req; - - if (info[i].count == 0) - continue; - - loi = oinfo->oi_md->lsm_oinfo[i]; - if (!lov_check_and_wait_active(lov, loi->loi_ost_idx)) { - CDEBUG(D_HA, "lov idx %d inactive\n", loi->loi_ost_idx); - GOTO(out, rc = -EIO); - } - - OBD_ALLOC(req, sizeof(*req)); - if (req == NULL) - GOTO(out, rc = -ENOMEM); - - OBDO_ALLOC(req->rq_oi.oi_oa); - if (req->rq_oi.oi_oa == NULL) { - OBD_FREE(req, sizeof(*req)); - GOTO(out, rc = -ENOMEM); - } - - if (oinfo->oi_oa) { - memcpy(req->rq_oi.oi_oa, oinfo->oi_oa, - sizeof(*req->rq_oi.oi_oa)); - } - req->rq_oi.oi_oa->o_oi = loi->loi_oi; - req->rq_oi.oi_oa->o_stripe_idx = i; - - req->rq_buflen = sizeof(*req->rq_oi.oi_md); - OBD_ALLOC_LARGE(req->rq_oi.oi_md, req->rq_buflen); - if (req->rq_oi.oi_md == NULL) { - OBDO_FREE(req->rq_oi.oi_oa); - OBD_FREE(req, sizeof(*req)); - GOTO(out, rc = -ENOMEM); - } - - req->rq_idx = loi->loi_ost_idx; - req->rq_stripe = i; - - /* XXX LOV STACKING */ - req->rq_oi.oi_md->lsm_oi = loi->loi_oi; - req->rq_oabufs = info[i].count; - req->rq_pgaidx = shift; - shift += req->rq_oabufs; - - /* remember the index for sort brw_page array */ - info[i].index = req->rq_pgaidx; - - req->rq_oi.oi_capa = oinfo->oi_capa; - - lov_set_add_req(req, set); - } - if (!set->set_count) - GOTO(out, rc = -EIO); - - /* rotate & sort the brw_page array */ - for (i = 0; i < oa_bufs; i++) { - int stripe = lov_stripe_number(oinfo->oi_md, pga[i].off); - - shift = info[stripe].index + info[stripe].off; - LASSERT(shift < oa_bufs); - set->set_pga[shift] = pga[i]; - lov_stripe_offset(oinfo->oi_md, pga[i].off, stripe, - &set->set_pga[shift].off); - info[stripe].off++; - } -out: - if (info) - OBD_FREE_LARGE(info, - sizeof(*info) * oinfo->oi_md->lsm_stripe_count); - - if (rc == 0) - *reqset = set; - else - lov_fini_brw_set(set); - - return rc; -} - int lov_fini_getattr_set(struct lov_request_set *set) { int rc = 0; @@ -863,15 +301,19 @@ int lov_prep_getattr_set(struct obd_export *exp, struct obd_info *oinfo, loi = oinfo->oi_md->lsm_oinfo[i]; if (!lov_check_and_wait_active(lov, loi->loi_ost_idx)) { CDEBUG(D_HA, "lov idx %d inactive\n", loi->loi_ost_idx); - if (oinfo->oi_oa->o_valid & OBD_MD_FLEPOCH) + if (oinfo->oi_oa->o_valid & OBD_MD_FLEPOCH) { /* SOM requires all the OSTs to be active. */ - GOTO(out_set, rc = -EIO); + rc = -EIO; + goto out_set; + } continue; } OBD_ALLOC(req, sizeof(*req)); - if (req == NULL) - GOTO(out_set, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out_set; + } req->rq_stripe = i; req->rq_idx = loi->loi_ost_idx; @@ -879,7 +321,8 @@ int lov_prep_getattr_set(struct obd_export *exp, struct obd_info *oinfo, OBDO_ALLOC(req->rq_oi.oi_oa); if (req->rq_oi.oi_oa == NULL) { OBD_FREE(req, sizeof(*req)); - GOTO(out_set, rc = -ENOMEM); + rc = -ENOMEM; + goto out_set; } memcpy(req->rq_oi.oi_oa, oinfo->oi_oa, sizeof(*req->rq_oi.oi_oa)); @@ -889,8 +332,10 @@ int lov_prep_getattr_set(struct obd_export *exp, struct obd_info *oinfo, lov_set_add_req(req, set); } - if (!set->set_count) - GOTO(out_set, rc = -EIO); + if (!set->set_count) { + rc = -EIO; + goto out_set; + } *reqset = set; return rc; out_set: @@ -945,8 +390,10 @@ int lov_prep_destroy_set(struct obd_export *exp, struct obd_info *oinfo, } OBD_ALLOC(req, sizeof(*req)); - if (req == NULL) - GOTO(out_set, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out_set; + } req->rq_stripe = i; req->rq_idx = loi->loi_ost_idx; @@ -954,14 +401,17 @@ int lov_prep_destroy_set(struct obd_export *exp, struct obd_info *oinfo, OBDO_ALLOC(req->rq_oi.oi_oa); if (req->rq_oi.oi_oa == NULL) { OBD_FREE(req, sizeof(*req)); - GOTO(out_set, rc = -ENOMEM); + rc = -ENOMEM; + goto out_set; } memcpy(req->rq_oi.oi_oa, src_oa, sizeof(*req->rq_oi.oi_oa)); req->rq_oi.oi_oa->o_oi = loi->loi_oi; lov_set_add_req(req, set); } - if (!set->set_count) - GOTO(out_set, rc = -EIO); + if (!set->set_count) { + rc = -EIO; + goto out_set; + } *reqset = set; return rc; out_set: @@ -1053,15 +503,18 @@ int lov_prep_setattr_set(struct obd_export *exp, struct obd_info *oinfo, } OBD_ALLOC(req, sizeof(*req)); - if (req == NULL) - GOTO(out_set, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out_set; + } req->rq_stripe = i; req->rq_idx = loi->loi_ost_idx; OBDO_ALLOC(req->rq_oi.oi_oa); if (req->rq_oi.oi_oa == NULL) { OBD_FREE(req, sizeof(*req)); - GOTO(out_set, rc = -ENOMEM); + rc = -ENOMEM; + goto out_set; } memcpy(req->rq_oi.oi_oa, oinfo->oi_oa, sizeof(*req->rq_oi.oi_oa)); @@ -1084,225 +537,14 @@ int lov_prep_setattr_set(struct obd_export *exp, struct obd_info *oinfo, } lov_set_add_req(req, set); } - if (!set->set_count) - GOTO(out_set, rc = -EIO); - *reqset = set; - return rc; -out_set: - lov_fini_setattr_set(set); - return rc; -} - -int lov_fini_punch_set(struct lov_request_set *set) -{ - int rc = 0; - - if (set == NULL) - return 0; - LASSERT(set->set_exp); - if (atomic_read(&set->set_completes)) { + if (!set->set_count) { rc = -EIO; - /* FIXME update qos data here */ - if (atomic_read(&set->set_success)) - rc = common_attr_done(set); + goto out_set; } - - lov_put_reqset(set); - - return rc; -} - -int lov_update_punch_set(struct lov_request_set *set, - struct lov_request *req, int rc) -{ - struct lov_obd *lov = &req->rq_rqset->set_exp->exp_obd->u.lov; - struct lov_stripe_md *lsm = req->rq_rqset->set_oi->oi_md; - - lov_update_set(set, req, rc); - - /* grace error on inactive ost */ - if (rc && !lov->lov_tgts[req->rq_idx]->ltd_active) - rc = 0; - - if (rc == 0) { - lov_stripe_lock(lsm); - if (req->rq_oi.oi_oa->o_valid & OBD_MD_FLBLOCKS) { - lsm->lsm_oinfo[req->rq_stripe]->loi_lvb.lvb_blocks = - req->rq_oi.oi_oa->o_blocks; - } - - lov_stripe_unlock(lsm); - } - - return rc; -} - -/* The callback for osc_punch that finalizes a request info when a response - * is received. */ -static int cb_update_punch(void *cookie, int rc) -{ - struct obd_info *oinfo = cookie; - struct lov_request *lovreq; - - lovreq = container_of(oinfo, struct lov_request, rq_oi); - return lov_update_punch_set(lovreq->rq_rqset, lovreq, rc); -} - -int lov_prep_punch_set(struct obd_export *exp, struct obd_info *oinfo, - struct obd_trans_info *oti, - struct lov_request_set **reqset) -{ - struct lov_request_set *set; - struct lov_obd *lov = &exp->exp_obd->u.lov; - int rc = 0, i; - - OBD_ALLOC(set, sizeof(*set)); - if (set == NULL) - return -ENOMEM; - lov_init_set(set); - - set->set_oi = oinfo; - set->set_exp = exp; - - for (i = 0; i < oinfo->oi_md->lsm_stripe_count; i++) { - struct lov_oinfo *loi = oinfo->oi_md->lsm_oinfo[i]; - struct lov_request *req; - obd_off rs, re; - - if (!lov_stripe_intersects(oinfo->oi_md, i, - oinfo->oi_policy.l_extent.start, - oinfo->oi_policy.l_extent.end, - &rs, &re)) - continue; - - if (!lov_check_and_wait_active(lov, loi->loi_ost_idx)) { - CDEBUG(D_HA, "lov idx %d inactive\n", loi->loi_ost_idx); - GOTO(out_set, rc = -EIO); - } - - OBD_ALLOC(req, sizeof(*req)); - if (req == NULL) - GOTO(out_set, rc = -ENOMEM); - req->rq_stripe = i; - req->rq_idx = loi->loi_ost_idx; - - OBDO_ALLOC(req->rq_oi.oi_oa); - if (req->rq_oi.oi_oa == NULL) { - OBD_FREE(req, sizeof(*req)); - GOTO(out_set, rc = -ENOMEM); - } - memcpy(req->rq_oi.oi_oa, oinfo->oi_oa, - sizeof(*req->rq_oi.oi_oa)); - req->rq_oi.oi_oa->o_oi = loi->loi_oi; - req->rq_oi.oi_oa->o_valid |= OBD_MD_FLGROUP; - - req->rq_oi.oi_oa->o_stripe_idx = i; - req->rq_oi.oi_cb_up = cb_update_punch; - - req->rq_oi.oi_policy.l_extent.start = rs; - req->rq_oi.oi_policy.l_extent.end = re; - req->rq_oi.oi_policy.l_extent.gid = -1; - - req->rq_oi.oi_capa = oinfo->oi_capa; - - lov_set_add_req(req, set); - } - if (!set->set_count) - GOTO(out_set, rc = -EIO); *reqset = set; return rc; out_set: - lov_fini_punch_set(set); - return rc; -} - -int lov_fini_sync_set(struct lov_request_set *set) -{ - int rc = 0; - - if (set == NULL) - return 0; - LASSERT(set->set_exp); - if (atomic_read(&set->set_completes)) { - if (!atomic_read(&set->set_success)) - rc = -EIO; - /* FIXME update qos data here */ - } - - lov_put_reqset(set); - - return rc; -} - -/* The callback for osc_sync that finalizes a request info when a - * response is received. */ -static int cb_sync_update(void *cookie, int rc) -{ - struct obd_info *oinfo = cookie; - struct lov_request *lovreq; - - lovreq = container_of(oinfo, struct lov_request, rq_oi); - return lov_update_common_set(lovreq->rq_rqset, lovreq, rc); -} - -int lov_prep_sync_set(struct obd_export *exp, struct obd_info *oinfo, - obd_off start, obd_off end, - struct lov_request_set **reqset) -{ - struct lov_request_set *set; - struct lov_obd *lov = &exp->exp_obd->u.lov; - int rc = 0, i; - - OBD_ALLOC_PTR(set); - if (set == NULL) - return -ENOMEM; - lov_init_set(set); - - set->set_exp = exp; - set->set_oi = oinfo; - - for (i = 0; i < oinfo->oi_md->lsm_stripe_count; i++) { - struct lov_oinfo *loi = oinfo->oi_md->lsm_oinfo[i]; - struct lov_request *req; - obd_off rs, re; - - if (!lov_check_and_wait_active(lov, loi->loi_ost_idx)) { - CDEBUG(D_HA, "lov idx %d inactive\n", loi->loi_ost_idx); - continue; - } - - if (!lov_stripe_intersects(oinfo->oi_md, i, start, end, &rs, - &re)) - continue; - - OBD_ALLOC_PTR(req); - if (req == NULL) - GOTO(out_set, rc = -ENOMEM); - req->rq_stripe = i; - req->rq_idx = loi->loi_ost_idx; - - OBDO_ALLOC(req->rq_oi.oi_oa); - if (req->rq_oi.oi_oa == NULL) { - OBD_FREE(req, sizeof(*req)); - GOTO(out_set, rc = -ENOMEM); - } - *req->rq_oi.oi_oa = *oinfo->oi_oa; - req->rq_oi.oi_oa->o_oi = loi->loi_oi; - req->rq_oi.oi_oa->o_stripe_idx = i; - - req->rq_oi.oi_policy.l_extent.start = rs; - req->rq_oi.oi_policy.l_extent.end = re; - req->rq_oi.oi_policy.l_extent.gid = -1; - req->rq_oi.oi_cb_up = cb_sync_update; - - lov_set_add_req(req, set); - } - if (!set->set_count) - GOTO(out_set, rc = -EIO); - *reqset = set; - return rc; -out_set: - lov_fini_sync_set(set); + lov_fini_setattr_set(set); return rc; } @@ -1315,7 +557,8 @@ out_set: (tot) += (add); \ } while (0) -int lov_fini_statfs(struct obd_device *obd, struct obd_statfs *osfs,int success) +int lov_fini_statfs(struct obd_device *obd, struct obd_statfs *osfs, + int success) { if (success) { __u32 expected_stripes = lov_get_stripecnt(&obd->u.lov, @@ -1429,12 +672,12 @@ static int cb_statfs_update(void *cookie, int rc) lovset->set_exp is not initialized. */ lov_update_set(set, lovreq, rc); if (rc) - GOTO(out, rc); + goto out; obd_getref(lovobd); tgt = lov->lov_tgts[lovreq->rq_idx]; if (!tgt || !tgt->ltd_active) - GOTO(out_update, rc); + goto out_update; tgtobd = class_exp2obd(tgt->ltd_exp); spin_lock(&tgtobd->obd_osfs_lock); @@ -1491,13 +734,16 @@ int lov_prep_statfs_set(struct obd_device *obd, struct obd_info *oinfo, } OBD_ALLOC(req, sizeof(*req)); - if (req == NULL) - GOTO(out_set, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out_set; + } OBD_ALLOC(req->rq_oi.oi_osfs, sizeof(*req->rq_oi.oi_osfs)); if (req->rq_oi.oi_osfs == NULL) { OBD_FREE(req, sizeof(*req)); - GOTO(out_set, rc = -ENOMEM); + rc = -ENOMEM; + goto out_set; } req->rq_idx = i; @@ -1506,8 +752,10 @@ int lov_prep_statfs_set(struct obd_device *obd, struct obd_info *oinfo, lov_set_add_req(req, set); } - if (!set->set_count) - GOTO(out_set, rc = -EIO); + if (!set->set_count) { + rc = -EIO; + goto out_set; + } *reqset = set; return rc; out_set: diff --git a/drivers/staging/lustre/lustre/lov/lovsub_dev.c b/drivers/staging/lustre/lustre/lov/lovsub_dev.c index 52fb6c162ad7..42336f13a76f 100644 --- a/drivers/staging/lustre/lustre/lov/lovsub_dev.c +++ b/drivers/staging/lustre/lustre/lov/lovsub_dev.c @@ -67,7 +67,7 @@ static void lovsub_req_completion(const struct lu_env *env, static void lovsub_req_attr_set(const struct lu_env *env, const struct cl_req_slice *slice, const struct cl_object *obj, - struct cl_req_attr *attr, obd_valid flags) + struct cl_req_attr *attr, u64 flags) { struct lovsub_object *subobj; diff --git a/drivers/staging/lustre/lustre/lvfs/Makefile b/drivers/staging/lustre/lustre/lvfs/Makefile deleted file mode 100644 index 387eee307e2d..000000000000 --- a/drivers/staging/lustre/lustre/lvfs/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -obj-$(CONFIG_LUSTRE_FS) += lvfs.o - -lvfs-y := lvfs_linux.o fsfilt.o -lvfs-$(CONFIG_PROC_FS) += lvfs_lib.o diff --git a/drivers/staging/lustre/lustre/lvfs/fsfilt.c b/drivers/staging/lustre/lustre/lvfs/fsfilt.c deleted file mode 100644 index a4df056a2853..000000000000 --- a/drivers/staging/lustre/lustre/lvfs/fsfilt.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2002, 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. - */ - -#define DEBUG_SUBSYSTEM S_FILTER - -#include <linux/fs.h> -#include <linux/module.h> -#include <linux/kmod.h> -#include <linux/slab.h> -#include "../../include/linux/libcfs/libcfs.h" -#include "../include/lustre_fsfilt.h" - -LIST_HEAD(fsfilt_types); - -static struct fsfilt_operations *fsfilt_search_type(const char *type) -{ - struct fsfilt_operations *found; - struct list_head *p; - - list_for_each(p, &fsfilt_types) { - found = list_entry(p, struct fsfilt_operations, fs_list); - if (!strcmp(found->fs_type, type)) - return found; - } - return NULL; -} - -int fsfilt_register_ops(struct fsfilt_operations *fs_ops) -{ - struct fsfilt_operations *found; - - /* lock fsfilt_types list */ - found = fsfilt_search_type(fs_ops->fs_type); - if (found) { - if (found != fs_ops) { - CERROR("different operations for type %s\n", - fs_ops->fs_type); - /* unlock fsfilt_types list */ - return -EEXIST; - } - } else { - try_module_get(THIS_MODULE); - list_add(&fs_ops->fs_list, &fsfilt_types); - } - - /* unlock fsfilt_types list */ - return 0; -} -EXPORT_SYMBOL(fsfilt_register_ops); - -void fsfilt_unregister_ops(struct fsfilt_operations *fs_ops) -{ - struct list_head *p; - - /* lock fsfilt_types list */ - list_for_each(p, &fsfilt_types) { - struct fsfilt_operations *found; - - found = list_entry(p, typeof(*found), fs_list); - if (found == fs_ops) { - list_del(p); - module_put(THIS_MODULE); - break; - } - } - /* unlock fsfilt_types list */ -} -EXPORT_SYMBOL(fsfilt_unregister_ops); - -struct fsfilt_operations *fsfilt_get_ops(const char *type) -{ - struct fsfilt_operations *fs_ops; - - /* lock fsfilt_types list */ - fs_ops = fsfilt_search_type(type); - if (!fs_ops) { - char name[32]; - int rc; - - snprintf(name, sizeof(name) - 1, "fsfilt_%s", type); - name[sizeof(name) - 1] = '\0'; - - rc = request_module("%s", name); - if (!rc) { - fs_ops = fsfilt_search_type(type); - CDEBUG(D_INFO, "Loaded module '%s'\n", name); - if (!fs_ops) - rc = -ENOENT; - } - - if (rc) { - CERROR("Can't find %s interface\n", name); - return ERR_PTR(rc < 0 ? rc : -rc); - /* unlock fsfilt_types list */ - } - } - try_module_get(fs_ops->fs_owner); - /* unlock fsfilt_types list */ - - return fs_ops; -} -EXPORT_SYMBOL(fsfilt_get_ops); - -void fsfilt_put_ops(struct fsfilt_operations *fs_ops) -{ - module_put(fs_ops->fs_owner); -} -EXPORT_SYMBOL(fsfilt_put_ops); diff --git a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c b/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c deleted file mode 100644 index eea0b2c94ba9..000000000000 --- a/drivers/staging/lustre/lustre/lvfs/lvfs_linux.c +++ /dev/null @@ -1,293 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2003, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/lvfs/lvfs_linux.c - * - * Author: Andreas Dilger <adilger@clusterfs.com> - */ - -#define DEBUG_SUBSYSTEM S_FILTER - -#include <linux/fs.h> -#include <asm/unistd.h> -#include <linux/slab.h> -#include <linux/pagemap.h> -#include <linux/quotaops.h> -#include <linux/module.h> -#include "../../include/linux/libcfs/libcfs.h" -#include "../include/linux/lustre_compat25.h" -#include "../include/lvfs.h" - -#include "../include/obd.h" -#include "../include/lustre_lib.h" - -struct lprocfs_stats *obd_memory = NULL; -EXPORT_SYMBOL(obd_memory); -/* refine later and change to seqlock or similar from libcfs */ - -/* Debugging check only needed during development */ -#ifdef OBD_CTXT_DEBUG -# define ASSERT_CTXT_MAGIC(magic) LASSERT((magic) == OBD_RUN_CTXT_MAGIC) -# define ASSERT_NOT_KERNEL_CTXT(msg) LASSERTF(!segment_eq(get_fs(), get_ds()),\ - msg) -# define ASSERT_KERNEL_CTXT(msg) LASSERTF(segment_eq(get_fs(), get_ds()), msg) -#else -# define ASSERT_CTXT_MAGIC(magic) do {} while (0) -# define ASSERT_NOT_KERNEL_CTXT(msg) do {} while (0) -# define ASSERT_KERNEL_CTXT(msg) do {} while (0) -#endif - -static void push_group_info(struct lvfs_run_ctxt *save, - struct group_info *ginfo) -{ - if (!ginfo) { - save->ngroups = current_ngroups; - current_ngroups = 0; - } else { - struct cred *cred; - task_lock(current); - save->group_info = current_cred()->group_info; - cred = prepare_creds(); - if (cred) { - cred->group_info = ginfo; - commit_creds(cred); - } - task_unlock(current); - } -} - -static void pop_group_info(struct lvfs_run_ctxt *save, - struct group_info *ginfo) -{ - if (!ginfo) { - current_ngroups = save->ngroups; - } else { - struct cred *cred; - task_lock(current); - cred = prepare_creds(); - if (cred) { - cred->group_info = save->group_info; - commit_creds(cred); - } - task_unlock(current); - } -} - -/* push / pop to root of obd store */ -void push_ctxt(struct lvfs_run_ctxt *save, struct lvfs_run_ctxt *new_ctx, - struct lvfs_ucred *uc) -{ - /* if there is underlaying dt_device then push_ctxt is not needed */ - if (new_ctx->dt != NULL) - return; - - /* ASSERT_NOT_KERNEL_CTXT("already in kernel context!\n"); */ - ASSERT_CTXT_MAGIC(new_ctx->magic); - OBD_SET_CTXT_MAGIC(save); - - save->fs = get_fs(); - LASSERT(d_count(cfs_fs_pwd(current->fs))); - LASSERT(d_count(new_ctx->pwd)); - save->pwd = dget(cfs_fs_pwd(current->fs)); - save->pwdmnt = mntget(cfs_fs_mnt(current->fs)); - save->luc.luc_umask = current_umask(); - save->ngroups = current_cred()->group_info->ngroups; - - LASSERT(save->pwd); - LASSERT(save->pwdmnt); - LASSERT(new_ctx->pwd); - LASSERT(new_ctx->pwdmnt); - - if (uc) { - struct cred *cred; - save->luc.luc_uid = current_uid(); - save->luc.luc_gid = current_gid(); - save->luc.luc_fsuid = current_fsuid(); - save->luc.luc_fsgid = current_fsgid(); - save->luc.luc_cap = current_cap(); - - cred = prepare_creds(); - if (cred) { - cred->uid = uc->luc_uid; - cred->gid = uc->luc_gid; - cred->fsuid = uc->luc_fsuid; - cred->fsgid = uc->luc_fsgid; - cred->cap_effective = uc->luc_cap; - commit_creds(cred); - } - - push_group_info(save, - uc->luc_ginfo ?: - uc->luc_identity ? uc->luc_identity->mi_ginfo : - NULL); - } - current->fs->umask = 0; /* umask already applied on client */ - set_fs(new_ctx->fs); - ll_set_fs_pwd(current->fs, new_ctx->pwdmnt, new_ctx->pwd); -} -EXPORT_SYMBOL(push_ctxt); - -void pop_ctxt(struct lvfs_run_ctxt *saved, struct lvfs_run_ctxt *new_ctx, - struct lvfs_ucred *uc) -{ - /* if there is underlaying dt_device then pop_ctxt is not needed */ - if (new_ctx->dt != NULL) - return; - - ASSERT_CTXT_MAGIC(saved->magic); - ASSERT_KERNEL_CTXT("popping non-kernel context!\n"); - - LASSERTF(cfs_fs_pwd(current->fs) == new_ctx->pwd, "%p != %p\n", - cfs_fs_pwd(current->fs), new_ctx->pwd); - LASSERTF(cfs_fs_mnt(current->fs) == new_ctx->pwdmnt, "%p != %p\n", - cfs_fs_mnt(current->fs), new_ctx->pwdmnt); - - set_fs(saved->fs); - ll_set_fs_pwd(current->fs, saved->pwdmnt, saved->pwd); - - dput(saved->pwd); - mntput(saved->pwdmnt); - current->fs->umask = saved->luc.luc_umask; - if (uc) { - struct cred *cred; - cred = prepare_creds(); - if (cred) { - cred->uid = saved->luc.luc_uid; - cred->gid = saved->luc.luc_gid; - cred->fsuid = saved->luc.luc_fsuid; - cred->fsgid = saved->luc.luc_fsgid; - cred->cap_effective = saved->luc.luc_cap; - commit_creds(cred); - } - - pop_group_info(saved, - uc->luc_ginfo ?: - uc->luc_identity ? uc->luc_identity->mi_ginfo : - NULL); - } -} -EXPORT_SYMBOL(pop_ctxt); - -/* utility to rename a file */ -int lustre_rename(struct dentry *dir, struct vfsmount *mnt, - char *oldname, char *newname) -{ - struct dentry *dchild_old, *dchild_new; - int err = 0; - - ASSERT_KERNEL_CTXT("kernel doing rename outside kernel context\n"); - CDEBUG(D_INODE, "renaming file %.*s to %.*s\n", - (int)strlen(oldname), oldname, (int)strlen(newname), newname); - - dchild_old = ll_lookup_one_len(oldname, dir, strlen(oldname)); - if (IS_ERR(dchild_old)) - return PTR_ERR(dchild_old); - - if (!dchild_old->d_inode) - GOTO(put_old, err = -ENOENT); - - dchild_new = ll_lookup_one_len(newname, dir, strlen(newname)); - if (IS_ERR(dchild_new)) - GOTO(put_old, err = PTR_ERR(dchild_new)); - - err = ll_vfs_rename(dir->d_inode, dchild_old, mnt, - dir->d_inode, dchild_new, mnt); - - dput(dchild_new); -put_old: - dput(dchild_old); - return err; -} -EXPORT_SYMBOL(lustre_rename); - -/* Note: dput(dchild) will *not* be called if there is an error */ -struct file *l_dentry_open(struct lvfs_run_ctxt *ctxt, struct dentry *de, - int flags) -{ - struct path path = { - .dentry = de, - .mnt = ctxt->pwdmnt, - }; - return dentry_open(&path, flags, current_cred()); -} -EXPORT_SYMBOL(l_dentry_open); - -#if defined (CONFIG_PROC_FS) -__s64 lprocfs_read_helper(struct lprocfs_counter *lc, - struct lprocfs_counter_header *header, - enum lprocfs_stats_flags flags, - enum lprocfs_fields_flags field) -{ - __s64 ret = 0; - - if (lc == NULL || header == NULL) - return 0; - - switch (field) { - case LPROCFS_FIELDS_FLAGS_CONFIG: - ret = header->lc_config; - break; - case LPROCFS_FIELDS_FLAGS_SUM: - ret = lc->lc_sum; - if ((flags & LPROCFS_STATS_FLAG_IRQ_SAFE) != 0) - ret += lc->lc_sum_irq; - break; - case LPROCFS_FIELDS_FLAGS_MIN: - ret = lc->lc_min; - break; - case LPROCFS_FIELDS_FLAGS_MAX: - ret = lc->lc_max; - break; - case LPROCFS_FIELDS_FLAGS_AVG: - ret = (lc->lc_max - lc->lc_min) / 2; - break; - case LPROCFS_FIELDS_FLAGS_SUMSQUARE: - ret = lc->lc_sumsquare; - break; - case LPROCFS_FIELDS_FLAGS_COUNT: - ret = lc->lc_count; - break; - default: - break; - } - - return ret; -} -EXPORT_SYMBOL(lprocfs_read_helper); -#endif /* CONFIG_PROC_FS*/ - -MODULE_AUTHOR("Sun Microsystems, Inc. <http://www.lustre.org/>"); -MODULE_DESCRIPTION("Lustre VFS Filesystem Helper v0.1"); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/lustre/lustre/mdc/lproc_mdc.c b/drivers/staging/lustre/lustre/mdc/lproc_mdc.c index d1d891b91663..16341c818358 100644 --- a/drivers/staging/lustre/lustre/mdc/lproc_mdc.c +++ b/drivers/staging/lustre/lustre/mdc/lproc_mdc.c @@ -56,7 +56,8 @@ static ssize_t mdc_max_rpcs_in_flight_seq_write(struct file *file, size_t count, loff_t *off) { - struct obd_device *dev = ((struct seq_file *)file->private_data)->private; + struct obd_device *dev = + ((struct seq_file *)file->private_data)->private; struct client_obd *cli = &dev->u.cli; int val, rc; @@ -84,7 +85,8 @@ static int mdc_kuc_open(struct inode *inode, struct file *file) static ssize_t mdc_kuc_write(struct file *file, const char *buffer, size_t count, loff_t *off) { - struct obd_device *obd = ((struct seq_file *)file->private_data)->private; + struct obd_device *obd = + ((struct seq_file *)file->private_data)->private; struct kuc_hdr *lh; struct hsm_action_list *hal; struct hsm_action_item *hai; @@ -209,6 +211,6 @@ static struct lprocfs_vars lprocfs_mdc_module_vars[] = { void lprocfs_mdc_init_vars(struct lprocfs_static_vars *lvars) { - lvars->module_vars = lprocfs_mdc_module_vars; - lvars->obd_vars = lprocfs_mdc_obd_vars; + lvars->module_vars = lprocfs_mdc_module_vars; + lvars->obd_vars = lprocfs_mdc_obd_vars; } diff --git a/drivers/staging/lustre/lustre/mdc/mdc_internal.h b/drivers/staging/lustre/lustre/mdc/mdc_internal.h index e8235559e27f..81780c943a08 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_internal.h +++ b/drivers/staging/lustre/lustre/mdc/mdc_internal.h @@ -40,7 +40,7 @@ #include "../include/lustre_mdc.h" #include "../include/lustre_mds.h" -#if defined (CONFIG_PROC_FS) +#if defined CONFIG_PROC_FS void lprocfs_mdc_init_vars(struct lprocfs_static_vars *lvars); #else static inline void lprocfs_mdc_init_vars(struct lprocfs_static_vars *lvars) @@ -108,7 +108,7 @@ int mdc_resource_get_unused(struct obd_export *exp, const struct lu_fid *fid, int mdc_fid_alloc(struct obd_export *exp, struct lu_fid *fid, struct md_op_data *op_data); -int mdc_open(struct obd_export *exp, obd_id ino, int type, int flags, +int mdc_open(struct obd_export *exp, u64 ino, int type, int flags, struct lov_mds_md *lmm, int lmm_size, struct lustre_handle *fh, struct ptlrpc_request **); diff --git a/drivers/staging/lustre/lustre/mdc/mdc_lib.c b/drivers/staging/lustre/lustre/mdc/mdc_lib.c index f54dd90c7e50..e8732cc30ce2 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_lib.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_lib.c @@ -42,7 +42,7 @@ static void __mdc_pack_body(struct mdt_body *b, __u32 suppgid) { - LASSERT (b != NULL); + LASSERT(b != NULL); b->suppgid = suppgid; b->uid = from_kuid(&init_user_ns, current_uid()); @@ -52,7 +52,8 @@ static void __mdc_pack_body(struct mdt_body *b, __u32 suppgid) b->capability = cfs_curproc_cap_pack(); } -void mdc_pack_capa(struct ptlrpc_request *req, const struct req_msg_field *field, +void mdc_pack_capa(struct ptlrpc_request *req, + const struct req_msg_field *field, struct obd_capa *oc) { struct req_capsule *pill = &req->rq_pill; @@ -256,7 +257,8 @@ void mdc_open_pack(struct ptlrpc_request *req, struct md_op_data *op_data, set_mrc_cr_flags(rec, cr_flags); } -static inline __u64 attr_pack(unsigned int ia_valid) { +static inline __u64 attr_pack(unsigned int ia_valid) +{ __u64 sa_valid = 0; if (ia_valid & ATTR_MODE) @@ -316,7 +318,8 @@ static void mdc_setattr_pack_rec(struct mdt_rec_setattr *rec, rec->sa_atime = LTIME_S(op_data->op_attr.ia_atime); rec->sa_mtime = LTIME_S(op_data->op_attr.ia_mtime); rec->sa_ctime = LTIME_S(op_data->op_attr.ia_ctime); - rec->sa_attr_flags = ((struct ll_iattr *)&op_data->op_attr)->ia_attr_flags; + rec->sa_attr_flags = + ((struct ll_iattr *)&op_data->op_attr)->ia_attr_flags; if ((op_data->op_attr.ia_valid & ATTR_GID) && in_group_p(op_data->op_attr.ia_gid)) rec->sa_suppgid = @@ -342,7 +345,8 @@ void mdc_setattr_pack(struct ptlrpc_request *req, struct md_op_data *op_data, struct mdt_ioepoch *epoch; struct lov_user_md *lum = NULL; - CLASSERT(sizeof(struct mdt_rec_reint) ==sizeof(struct mdt_rec_setattr)); + CLASSERT(sizeof(struct mdt_rec_reint) == + sizeof(struct mdt_rec_setattr)); rec = req_capsule_client_get(&req->rq_pill, &RMF_REC_REINT); mdc_setattr_pack_rec(rec, op_data); @@ -382,18 +386,18 @@ void mdc_unlink_pack(struct ptlrpc_request *req, struct md_op_data *op_data) rec = req_capsule_client_get(&req->rq_pill, &RMF_REC_REINT); LASSERT(rec != NULL); - rec->ul_opcode = op_data->op_cli_flags & CLI_RM_ENTRY ? + rec->ul_opcode = op_data->op_cli_flags & CLI_RM_ENTRY ? REINT_RMENTRY : REINT_UNLINK; - rec->ul_fsuid = op_data->op_fsuid; - rec->ul_fsgid = op_data->op_fsgid; - rec->ul_cap = op_data->op_cap; - rec->ul_mode = op_data->op_mode; - rec->ul_suppgid1= op_data->op_suppgids[0]; - rec->ul_suppgid2= -1; - rec->ul_fid1 = op_data->op_fid1; - rec->ul_fid2 = op_data->op_fid2; - rec->ul_time = op_data->op_mod_time; - rec->ul_bias = op_data->op_bias; + rec->ul_fsuid = op_data->op_fsuid; + rec->ul_fsgid = op_data->op_fsgid; + rec->ul_cap = op_data->op_cap; + rec->ul_mode = op_data->op_mode; + rec->ul_suppgid1 = op_data->op_suppgids[0]; + rec->ul_suppgid2 = -1; + rec->ul_fid1 = op_data->op_fid1; + rec->ul_fid2 = op_data->op_fid2; + rec->ul_time = op_data->op_mod_time; + rec->ul_bias = op_data->op_bias; mdc_pack_capa(req, &RMF_CAPA1, op_data->op_capa1); @@ -409,12 +413,12 @@ void mdc_link_pack(struct ptlrpc_request *req, struct md_op_data *op_data) CLASSERT(sizeof(struct mdt_rec_reint) == sizeof(struct mdt_rec_link)); rec = req_capsule_client_get(&req->rq_pill, &RMF_REC_REINT); - LASSERT (rec != NULL); + LASSERT(rec != NULL); rec->lk_opcode = REINT_LINK; - rec->lk_fsuid = op_data->op_fsuid;//current->fsuid; - rec->lk_fsgid = op_data->op_fsgid;//current->fsgid; - rec->lk_cap = op_data->op_cap;//current->cap_effective; + rec->lk_fsuid = op_data->op_fsuid; /* current->fsuid; */ + rec->lk_fsgid = op_data->op_fsgid; /* current->fsgid; */ + rec->lk_cap = op_data->op_cap; /* current->cap_effective; */ rec->lk_suppgid1 = op_data->op_suppgids[0]; rec->lk_suppgid2 = op_data->op_suppgids[1]; rec->lk_fid1 = op_data->op_fid1; @@ -486,6 +490,7 @@ void mdc_getattr_pack(struct ptlrpc_request *req, __u64 valid, int flags, if (op_data->op_name) { char *tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME); + LOGL0(op_data->op_name, op_data->op_namelen, tmp); } @@ -551,7 +556,8 @@ int mdc_enter_request(struct client_obd *cli) list_add_tail(&mcw.mcw_entry, &cli->cl_cache_waiters); init_waitqueue_head(&mcw.mcw_waitq); client_obd_list_unlock(&cli->cl_loi_list_lock); - rc = l_wait_event(mcw.mcw_waitq, mdc_req_avail(cli, &mcw), &lwi); + rc = l_wait_event(mcw.mcw_waitq, mdc_req_avail(cli, &mcw), + &lwi); if (rc) { client_obd_list_lock(&cli->cl_loi_list_lock); if (list_empty(&mcw.mcw_entry)) diff --git a/drivers/staging/lustre/lustre/mdc/mdc_locks.c b/drivers/staging/lustre/lustre/mdc/mdc_locks.c index 71219b90e22b..b58147ee62b6 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_locks.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_locks.c @@ -38,7 +38,7 @@ # include <linux/module.h> -#include "../include/linux/lustre_intent.h" +#include "../include/lustre_intent.h" #include "../include/obd.h" #include "../include/obd_class.h" #include "../include/lustre_dlm.h" @@ -134,12 +134,12 @@ int mdc_set_lock_data(struct obd_export *exp, __u64 *lockh, void *data, if (lock->l_resource->lr_lvb_inode && lock->l_resource->lr_lvb_inode != data) { struct inode *old_inode = lock->l_resource->lr_lvb_inode; + LASSERTF(old_inode->i_state & I_FREEING, - "Found existing inode %p/%lu/%u state %lu in lock: " - "setting data to %p/%lu/%u\n", old_inode, - old_inode->i_ino, old_inode->i_generation, - old_inode->i_state, - new_inode, new_inode->i_ino, new_inode->i_generation); + "Found existing inode %p/%lu/%u state %lu in lock: setting data to %p/%lu/%u\n", + old_inode, old_inode->i_ino, old_inode->i_generation, + old_inode->i_state, new_inode, new_inode->i_ino, + new_inode->i_generation); } lock->l_resource->lr_lvb_inode = new_inode; if (bits) @@ -218,7 +218,7 @@ int mdc_find_cbdata(struct obd_export *exp, struct ldlm_res_id res_id; int rc = 0; - fid_build_reg_res_name((struct lu_fid*)fid, &res_id); + fid_build_reg_res_name((struct lu_fid *)fid, &res_id); rc = ldlm_resource_iterate(class_exp2obd(exp)->obd_namespace, &res_id, it, data); if (rc == LDLM_ITER_STOP) @@ -450,12 +450,12 @@ static struct ptlrpc_request *mdc_intent_unlink_pack(struct obd_export *exp, } static struct ptlrpc_request *mdc_intent_getattr_pack(struct obd_export *exp, - struct lookup_intent *it, - struct md_op_data *op_data) + struct lookup_intent *it, + struct md_op_data *op_data) { struct ptlrpc_request *req; struct obd_device *obddev = class_exp2obd(exp); - obd_valid valid = OBD_MD_FLGETATTR | OBD_MD_FLEASIZE | + u64 valid = OBD_MD_FLGETATTR | OBD_MD_FLEASIZE | OBD_MD_FLMODEASIZE | OBD_MD_FLDIREA | OBD_MD_FLMDSCAPA | OBD_MD_MEA | (client_is_remote(exp) ? @@ -621,7 +621,7 @@ static int mdc_finish_enqueue(struct obd_export *exp, * function without doing so, and try to replay a failed create * (bug 3440) */ if (it->it_op & IT_OPEN && req->rq_replay && - (!it_disposition(it, DISP_OPEN_OPEN) ||intent->it_status != 0)) + (!it_disposition(it, DISP_OPEN_OPEN) || intent->it_status != 0)) mdc_clear_replay_flag(req, intent->it_status); DEBUG_REQ(D_RPCTRACE, req, "op: %d disposition: %x, status: %d", @@ -633,7 +633,7 @@ static int mdc_finish_enqueue(struct obd_export *exp, body = req_capsule_server_get(pill, &RMF_MDT_BODY); if (body == NULL) { - CERROR ("Can't swab mdt_body\n"); + CERROR("Can't swab mdt_body\n"); return -EPROTO; } @@ -678,6 +678,7 @@ static int mdc_finish_enqueue(struct obd_export *exp, */ if ((it->it_op & IT_OPEN) && req->rq_replay) { void *lmm; + if (req_capsule_get_size(pill, &RMF_EADATA, RCL_CLIENT) < body->eadatasize) @@ -777,25 +778,29 @@ static int mdc_finish_enqueue(struct obd_export *exp, int mdc_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo, struct lookup_intent *it, struct md_op_data *op_data, struct lustre_handle *lockh, void *lmm, int lmmsize, - struct ptlrpc_request **reqp, __u64 extra_lock_flags) + struct ptlrpc_request **reqp, u64 extra_lock_flags) { - struct obd_device *obddev = class_exp2obd(exp); - struct ptlrpc_request *req = NULL; - __u64 flags, saved_flags = extra_lock_flags; - int rc; - struct ldlm_res_id res_id; - static const ldlm_policy_data_t lookup_policy = - { .l_inodebits = { MDS_INODELOCK_LOOKUP } }; - static const ldlm_policy_data_t update_policy = - { .l_inodebits = { MDS_INODELOCK_UPDATE } }; - static const ldlm_policy_data_t layout_policy = - { .l_inodebits = { MDS_INODELOCK_LAYOUT } }; + static const ldlm_policy_data_t lookup_policy = { + .l_inodebits = { MDS_INODELOCK_LOOKUP } + }; + static const ldlm_policy_data_t update_policy = { + .l_inodebits = { MDS_INODELOCK_UPDATE } + }; + static const ldlm_policy_data_t layout_policy = { + .l_inodebits = { MDS_INODELOCK_LAYOUT } + }; static const ldlm_policy_data_t getxattr_policy = { - .l_inodebits = { MDS_INODELOCK_XATTR } }; + .l_inodebits = { MDS_INODELOCK_XATTR } + }; ldlm_policy_data_t const *policy = &lookup_policy; - int generation, resends = 0; - struct ldlm_reply *lockrep; - enum lvb_type lvb_type = 0; + struct obd_device *obddev = class_exp2obd(exp); + struct ptlrpc_request *req; + u64 flags, saved_flags = extra_lock_flags; + struct ldlm_res_id res_id; + int generation, resends = 0; + struct ldlm_reply *lockrep; + enum lvb_type lvb_type = LVB_T_NONE; + int rc; LASSERTF(!it || einfo->ei_type == LDLM_IBITS, "lock type %d\n", einfo->ei_type); @@ -939,7 +944,12 @@ resend: memset(lockh, 0, sizeof(*lockh)); } ptlrpc_req_finished(req); + + it->d.lustre.it_lock_handle = 0; + it->d.lustre.it_lock_mode = 0; + it->d.lustre.it_data = NULL; } + return rc; } @@ -1029,6 +1039,7 @@ static int mdc_finish_intent_lock(struct obd_export *exp, lock = ldlm_handle2lock(lockh); if (lock) { ldlm_policy_data_t policy = lock->l_policy_data; + LDLM_DEBUG(lock, "matching against this"); LASSERTF(fid_res_name_eq(&mdt_body->fid1, @@ -1039,14 +1050,16 @@ static int mdc_finish_intent_lock(struct obd_export *exp, memcpy(&old_lock, lockh, sizeof(*lockh)); if (ldlm_lock_match(NULL, LDLM_FL_BLOCK_GRANTED, NULL, - LDLM_IBITS, &policy, LCK_NL, &old_lock, 0)) { + LDLM_IBITS, &policy, LCK_NL, + &old_lock, 0)) { ldlm_lock_decref_and_cancel(lockh, it->d.lustre.it_lock_mode); memcpy(lockh, &old_lock, sizeof(old_lock)); it->d.lustre.it_lock_handle = lockh->cookie; } } - CDEBUG(D_DENTRY,"D_IT dentry %.*s intent: %s status %d disp %x rc %d\n", + CDEBUG(D_DENTRY, + "D_IT dentry %.*s intent: %s status %d disp %x rc %d\n", op_data->op_namelen, op_data->op_name, ldlm_it2str(it->it_op), it->d.lustre.it_status, it->d.lustre.it_disposition, rc); return rc; @@ -1223,7 +1236,7 @@ static int mdc_intent_getattr_async_interpret(const struct lu_env *env, if (rc < 0) { CERROR("ldlm_cli_enqueue_fini: %d\n", rc); mdc_clear_replay_flag(req, rc); - GOTO(out, rc); + goto out; } lockrep = req_capsule_server_get(&req->rq_pill, &RMF_DLM_REP); @@ -1234,7 +1247,7 @@ static int mdc_intent_getattr_async_interpret(const struct lu_env *env, rc = mdc_finish_enqueue(exp, req, einfo, it, lockh, rc); if (rc) - GOTO(out, rc); + goto out; rc = mdc_finish_intent_lock(exp, req, &minfo->mi_data, it, lockh); diff --git a/drivers/staging/lustre/lustre/mdc/mdc_reint.c b/drivers/staging/lustre/lustre/mdc/mdc_reint.c index c5420a42bc33..5e9c6296c39d 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_reint.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_reint.c @@ -57,9 +57,9 @@ static int mdc_reint(struct ptlrpc_request *request, mdc_put_rpc_lock(rpc_lock, NULL); if (rc) CDEBUG(D_INFO, "error in handling %d\n", rc); - else if (!req_capsule_server_get(&request->rq_pill, &RMF_MDT_BODY)) { + else if (!req_capsule_server_get(&request->rq_pill, &RMF_MDT_BODY)) rc = -EPROTO; - } + return rc; } @@ -71,7 +71,7 @@ int mdc_resource_get_unused(struct obd_export *exp, const struct lu_fid *fid, __u64 bits) { struct ldlm_namespace *ns = exp->exp_obd->obd_namespace; - ldlm_policy_data_t policy = {{0}}; + ldlm_policy_data_t policy = {}; struct ldlm_res_id res_id; struct ldlm_resource *res; int count; @@ -152,14 +152,12 @@ int mdc_setattr(struct obd_export *exp, struct md_op_data *op_data, ptlrpc_request_set_replen(req); if (mod && (op_data->op_flags & MF_EPOCH_OPEN) && - req->rq_import->imp_replayable) - { + req->rq_import->imp_replayable) { LASSERT(*mod == NULL); *mod = obd_mod_alloc(); if (*mod == NULL) { - DEBUG_REQ(D_ERROR, req, "Can't allocate " - "md_open_data"); + DEBUG_REQ(D_ERROR, req, "Can't allocate md_open_data"); } else { req->rq_replay = 1; req->rq_cb_data = *mod; diff --git a/drivers/staging/lustre/lustre/mdc/mdc_request.c b/drivers/staging/lustre/lustre/mdc/mdc_request.c index 4a1cc4eb73d5..14e1ba1675f6 100644 --- a/drivers/staging/lustre/lustre/mdc/mdc_request.c +++ b/drivers/staging/lustre/lustre/mdc/mdc_request.c @@ -122,16 +122,18 @@ static int send_getstatus(struct obd_import *imp, struct lu_fid *rootfid, rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY); - if (body == NULL) - GOTO(out, rc = -EPROTO); + if (body == NULL) { + rc = -EPROTO; + goto out; + } if (body->valid & OBD_MD_FLMDSCAPA) { rc = mdc_unpack_capa(NULL, req, &RMF_CAPA1, pc); if (rc) - GOTO(out, rc); + goto out; } *rootfid = body->fid1; @@ -203,6 +205,7 @@ static int mdc_getattr_common(struct obd_export *exp, if (body->valid & OBD_MD_FLMDSCAPA) { struct lustre_capa *capa; + capa = req_capsule_server_get(pill, &RMF_CAPA1); if (capa == NULL) return -EPROTO; @@ -283,6 +286,7 @@ int mdc_getattr_name(struct obd_export *exp, struct md_op_data *op_data, if (op_data->op_name) { char *name = req_capsule_client_get(&req->rq_pill, &RMF_NAME); + LASSERT(strnlen(op_data->op_name, op_data->op_namelen) == op_data->op_namelen); memcpy(name, op_data->op_name, op_data->op_namelen); @@ -326,9 +330,10 @@ static int mdc_is_subdir(struct obd_export *exp, return rc; } -static int mdc_xattr_common(struct obd_export *exp,const struct req_format *fmt, +static int mdc_xattr_common(struct obd_export *exp, + const struct req_format *fmt, const struct lu_fid *fid, - struct obd_capa *oc, int opcode, obd_valid valid, + struct obd_capa *oc, int opcode, u64 valid, const char *xattr_name, const char *input, int input_size, int output_size, int flags, __u32 suppgid, struct ptlrpc_request **request) @@ -437,7 +442,7 @@ static int mdc_xattr_common(struct obd_export *exp,const struct req_format *fmt, } int mdc_setxattr(struct obd_export *exp, const struct lu_fid *fid, - struct obd_capa *oc, obd_valid valid, const char *xattr_name, + struct obd_capa *oc, u64 valid, const char *xattr_name, const char *input, int input_size, int output_size, int flags, __u32 suppgid, struct ptlrpc_request **request) { @@ -448,7 +453,7 @@ int mdc_setxattr(struct obd_export *exp, const struct lu_fid *fid, } int mdc_getxattr(struct obd_export *exp, const struct lu_fid *fid, - struct obd_capa *oc, obd_valid valid, const char *xattr_name, + struct obd_capa *oc, u64 valid, const char *xattr_name, const char *input, int input_size, int output_size, int flags, struct ptlrpc_request **request) { @@ -514,64 +519,73 @@ int mdc_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req, struct lov_mds_md *lmm; if (!S_ISREG(md->body->mode)) { - CDEBUG(D_INFO, "OBD_MD_FLEASIZE set, should be a " - "regular file, but is not\n"); - GOTO(out, rc = -EPROTO); + CDEBUG(D_INFO, + "OBD_MD_FLEASIZE set, should be a regular file, but is not\n"); + rc = -EPROTO; + goto out; } if (md->body->eadatasize == 0) { - CDEBUG(D_INFO, "OBD_MD_FLEASIZE set, " - "but eadatasize 0\n"); - GOTO(out, rc = -EPROTO); + CDEBUG(D_INFO, + "OBD_MD_FLEASIZE set, but eadatasize 0\n"); + rc = -EPROTO; + goto out; } lmmsize = md->body->eadatasize; lmm = req_capsule_server_sized_get(pill, &RMF_MDT_MD, lmmsize); - if (!lmm) - GOTO(out, rc = -EPROTO); + if (!lmm) { + rc = -EPROTO; + goto out; + } rc = obd_unpackmd(dt_exp, &md->lsm, lmm, lmmsize); if (rc < 0) - GOTO(out, rc); + goto out; if (rc < sizeof(*md->lsm)) { - CDEBUG(D_INFO, "lsm size too small: " - "rc < sizeof (*md->lsm) (%d < %d)\n", + CDEBUG(D_INFO, + "lsm size too small: rc < sizeof (*md->lsm) (%d < %d)\n", rc, (int)sizeof(*md->lsm)); - GOTO(out, rc = -EPROTO); + rc = -EPROTO; + goto out; } } else if (md->body->valid & OBD_MD_FLDIREA) { int lmvsize; struct lov_mds_md *lmv; - if(!S_ISDIR(md->body->mode)) { - CDEBUG(D_INFO, "OBD_MD_FLDIREA set, should be a " - "directory, but is not\n"); - GOTO(out, rc = -EPROTO); + if (!S_ISDIR(md->body->mode)) { + CDEBUG(D_INFO, + "OBD_MD_FLDIREA set, should be a directory, but is not\n"); + rc = -EPROTO; + goto out; } if (md->body->eadatasize == 0) { - CDEBUG(D_INFO, "OBD_MD_FLDIREA is set, " - "but eadatasize 0\n"); + CDEBUG(D_INFO, + "OBD_MD_FLDIREA is set, but eadatasize 0\n"); return -EPROTO; } if (md->body->valid & OBD_MD_MEA) { lmvsize = md->body->eadatasize; lmv = req_capsule_server_sized_get(pill, &RMF_MDT_MD, lmvsize); - if (!lmv) - GOTO(out, rc = -EPROTO); + if (!lmv) { + rc = -EPROTO; + goto out; + } rc = obd_unpackmd(md_exp, (void *)&md->mea, lmv, lmvsize); if (rc < 0) - GOTO(out, rc); + goto out; if (rc < sizeof(*md->mea)) { - CDEBUG(D_INFO, "size too small: " - "rc < sizeof(*md->mea) (%d < %d)\n", + CDEBUG(D_INFO, + "size too small: rc < sizeof(*md->mea) (%d < %d)\n", rc, (int)sizeof(*md->mea)); - GOTO(out, rc = -EPROTO); + rc = -EPROTO; + goto out; } } } @@ -582,10 +596,11 @@ int mdc_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req, LASSERT(client_is_remote(exp)); md->remote_perm = req_capsule_server_swab_get(pill, &RMF_ACL, lustre_swab_mdt_remote_perm); - if (!md->remote_perm) - GOTO(out, rc = -EPROTO); - } - else if (md->body->valid & OBD_MD_FLACL) { + if (!md->remote_perm) { + rc = -EPROTO; + goto out; + } + } else if (md->body->valid & OBD_MD_FLACL) { /* for ACL, it's possible that FLACL is set but aclsize is zero. * only when aclsize != 0 there's an actual segment for ACL * in reply buffer. @@ -593,7 +608,7 @@ int mdc_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req, if (md->body->aclsize) { rc = mdc_unpack_acl(req, md); if (rc) - GOTO(out, rc); + goto out; #ifdef CONFIG_FS_POSIX_ACL } else { md->posix_acl = NULL; @@ -605,7 +620,7 @@ int mdc_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req, rc = mdc_unpack_capa(NULL, req, &RMF_CAPA1, &oc); if (rc) - GOTO(out, rc); + goto out; md->mds_capa = oc; } @@ -614,7 +629,7 @@ int mdc_get_lustre_md(struct obd_export *exp, struct ptlrpc_request *req, rc = mdc_unpack_capa(NULL, req, &RMF_CAPA2, &oc); if (rc) - GOTO(out, rc); + goto out; md->oss_capa = oc; } @@ -695,6 +710,7 @@ void mdc_replay_open(struct ptlrpc_request *req) void mdc_commit_open(struct ptlrpc_request *req) { struct md_open_data *mod = req->rq_cb_data; + if (mod == NULL) return; @@ -774,8 +790,8 @@ int mdc_set_open_replay_data(struct obd_export *exp, rec->cr_old_handle.cookie = body->handle.cookie; open_req->rq_replay_cb = mdc_replay_open; if (!fid_is_sane(&body->fid1)) { - DEBUG_REQ(D_ERROR, open_req, "Saving replay request with " - "insane fid"); + DEBUG_REQ(D_ERROR, open_req, + "Saving replay request with insane fid"); LBUG(); } @@ -897,7 +913,8 @@ int mdc_close(struct obd_export *exp, struct md_op_data *op_data, mod->mod_open_req->rq_replay = 0; spin_unlock(&mod->mod_open_req->rq_lock); } else { - CDEBUG(D_HA, "couldn't find open req; expecting close error\n"); + CDEBUG(D_HA, + "couldn't find open req; expecting close error\n"); } mdc_close_pack(req, op_data); @@ -923,8 +940,8 @@ int mdc_close(struct obd_export *exp, struct md_op_data *op_data, rc = lustre_msg_get_status(req->rq_repmsg); if (lustre_msg_get_type(req->rq_repmsg) == PTL_RPC_MSG_ERR) { - DEBUG_REQ(D_ERROR, req, "type == PTL_RPC_MSG_ERR, err " - "= %d", rc); + DEBUG_REQ(D_ERROR, req, + "type == PTL_RPC_MSG_ERR, err = %d", rc); if (rc > 0) rc = -rc; } @@ -1084,7 +1101,8 @@ restart_bulk: CERROR("too many resend retries, returning error\n"); return -EIO; } - lwi = LWI_TIMEOUT_INTR(cfs_time_seconds(resends), NULL, NULL, NULL); + lwi = LWI_TIMEOUT_INTR(cfs_time_seconds(resends), + NULL, NULL, NULL); l_wait_event(waitq, 0, &lwi); goto restart_bulk; @@ -1132,8 +1150,10 @@ static int mdc_statfs(const struct lu_env *env, req = ptlrpc_request_alloc_pack(imp, &RQF_MDS_STATFS, LUSTRE_MDS_VERSION, MDS_STATFS); - if (req == NULL) - GOTO(output, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto output; + } ptlrpc_request_set_replen(req); @@ -1148,12 +1168,14 @@ static int mdc_statfs(const struct lu_env *env, /* check connection error first */ if (imp->imp_connect_error) rc = imp->imp_connect_error; - GOTO(out, rc); + goto out; } msfs = req_capsule_server_get(&req->rq_pill, &RMF_OBD_STATFS); - if (msfs == NULL) - GOTO(out, rc = -EPROTO); + if (msfs == NULL) { + rc = -EPROTO; + goto out; + } *osfs = *msfs; out: @@ -1185,20 +1207,25 @@ static int mdc_ioc_fid2path(struct obd_export *exp, struct getinfo_fid2path *gf) CDEBUG(D_IOCTL, "path get "DFID" from %llu #%d\n", PFID(&gf->gf_fid), gf->gf_recno, gf->gf_linkno); - if (!fid_is_sane(&gf->gf_fid)) - GOTO(out, rc = -EINVAL); + if (!fid_is_sane(&gf->gf_fid)) { + rc = -EINVAL; + goto out; + } /* Val is struct getinfo_fid2path result plus path */ vallen = sizeof(*gf) + gf->gf_pathlen; rc = obd_get_info(NULL, exp, keylen, key, &vallen, gf, NULL); if (rc != 0 && rc != -EREMOTE) - GOTO(out, rc); + goto out; - if (vallen <= sizeof(*gf)) - GOTO(out, rc = -EPROTO); - else if (vallen > sizeof(*gf) + gf->gf_pathlen) - GOTO(out, rc = -EOVERFLOW); + if (vallen <= sizeof(*gf)) { + rc = -EPROTO; + goto out; + } else if (vallen > sizeof(*gf) + gf->gf_pathlen) { + rc = -EOVERFLOW; + goto out; + } CDEBUG(D_IOCTL, "path get "DFID" from %llu #%d\n%s\n", PFID(&gf->gf_fid), gf->gf_recno, gf->gf_linkno, gf->gf_path); @@ -1218,15 +1245,19 @@ static int mdc_ioc_hsm_progress(struct obd_export *exp, req = ptlrpc_request_alloc_pack(imp, &RQF_MDS_HSM_PROGRESS, LUSTRE_MDS_VERSION, MDS_HSM_PROGRESS); - if (req == NULL) - GOTO(out, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out; + } mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, 0, 0); /* Copy hsm_progress struct */ req_hpk = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_PROGRESS); - if (req_hpk == NULL) - GOTO(out, rc = -EPROTO); + if (req_hpk == NULL) { + rc = -EPROTO; + goto out; + } *req_hpk = *hpk; req_hpk->hpk_errval = lustre_errno_hton(hpk->hpk_errval); @@ -1234,7 +1265,7 @@ static int mdc_ioc_hsm_progress(struct obd_export *exp, ptlrpc_request_set_replen(req); rc = mdc_queue_wait(req); - GOTO(out, rc); + goto out; out: ptlrpc_req_finished(req); return rc; @@ -1249,23 +1280,27 @@ static int mdc_ioc_hsm_ct_register(struct obd_import *imp, __u32 archives) req = ptlrpc_request_alloc_pack(imp, &RQF_MDS_HSM_CT_REGISTER, LUSTRE_MDS_VERSION, MDS_HSM_CT_REGISTER); - if (req == NULL) - GOTO(out, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out; + } mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, 0, 0); /* Copy hsm_progress struct */ archive_mask = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_ARCHIVE); - if (archive_mask == NULL) - GOTO(out, rc = -EPROTO); + if (archive_mask == NULL) { + rc = -EPROTO; + goto out; + } *archive_mask = archives; ptlrpc_request_set_replen(req); rc = mdc_queue_wait(req); - GOTO(out, rc); + goto out; out: ptlrpc_req_finished(req); return rc; @@ -1299,12 +1334,14 @@ static int mdc_ioc_hsm_current_action(struct obd_export *exp, rc = mdc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; req_hca = req_capsule_server_get(&req->rq_pill, &RMF_MDS_HSM_CURRENT_ACTION); - if (req_hca == NULL) - GOTO(out, rc = -EPROTO); + if (req_hca == NULL) { + rc = -EPROTO; + goto out; + } *hca = *req_hca; @@ -1321,15 +1358,17 @@ static int mdc_ioc_hsm_ct_unregister(struct obd_import *imp) req = ptlrpc_request_alloc_pack(imp, &RQF_MDS_HSM_CT_UNREGISTER, LUSTRE_MDS_VERSION, MDS_HSM_CT_UNREGISTER); - if (req == NULL) - GOTO(out, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out; + } mdc_pack_body(req, NULL, NULL, OBD_MD_FLRMTPERM, 0, 0, 0); ptlrpc_request_set_replen(req); rc = mdc_queue_wait(req); - GOTO(out, rc); + goto out; out: ptlrpc_req_finished(req); return rc; @@ -1363,11 +1402,13 @@ static int mdc_ioc_hsm_state_get(struct obd_export *exp, rc = mdc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; req_hus = req_capsule_server_get(&req->rq_pill, &RMF_HSM_USER_STATE); - if (req_hus == NULL) - GOTO(out, rc = -EPROTO); + if (req_hus == NULL) { + rc = -EPROTO; + goto out; + } *hus = *req_hus; @@ -1402,14 +1443,16 @@ static int mdc_ioc_hsm_state_set(struct obd_export *exp, /* Copy states */ req_hss = req_capsule_client_get(&req->rq_pill, &RMF_HSM_STATE_SET); - if (req_hss == NULL) - GOTO(out, rc = -EPROTO); + if (req_hss == NULL) { + rc = -EPROTO; + goto out; + } *req_hss = *hss; ptlrpc_request_set_replen(req); rc = mdc_queue_wait(req); - GOTO(out, rc); + goto out; out: ptlrpc_req_finished(req); @@ -1427,8 +1470,10 @@ static int mdc_ioc_hsm_request(struct obd_export *exp, int rc; req = ptlrpc_request_alloc(imp, &RQF_MDS_HSM_REQUEST); - if (req == NULL) - GOTO(out, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out; + } req_capsule_set_size(&req->rq_pill, &RMF_MDS_HSM_USER_ITEM, RCL_CLIENT, hur->hur_request.hr_itemcount @@ -1446,27 +1491,33 @@ static int mdc_ioc_hsm_request(struct obd_export *exp, /* Copy hsm_request struct */ req_hr = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_REQUEST); - if (req_hr == NULL) - GOTO(out, rc = -EPROTO); + if (req_hr == NULL) { + rc = -EPROTO; + goto out; + } *req_hr = hur->hur_request; /* Copy hsm_user_item structs */ req_hui = req_capsule_client_get(&req->rq_pill, &RMF_MDS_HSM_USER_ITEM); - if (req_hui == NULL) - GOTO(out, rc = -EPROTO); + if (req_hui == NULL) { + rc = -EPROTO; + goto out; + } memcpy(req_hui, hur->hur_user_item, hur->hur_request.hr_itemcount * sizeof(struct hsm_user_item)); /* Copy opaque field */ req_opaque = req_capsule_client_get(&req->rq_pill, &RMF_GENERIC_DATA); - if (req_opaque == NULL) - GOTO(out, rc = -EPROTO); + if (req_opaque == NULL) { + rc = -EPROTO; + goto out; + } memcpy(req_opaque, hur_data(hur), hur->hur_request.hr_data_len); ptlrpc_request_set_replen(req); rc = mdc_queue_wait(req); - GOTO(out, rc); + goto out; out: ptlrpc_req_finished(req); @@ -1534,7 +1585,7 @@ static int changelog_kkuc_cb(const struct lu_env *env, struct llog_handle *llh, memcpy(lh + 1, &rec->cr, len - sizeof(*lh)); rc = libcfs_kkuc_msg_put(cs->cs_fp, lh); - CDEBUG(D_CHANGELOG, "kucmsg fp %p len %d rc %d\n", cs->cs_fp, len,rc); + CDEBUG(D_CHANGELOG, "kucmsg fp %p len %d rc %d\n", cs->cs_fp, len, rc); return rc; } @@ -1551,24 +1602,28 @@ static int mdc_changelog_send_thread(void *csdata) cs->cs_fp, cs->cs_startrec); OBD_ALLOC(cs->cs_buf, KUC_CHANGELOG_MSG_MAXSIZE); - if (cs->cs_buf == NULL) - GOTO(out, rc = -ENOMEM); + if (cs->cs_buf == NULL) { + rc = -ENOMEM; + goto out; + } /* Set up the remote catalog handle */ ctxt = llog_get_context(cs->cs_obd, LLOG_CHANGELOG_REPL_CTXT); - if (ctxt == NULL) - GOTO(out, rc = -ENOENT); + if (ctxt == NULL) { + rc = -ENOENT; + goto out; + } rc = llog_open(NULL, ctxt, &llh, NULL, CHANGELOG_CATALOG, LLOG_OPEN_EXISTS); if (rc) { CERROR("%s: fail to open changelog catalog: rc = %d\n", cs->cs_obd->obd_name, rc); - GOTO(out, rc); + goto out; } rc = llog_init_handle(NULL, llh, LLOG_F_IS_CAT, NULL); if (rc) { CERROR("llog_init_handle failed %d\n", rc); - GOTO(out, rc); + goto out; } rc = llog_cat_process(NULL, llh, changelog_kkuc_cb, cs, 0, 0); @@ -1702,7 +1757,7 @@ static int mdc_quotactl(struct obd_device *unused, struct obd_export *exp, if (oqc) { *oqctl = *oqc; } else if (!rc) { - CERROR ("Can't unpack obd_quotactl\n"); + CERROR("Can't unpack obd_quotactl\n"); rc = -EPROTO; } } else if (!rc) { @@ -1762,7 +1817,7 @@ static int mdc_ioc_swap_layouts(struct obd_export *exp, rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; out: ptlrpc_req_finished(req); @@ -1775,7 +1830,6 @@ static int mdc_iocontrol(unsigned int cmd, struct obd_export *exp, int len, struct obd_device *obd = exp->exp_obd; struct obd_ioctl_data *data = karg; struct obd_import *imp = obd->u.cli.cl_import; - struct llog_ctxt *ctxt; int rc; if (!try_module_get(THIS_MODULE)) { @@ -1785,68 +1839,58 @@ static int mdc_iocontrol(unsigned int cmd, struct obd_export *exp, int len, switch (cmd) { case OBD_IOC_CHANGELOG_SEND: rc = mdc_ioc_changelog_send(obd, karg); - GOTO(out, rc); + goto out; case OBD_IOC_CHANGELOG_CLEAR: { struct ioc_changelog *icc = karg; - struct changelog_setinfo cs = - {.cs_recno = icc->icc_recno, .cs_id = icc->icc_id}; + struct changelog_setinfo cs = { + .cs_recno = icc->icc_recno, + .cs_id = icc->icc_id + }; + rc = obd_set_info_async(NULL, exp, strlen(KEY_CHANGELOG_CLEAR), KEY_CHANGELOG_CLEAR, sizeof(cs), &cs, NULL); - GOTO(out, rc); + goto out; } case OBD_IOC_FID2PATH: rc = mdc_ioc_fid2path(exp, karg); - GOTO(out, rc); + goto out; case LL_IOC_HSM_CT_START: rc = mdc_ioc_hsm_ct_start(exp, karg); /* ignore if it was already registered on this MDS. */ if (rc == -EEXIST) rc = 0; - GOTO(out, rc); + goto out; case LL_IOC_HSM_PROGRESS: rc = mdc_ioc_hsm_progress(exp, karg); - GOTO(out, rc); + goto out; case LL_IOC_HSM_STATE_GET: rc = mdc_ioc_hsm_state_get(exp, karg); - GOTO(out, rc); + goto out; case LL_IOC_HSM_STATE_SET: rc = mdc_ioc_hsm_state_set(exp, karg); - GOTO(out, rc); + goto out; case LL_IOC_HSM_ACTION: rc = mdc_ioc_hsm_current_action(exp, karg); - GOTO(out, rc); + goto out; case LL_IOC_HSM_REQUEST: rc = mdc_ioc_hsm_request(exp, karg); - GOTO(out, rc); + goto out; case OBD_IOC_CLIENT_RECOVER: rc = ptlrpc_recover_import(imp, data->ioc_inlbuf1, 0); if (rc < 0) - GOTO(out, rc); - GOTO(out, rc = 0); + goto out; + rc = 0; + goto out; case IOC_OSC_SET_ACTIVE: rc = ptlrpc_set_import_active(imp, data->ioc_offset); - GOTO(out, rc); - case OBD_IOC_PARSE: { - ctxt = llog_get_context(exp->exp_obd, LLOG_CONFIG_REPL_CTXT); - rc = class_config_parse_llog(NULL, ctxt, data->ioc_inlbuf1, - NULL); - llog_ctxt_put(ctxt); - GOTO(out, rc); - } - case OBD_IOC_LLOG_INFO: - case OBD_IOC_LLOG_PRINT: { - ctxt = llog_get_context(obd, LLOG_CONFIG_REPL_CTXT); - rc = llog_ioctl(NULL, ctxt, cmd, data); - llog_ctxt_put(ctxt); - GOTO(out, rc); - } + goto out; case OBD_IOC_POLL_QUOTACHECK: rc = mdc_quota_poll_check(exp, (struct if_quotacheck *)karg); - GOTO(out, rc); + goto out; case OBD_IOC_PING_TARGET: rc = ptlrpc_obd_ping(obd); - GOTO(out, rc); + goto out; /* * Normally IOC_OBD_STATFS, OBD_IOC_QUOTACTL iocontrol are handled by * LMV instead of MDC. But when the cluster is upgraded from 1.8, @@ -1857,35 +1901,44 @@ static int mdc_iocontrol(unsigned int cmd, struct obd_export *exp, int len, case IOC_OBD_STATFS: { struct obd_statfs stat_buf = {0}; - if (*((__u32 *) data->ioc_inlbuf2) != 0) - GOTO(out, rc = -ENODEV); + if (*((__u32 *) data->ioc_inlbuf2) != 0) { + rc = -ENODEV; + goto out; + } /* copy UUID */ if (copy_to_user(data->ioc_pbuf2, obd2cli_tgt(obd), min((int) data->ioc_plen2, - (int) sizeof(struct obd_uuid)))) - GOTO(out, rc = -EFAULT); + (int) sizeof(struct obd_uuid)))) { + rc = -EFAULT; + goto out; + } rc = mdc_statfs(NULL, obd->obd_self_export, &stat_buf, cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS), 0); if (rc != 0) - GOTO(out, rc); + goto out; if (copy_to_user(data->ioc_pbuf1, &stat_buf, min((int) data->ioc_plen1, - (int) sizeof(stat_buf)))) - GOTO(out, rc = -EFAULT); + (int) sizeof(stat_buf)))) { + rc = -EFAULT; + goto out; + } - GOTO(out, rc = 0); + rc = 0; + goto out; } case OBD_IOC_QUOTACTL: { struct if_quotactl *qctl = karg; struct obd_quotactl *oqctl; OBD_ALLOC_PTR(oqctl); - if (oqctl == NULL) - GOTO(out, rc = -ENOMEM); + if (oqctl == NULL) { + rc = -ENOMEM; + goto out; + } QCTL_COPY(oqctl, qctl); rc = obd_quotactl(exp, oqctl); @@ -1896,20 +1949,24 @@ static int mdc_iocontrol(unsigned int cmd, struct obd_export *exp, int len, } OBD_FREE_PTR(oqctl); - GOTO(out, rc); + goto out; } case LL_IOC_GET_CONNECT_FLAGS: if (copy_to_user(uarg, exp_connect_flags_ptr(exp), - sizeof(*exp_connect_flags_ptr(exp)))) - GOTO(out, rc = -EFAULT); + sizeof(*exp_connect_flags_ptr(exp)))) { + rc = -EFAULT; + goto out; + } - GOTO(out, rc = 0); + rc = 0; + goto out; case LL_IOC_LOV_SWAP_LAYOUTS: rc = mdc_ioc_swap_layouts(exp, karg); - GOTO(out, rc); + goto out; default: CERROR("unrecognised ioctl: cmd = %#x\n", cmd); - GOTO(out, rc = -ENOTTY); + rc = -ENOTTY; + goto out; } out: module_put(THIS_MODULE); @@ -1918,7 +1975,7 @@ out: } int mdc_get_info_rpc(struct obd_export *exp, - obd_count keylen, void *key, + u32 keylen, void *key, int vallen, void *val) { struct obd_import *imp = class_exp2cliimp(exp); @@ -2049,8 +2106,8 @@ static int mdc_hsm_copytool_send(int len, void *val) return -EPROTO; } - CDEBUG(D_HSM, " Received message mg=%x t=%d m=%d l=%d actions=%d " - "on %s\n", + CDEBUG(D_HSM, + "Received message mg=%x t=%d m=%d l=%d actions=%d on %s\n", lh->kuc_magic, lh->kuc_transport, lh->kuc_msgtype, lh->kuc_msglen, hal->hal_count, hal->hal_fsname); @@ -2093,8 +2150,8 @@ static int mdc_kuc_reregister(struct obd_import *imp) int mdc_set_info_async(const struct lu_env *env, struct obd_export *exp, - obd_count keylen, void *key, - obd_count vallen, void *val, + u32 keylen, void *key, + u32 vallen, void *val, struct ptlrpc_request_set *set) { struct obd_import *imp = class_exp2cliimp(exp); @@ -2206,91 +2263,6 @@ int mdc_get_info(const struct lu_env *env, struct obd_export *exp, return rc; } -static int mdc_pin(struct obd_export *exp, const struct lu_fid *fid, - struct obd_capa *oc, struct obd_client_handle *handle, - int flags) -{ - struct ptlrpc_request *req; - struct mdt_body *body; - int rc; - - req = ptlrpc_request_alloc(class_exp2cliimp(exp), &RQF_MDS_PIN); - if (req == NULL) - return -ENOMEM; - - mdc_set_capa_size(req, &RMF_CAPA1, oc); - - rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_PIN); - if (rc) { - ptlrpc_request_free(req); - return rc; - } - - mdc_pack_body(req, fid, oc, 0, 0, -1, flags); - - ptlrpc_request_set_replen(req); - - mdc_get_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL); - rc = ptlrpc_queue_wait(req); - mdc_put_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL); - if (rc) { - CERROR("Pin failed: %d\n", rc); - GOTO(err_out, rc); - } - - body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY); - if (body == NULL) - GOTO(err_out, rc = -EPROTO); - - handle->och_fh = body->handle; - handle->och_magic = OBD_CLIENT_HANDLE_MAGIC; - - handle->och_mod = obd_mod_alloc(); - if (handle->och_mod == NULL) { - DEBUG_REQ(D_ERROR, req, "can't allocate md_open_data"); - GOTO(err_out, rc = -ENOMEM); - } - handle->och_mod->mod_open_req = req; /* will be dropped by unpin */ - - return 0; - -err_out: - ptlrpc_req_finished(req); - return rc; -} - -static int mdc_unpin(struct obd_export *exp, struct obd_client_handle *handle, - int flag) -{ - struct ptlrpc_request *req; - struct mdt_body *body; - int rc; - - req = ptlrpc_request_alloc_pack(class_exp2cliimp(exp), &RQF_MDS_UNPIN, - LUSTRE_MDS_VERSION, MDS_UNPIN); - if (req == NULL) - return -ENOMEM; - - body = req_capsule_client_get(&req->rq_pill, &RMF_MDT_BODY); - body->handle = handle->och_fh; - body->flags = flag; - - ptlrpc_request_set_replen(req); - - mdc_get_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL); - rc = ptlrpc_queue_wait(req); - mdc_put_rpc_lock(exp->exp_obd->u.cli.cl_rpc_lock, NULL); - - if (rc != 0) - CERROR("Unpin failed: %d\n", rc); - - ptlrpc_req_finished(req); - ptlrpc_req_finished(handle->och_mod->mod_open_req); - - obd_mod_put(handle->och_mod); - return rc; -} - int mdc_sync(struct obd_export *exp, const struct lu_fid *fid, struct obd_capa *oc, struct ptlrpc_request **request) { @@ -2384,8 +2356,10 @@ int mdc_fid_alloc(struct obd_export *exp, struct lu_fid *fid, return seq_client_alloc_fid(NULL, seq, fid); } -struct obd_uuid *mdc_get_uuid(struct obd_export *exp) { +struct obd_uuid *mdc_get_uuid(struct obd_export *exp) +{ struct client_obd *cli = &exp->exp_obd->u.cli; + return &cli->cl_target_uuid; } @@ -2420,27 +2394,56 @@ struct ldlm_valblock_ops inode_lvbo = { .lvbo_free = mdc_resource_inode_free, }; +static int mdc_llog_init(struct obd_device *obd) +{ + struct obd_llog_group *olg = &obd->obd_olg; + struct llog_ctxt *ctxt; + int rc; + + rc = llog_setup(NULL, obd, olg, LLOG_CHANGELOG_REPL_CTXT, obd, + &llog_client_ops); + if (rc) + return rc; + + ctxt = llog_group_get_ctxt(olg, LLOG_CHANGELOG_REPL_CTXT); + llog_initiator_connect(ctxt); + llog_ctxt_put(ctxt); + + return 0; +} + +static void mdc_llog_finish(struct obd_device *obd) +{ + struct llog_ctxt *ctxt; + + ctxt = llog_get_context(obd, LLOG_CHANGELOG_REPL_CTXT); + if (ctxt) + llog_cleanup(NULL, ctxt); +} + static int mdc_setup(struct obd_device *obd, struct lustre_cfg *cfg) { struct client_obd *cli = &obd->u.cli; struct lprocfs_static_vars lvars = { NULL }; int rc; - OBD_ALLOC(cli->cl_rpc_lock, sizeof (*cli->cl_rpc_lock)); + OBD_ALLOC(cli->cl_rpc_lock, sizeof(*cli->cl_rpc_lock)); if (!cli->cl_rpc_lock) return -ENOMEM; mdc_init_rpc_lock(cli->cl_rpc_lock); ptlrpcd_addref(); - OBD_ALLOC(cli->cl_close_lock, sizeof (*cli->cl_close_lock)); - if (!cli->cl_close_lock) - GOTO(err_rpc_lock, rc = -ENOMEM); + OBD_ALLOC(cli->cl_close_lock, sizeof(*cli->cl_close_lock)); + if (!cli->cl_close_lock) { + rc = -ENOMEM; + goto err_rpc_lock; + } mdc_init_rpc_lock(cli->cl_close_lock); rc = client_obd_setup(obd, cfg); if (rc) - GOTO(err_close_lock, rc); + goto err_close_lock; lprocfs_mdc_init_vars(&lvars); lprocfs_obd_setup(obd, lvars.obd_vars); sptlrpc_lprocfs_cliobd_attach(obd); @@ -2450,7 +2453,7 @@ static int mdc_setup(struct obd_device *obd, struct lustre_cfg *cfg) obd->obd_namespace->ns_lvbo = &inode_lvbo; - rc = obd_llog_init(obd, &obd->obd_olg, obd, NULL); + rc = mdc_llog_init(obd); if (rc) { mdc_cleanup(obd); CERROR("failed to setup llogging subsystems\n"); @@ -2459,9 +2462,9 @@ static int mdc_setup(struct obd_device *obd, struct lustre_cfg *cfg) return rc; err_close_lock: - OBD_FREE(cli->cl_close_lock, sizeof (*cli->cl_close_lock)); + OBD_FREE(cli->cl_close_lock, sizeof(*cli->cl_close_lock)); err_rpc_lock: - OBD_FREE(cli->cl_rpc_lock, sizeof (*cli->cl_rpc_lock)); + OBD_FREE(cli->cl_rpc_lock, sizeof(*cli->cl_rpc_lock)); ptlrpcd_decref(); return rc; } @@ -2497,8 +2500,6 @@ static int mdc_init_ea_size(struct obd_export *exp, int easize, static int mdc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) { - int rc = 0; - switch (stage) { case OBD_CLEANUP_EARLY: break; @@ -2511,59 +2512,25 @@ static int mdc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) ptlrpc_lprocfs_unregister_obd(obd); lprocfs_obd_cleanup(obd); - rc = obd_llog_finish(obd, 0); - if (rc != 0) - CERROR("failed to cleanup llogging subsystems\n"); + mdc_llog_finish(obd); break; } - return rc; + return 0; } static int mdc_cleanup(struct obd_device *obd) { struct client_obd *cli = &obd->u.cli; - OBD_FREE(cli->cl_rpc_lock, sizeof (*cli->cl_rpc_lock)); - OBD_FREE(cli->cl_close_lock, sizeof (*cli->cl_close_lock)); + OBD_FREE(cli->cl_rpc_lock, sizeof(*cli->cl_rpc_lock)); + OBD_FREE(cli->cl_close_lock, sizeof(*cli->cl_close_lock)); ptlrpcd_decref(); return client_obd_cleanup(obd); } - -static int mdc_llog_init(struct obd_device *obd, struct obd_llog_group *olg, - struct obd_device *tgt, int *index) -{ - struct llog_ctxt *ctxt; - int rc; - - LASSERT(olg == &obd->obd_olg); - - rc = llog_setup(NULL, obd, olg, LLOG_CHANGELOG_REPL_CTXT, tgt, - &llog_client_ops); - if (rc) - return rc; - - ctxt = llog_group_get_ctxt(olg, LLOG_CHANGELOG_REPL_CTXT); - llog_initiator_connect(ctxt); - llog_ctxt_put(ctxt); - - return 0; -} - -static int mdc_llog_finish(struct obd_device *obd, int count) -{ - struct llog_ctxt *ctxt; - - ctxt = llog_get_context(obd, LLOG_CHANGELOG_REPL_CTXT); - if (ctxt) - llog_cleanup(NULL, ctxt); - - return 0; -} - -static int mdc_process_config(struct obd_device *obd, obd_count len, void *buf) +static int mdc_process_config(struct obd_device *obd, u32 len, void *buf) { struct lustre_cfg *lcfg = buf; struct lprocfs_static_vars lvars = { NULL }; @@ -2578,7 +2545,7 @@ static int mdc_process_config(struct obd_device *obd, obd_count len, void *buf) rc = 0; break; } - return(rc); + return rc; } @@ -2628,19 +2595,27 @@ static int mdc_interpret_renew_capa(const struct lu_env *env, struct mdt_body *body = NULL; struct lustre_capa *capa; - if (status) - GOTO(out, capa = ERR_PTR(status)); + if (status) { + capa = ERR_PTR(status); + goto out; + } body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY); - if (body == NULL) - GOTO(out, capa = ERR_PTR(-EFAULT)); + if (body == NULL) { + capa = ERR_PTR(-EFAULT); + goto out; + } - if ((body->valid & OBD_MD_FLOSSCAPA) == 0) - GOTO(out, capa = ERR_PTR(-ENOENT)); + if ((body->valid & OBD_MD_FLOSSCAPA) == 0) { + capa = ERR_PTR(-ENOENT); + goto out; + } capa = req_capsule_server_get(&req->rq_pill, &RMF_CAPA2); - if (!capa) - GOTO(out, capa = ERR_PTR(-EFAULT)); + if (!capa) { + capa = ERR_PTR(-EFAULT); + goto out; + } out: ra->ra_cb(ra->ra_oc, capa); return 0; @@ -2684,14 +2659,10 @@ struct obd_ops mdc_obd_ops = { .o_iocontrol = mdc_iocontrol, .o_set_info_async = mdc_set_info_async, .o_statfs = mdc_statfs, - .o_pin = mdc_pin, - .o_unpin = mdc_unpin, .o_fid_init = client_fid_init, .o_fid_fini = client_fid_fini, .o_fid_alloc = mdc_fid_alloc, .o_import_event = mdc_import_event, - .o_llog_init = mdc_llog_init, - .o_llog_finish = mdc_llog_finish, .o_get_info = mdc_get_info, .o_process_config = mdc_process_config, .o_get_uuid = mdc_get_uuid, @@ -2738,6 +2709,7 @@ int __init mdc_init(void) { int rc; struct lprocfs_static_vars lvars = { NULL }; + lprocfs_mdc_init_vars(&lvars); rc = class_register_type(&mdc_obd_ops, &mdc_md_ops, lvars.module_vars, diff --git a/drivers/staging/lustre/lustre/mgc/libmgc.c b/drivers/staging/lustre/lustre/mgc/libmgc.c deleted file mode 100644 index 8012f0f1bfcd..000000000000 --- a/drivers/staging/lustre/lustre/mgc/libmgc.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/mgc/libmgc.c - * - * Lustre Management Client - * Author: Nathan Rutman <nathan@clusterfs.com> - */ - -/* Minimal MGC for liblustre: only used to read the config log from the MGS - at setup time, no updates. */ - -#define DEBUG_SUBSYSTEM S_MGC - -#include "../include/liblustre.h" - -#include "../include/obd_class.h" -#include "../include/lustre_dlm.h" -#include "../include/lustre_log.h" -#include "../include/lustre_fsfilt.h" -#include "../include/lustre_disk.h" - - -static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg) -{ - int rc; - - ptlrpcd_addref(); - - rc = client_obd_setup(obd, lcfg); - if (rc) - GOTO(err_decref, rc); - - /* liblustre only support null flavor to MGS */ - obd->u.cli.cl_flvr_mgc.sf_rpc = SPTLRPC_FLVR_NULL; - - rc = obd_llog_init(obd, &obd->obd_olg, obd, NULL); - if (rc) { - CERROR("failed to setup llogging subsystems\n"); - GOTO(err_cleanup, rc); - } - - return rc; - -err_cleanup: - client_obd_cleanup(obd); -err_decref: - ptlrpcd_decref(); - return rc; -} - -static int mgc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) -{ - int rc = 0; - - switch (stage) { - case OBD_CLEANUP_EARLY: - case OBD_CLEANUP_EXPORTS: - obd_cleanup_client_import(obd); - rc = obd_llog_finish(obd, 0); - if (rc != 0) - CERROR("failed to cleanup llogging subsystems\n"); - break; - } - return rc; -} - -static int mgc_cleanup(struct obd_device *obd) -{ - int rc; - - ptlrpcd_decref(); - - rc = client_obd_cleanup(obd); - return rc; -} - -static int mgc_llog_init(struct obd_device *obd, struct obd_llog_group *olg, - struct obd_device *tgt, int *index) -{ - struct llog_ctxt *ctxt; - int rc; - - LASSERT(olg == &obd->obd_olg); - rc = llog_setup(NULL, obd, olg, LLOG_CONFIG_REPL_CTXT, tgt, - &llog_client_ops); - if (rc < 0) - return rc; - - ctxt = llog_group_get_ctxt(olg, LLOG_CONFIG_REPL_CTXT); - llog_initiator_connect(ctxt); - llog_ctxt_put(ctxt); - - return rc; -} - -static int mgc_llog_finish(struct obd_device *obd, int count) -{ - struct llog_ctxt *ctxt; - - - ctxt = llog_get_context(obd, LLOG_CONFIG_REPL_CTXT); - if (ctxt) - llog_cleanup(NULL, ctxt); - - return 0; -} - -struct obd_ops mgc_obd_ops = { - .o_owner = THIS_MODULE, - .o_setup = mgc_setup, - .o_precleanup = mgc_precleanup, - .o_cleanup = mgc_cleanup, - .o_add_conn = client_import_add_conn, - .o_del_conn = client_import_del_conn, - .o_connect = client_connect_import, - .o_disconnect = client_disconnect_export, - .o_llog_init = mgc_llog_init, - .o_llog_finish = mgc_llog_finish, -}; - -int __init mgc_init(void) -{ - return class_register_type(&mgc_obd_ops, NULL, - NULL, LUSTRE_MGC_NAME, NULL); -} diff --git a/drivers/staging/lustre/lustre/mgc/mgc_request.c b/drivers/staging/lustre/lustre/mgc/mgc_request.c index f520591d5784..bc263adf09d4 100644 --- a/drivers/staging/lustre/lustre/mgc/mgc_request.c +++ b/drivers/staging/lustre/lustre/mgc/mgc_request.c @@ -47,7 +47,6 @@ #include "../include/lprocfs_status.h" #include "../include/lustre_log.h" #include "../include/lustre_disk.h" -#include "../include/dt_object.h" #include "mgc_internal.h" @@ -329,7 +328,8 @@ static int config_log_add(struct obd_device *obd, char *logname, CONFIG_T_SPTLRPC, NULL, NULL); if (IS_ERR(sptlrpc_cld)) { CERROR("can't create sptlrpc log: %s\n", seclogname); - GOTO(out_err, rc = PTR_ERR(sptlrpc_cld)); + rc = PTR_ERR(sptlrpc_cld); + goto out_err; } } params_cld = config_params_log_add(obd, cfg, sb); @@ -337,13 +337,14 @@ static int config_log_add(struct obd_device *obd, char *logname, rc = PTR_ERR(params_cld); CERROR("%s: can't create params log: rc = %d\n", obd->obd_name, rc); - GOTO(out_err1, rc); + goto out_err1; } cld = do_config_log_add(obd, logname, CONFIG_T_CONFIG, cfg, sb); if (IS_ERR(cld)) { CERROR("can't create log: %s\n", logname); - GOTO(out_err2, rc = PTR_ERR(cld)); + rc = PTR_ERR(cld); + goto out_err2; } cld->cld_sptlrpc = sptlrpc_cld; @@ -354,8 +355,10 @@ static int config_log_add(struct obd_device *obd, char *logname, struct config_llog_data *recover_cld; *strrchr(seclogname, '-') = 0; recover_cld = config_recover_log_add(obd, seclogname, cfg, sb); - if (IS_ERR(recover_cld)) - GOTO(out_err3, rc = PTR_ERR(recover_cld)); + if (IS_ERR(recover_cld)) { + rc = PTR_ERR(recover_cld); + goto out_err3; + } cld->cld_recover = recover_cld; } @@ -624,146 +627,6 @@ static void mgc_requeue_add(struct config_llog_data *cld) } } -/********************** class fns **********************/ -static int mgc_local_llog_init(const struct lu_env *env, - struct obd_device *obd, - struct obd_device *disk) -{ - struct llog_ctxt *ctxt; - int rc; - - rc = llog_setup(env, obd, &obd->obd_olg, LLOG_CONFIG_ORIG_CTXT, disk, - &llog_osd_ops); - if (rc) - return rc; - - ctxt = llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT); - LASSERT(ctxt); - ctxt->loc_dir = obd->u.cli.cl_mgc_configs_dir; - llog_ctxt_put(ctxt); - - return 0; -} - -static int mgc_local_llog_fini(const struct lu_env *env, - struct obd_device *obd) -{ - struct llog_ctxt *ctxt; - - ctxt = llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT); - llog_cleanup(env, ctxt); - - return 0; -} - -static int mgc_fs_setup(struct obd_device *obd, struct super_block *sb) -{ - struct lustre_sb_info *lsi = s2lsi(sb); - struct client_obd *cli = &obd->u.cli; - struct lu_fid rfid, fid; - struct dt_object *root, *dto; - struct lu_env *env; - int rc = 0; - - LASSERT(lsi); - LASSERT(lsi->lsi_dt_dev); - - OBD_ALLOC_PTR(env); - if (env == NULL) - return -ENOMEM; - - /* The mgc fs exclusion mutex. Only one fs can be setup at a time. */ - mutex_lock(&cli->cl_mgc_mutex); - - cfs_cleanup_group_info(); - - /* Setup the configs dir */ - rc = lu_env_init(env, LCT_MG_THREAD); - if (rc) - GOTO(out_err, rc); - - fid.f_seq = FID_SEQ_LOCAL_NAME; - fid.f_oid = 1; - fid.f_ver = 0; - rc = local_oid_storage_init(env, lsi->lsi_dt_dev, &fid, - &cli->cl_mgc_los); - if (rc) - GOTO(out_env, rc); - - rc = dt_root_get(env, lsi->lsi_dt_dev, &rfid); - if (rc) - GOTO(out_env, rc); - - root = dt_locate_at(env, lsi->lsi_dt_dev, &rfid, - &cli->cl_mgc_los->los_dev->dd_lu_dev); - if (unlikely(IS_ERR(root))) - GOTO(out_los, rc = PTR_ERR(root)); - - dto = local_file_find_or_create(env, cli->cl_mgc_los, root, - MOUNT_CONFIGS_DIR, - S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO); - lu_object_put_nocache(env, &root->do_lu); - if (IS_ERR(dto)) - GOTO(out_los, rc = PTR_ERR(dto)); - - cli->cl_mgc_configs_dir = dto; - - LASSERT(lsi->lsi_osd_exp->exp_obd->obd_lvfs_ctxt.dt); - rc = mgc_local_llog_init(env, obd, lsi->lsi_osd_exp->exp_obd); - if (rc) - GOTO(out_llog, rc); - - /* We take an obd ref to insure that we can't get to mgc_cleanup - * without calling mgc_fs_cleanup first. */ - class_incref(obd, "mgc_fs", obd); - - /* We keep the cl_mgc_sem until mgc_fs_cleanup */ -out_llog: - if (rc) { - lu_object_put(env, &cli->cl_mgc_configs_dir->do_lu); - cli->cl_mgc_configs_dir = NULL; - } -out_los: - if (rc < 0) { - local_oid_storage_fini(env, cli->cl_mgc_los); - cli->cl_mgc_los = NULL; - mutex_unlock(&cli->cl_mgc_mutex); - } -out_env: - lu_env_fini(env); -out_err: - OBD_FREE_PTR(env); - return rc; -} - -static int mgc_fs_cleanup(struct obd_device *obd) -{ - struct lu_env env; - struct client_obd *cli = &obd->u.cli; - int rc; - - LASSERT(cli->cl_mgc_los != NULL); - - rc = lu_env_init(&env, LCT_MG_THREAD); - if (rc) - GOTO(unlock, rc); - - mgc_local_llog_fini(&env, obd); - - lu_object_put_nocache(&env, &cli->cl_mgc_configs_dir->do_lu); - cli->cl_mgc_configs_dir = NULL; - - local_oid_storage_fini(&env, cli->cl_mgc_los); - cli->cl_mgc_los = NULL; - lu_env_fini(&env); - -unlock: - class_decref(obd, "mgc_fs", obd); - mutex_unlock(&cli->cl_mgc_mutex); - - return 0; -} - static int mgc_llog_init(const struct lu_env *env, struct obd_device *obd) { struct llog_ctxt *ctxt; @@ -853,12 +716,12 @@ static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg) rc = client_obd_setup(obd, lcfg); if (rc) - GOTO(err_decref, rc); + goto err_decref; rc = mgc_llog_init(NULL, obd); if (rc) { CERROR("failed to setup llogging subsystems\n"); - GOTO(err_cleanup, rc); + goto err_cleanup; } lprocfs_mgc_init_vars(&lvars); @@ -876,7 +739,7 @@ static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg) CERROR("%s: Cannot start requeue thread (%d)," "no more log updates!\n", obd->obd_name, rc); - GOTO(err_cleanup, rc); + goto err_cleanup; } /* rc is the task_struct pointer of mgc_requeue_thread. */ rc = 0; @@ -1041,14 +904,6 @@ static int mgc_enqueue(struct obd_export *exp, struct lov_stripe_md *lsm, return rc; } -static int mgc_cancel(struct obd_export *exp, struct lov_stripe_md *md, - __u32 mode, struct lustre_handle *lockh) -{ - ldlm_lock_decref(lockh, mode); - - return 0; -} - static void mgc_notify_active(struct obd_device *unused) { /* wakeup mgc_requeue_thread to requeue mgc lock */ @@ -1100,7 +955,7 @@ static int mgc_target_register(struct obd_export *exp, } int mgc_set_info_async(const struct lu_env *env, struct obd_export *exp, - obd_count keylen, void *key, obd_count vallen, + u32 keylen, void *key, u32 vallen, void *val, struct ptlrpc_request_set *set) { int rc = -EINVAL; @@ -1123,38 +978,6 @@ int mgc_set_info_async(const struct lu_env *env, struct obd_export *exp, ptlrpc_reconnect_import(imp); return 0; } - /* FIXME move this to mgc_process_config */ - if (KEY_IS(KEY_REGISTER_TARGET)) { - struct mgs_target_info *mti; - if (vallen != sizeof(struct mgs_target_info)) - return -EINVAL; - mti = (struct mgs_target_info *)val; - CDEBUG(D_MGC, "register_target %s %#x\n", - mti->mti_svname, mti->mti_flags); - rc = mgc_target_register(exp, mti); - return rc; - } - if (KEY_IS(KEY_SET_FS)) { - struct super_block *sb = (struct super_block *)val; - - if (vallen != sizeof(struct super_block)) - return -EINVAL; - - rc = mgc_fs_setup(exp->exp_obd, sb); - if (rc) - CERROR("set_fs got %d\n", rc); - - return rc; - } - if (KEY_IS(KEY_CLEAR_FS)) { - if (vallen != 0) - return -EINVAL; - rc = mgc_fs_cleanup(exp->exp_obd); - if (rc) - CERROR("clear_fs got %d\n", rc); - - return rc; - } if (KEY_IS(KEY_SET_INFO)) { struct mgs_send_param *msp; @@ -1504,13 +1327,17 @@ static int mgc_process_recover_log(struct obd_device *obd, nrpages = CONFIG_READ_NRPAGES_INIT; OBD_ALLOC(pages, sizeof(*pages) * nrpages); - if (pages == NULL) - GOTO(out, rc = -ENOMEM); + if (pages == NULL) { + rc = -ENOMEM; + goto out; + } for (i = 0; i < nrpages; i++) { pages[i] = alloc_page(GFP_IOFS); - if (pages[i] == NULL) - GOTO(out, rc = -ENOMEM); + if (pages[i] == NULL) { + rc = -ENOMEM; + goto out; + } } again: @@ -1518,20 +1345,24 @@ again: LASSERT(mutex_is_locked(&cld->cld_lock)); req = ptlrpc_request_alloc(class_exp2cliimp(cld->cld_mgcexp), &RQF_MGS_CONFIG_READ); - if (req == NULL) - GOTO(out, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out; + } rc = ptlrpc_request_pack(req, LUSTRE_MGS_VERSION, MGS_CONFIG_READ); if (rc) - GOTO(out, rc); + goto out; /* pack request */ body = req_capsule_client_get(&req->rq_pill, &RMF_MGS_CONFIG_BODY); LASSERT(body != NULL); LASSERT(sizeof(body->mcb_name) > strlen(cld->cld_logname)); if (strlcpy(body->mcb_name, cld->cld_logname, sizeof(body->mcb_name)) - >= sizeof(body->mcb_name)) - GOTO(out, rc = -E2BIG); + >= sizeof(body->mcb_name)) { + rc = -E2BIG; + goto out; + } body->mcb_offset = cfg->cfg_last_idx + 1; body->mcb_type = cld->cld_type; body->mcb_bits = PAGE_CACHE_SHIFT; @@ -1540,8 +1371,10 @@ again: /* allocate bulk transfer descriptor */ desc = ptlrpc_prep_bulk_imp(req, nrpages, 1, BULK_PUT_SINK, MGS_BULK_PORTAL); - if (desc == NULL) - GOTO(out, rc = -ENOMEM); + if (desc == NULL) { + rc = -ENOMEM; + goto out; + } for (i = 0; i < nrpages; i++) ptlrpc_prep_bulk_page_pin(desc, pages[i], 0, PAGE_CACHE_SIZE); @@ -1549,11 +1382,13 @@ again: ptlrpc_request_set_replen(req); rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; res = req_capsule_server_get(&req->rq_pill, &RMF_MGS_CONFIG_RES); - if (res->mcr_size < res->mcr_offset) - GOTO(out, rc = -EINVAL); + if (res->mcr_size < res->mcr_offset) { + rc = -EINVAL; + goto out; + } /* always update the index even though it might have errors with * handling the recover logs */ @@ -1564,16 +1399,20 @@ again: res->mcr_offset, eof == false); ealen = sptlrpc_cli_unwrap_bulk_read(req, req->rq_bulk, 0); - if (ealen < 0) - GOTO(out, rc = ealen); + if (ealen < 0) { + rc = ealen; + goto out; + } - if (ealen > nrpages << PAGE_CACHE_SHIFT) - GOTO(out, rc = -EINVAL); + if (ealen > nrpages << PAGE_CACHE_SHIFT) { + rc = -EINVAL; + goto out; + } if (ealen == 0) { /* no logs transferred */ if (!eof) rc = -EINVAL; - GOTO(out, rc); + goto out; } mne_swab = !!ptlrpc_rep_need_swab(req); @@ -1622,54 +1461,11 @@ out: return rc; } -static int mgc_llog_local_copy(const struct lu_env *env, - struct obd_device *obd, - struct llog_ctxt *rctxt, - struct llog_ctxt *lctxt, char *logname) -{ - char *temp_log; - int rc; - - - - /* - * - copy it to backup using llog_backup() - * - copy remote llog to logname using llog_backup() - * - if failed then move backup to logname again - */ - - OBD_ALLOC(temp_log, strlen(logname) + 1); - if (!temp_log) - return -ENOMEM; - sprintf(temp_log, "%sT", logname); - - /* make a copy of local llog at first */ - rc = llog_backup(env, obd, lctxt, lctxt, logname, temp_log); - if (rc < 0 && rc != -ENOENT) - GOTO(out, rc); - /* copy remote llog to the local copy */ - rc = llog_backup(env, obd, rctxt, lctxt, logname, logname); - if (rc == -ENOENT) { - /* no remote llog, delete local one too */ - llog_erase(env, lctxt, NULL, logname); - } else if (rc < 0) { - /* error during backup, get local one back from the copy */ - llog_backup(env, obd, lctxt, lctxt, temp_log, logname); -out: - CERROR("%s: failed to copy remote log %s: rc = %d\n", - obd->obd_name, logname, rc); - } - llog_erase(env, lctxt, NULL, temp_log); - OBD_FREE(temp_log, strlen(logname) + 1); - return rc; -} - /* local_only means it cannot get remote llogs */ static int mgc_process_cfg_log(struct obd_device *mgc, struct config_llog_data *cld, int local_only) { - struct llog_ctxt *ctxt, *lctxt = NULL; - struct dt_object *cl_mgc_dir = mgc->u.cli.cl_mgc_configs_dir; + struct llog_ctxt *ctxt; struct lustre_sb_info *lsi = NULL; int rc = 0; bool sptlrpc_started = false; @@ -1694,42 +1490,14 @@ static int mgc_process_cfg_log(struct obd_device *mgc, rc = lu_env_init(env, LCT_MG_THREAD); if (rc) - GOTO(out_free, rc); + goto out_free; ctxt = llog_get_context(mgc, LLOG_CONFIG_REPL_CTXT); LASSERT(ctxt); - lctxt = llog_get_context(mgc, LLOG_CONFIG_ORIG_CTXT); - - /* Copy the setup log locally if we can. Don't mess around if we're - * running an MGS though (logs are already local). */ - if (lctxt && lsi && IS_SERVER(lsi) && !IS_MGS(lsi) && - cl_mgc_dir != NULL && - lu2dt_dev(cl_mgc_dir->do_lu.lo_dev) == lsi->lsi_dt_dev) { - if (!local_only) - /* Only try to copy log if we have the lock. */ - rc = mgc_llog_local_copy(env, mgc, ctxt, lctxt, - cld->cld_logname); - if (local_only || rc) { - if (llog_is_empty(env, lctxt, cld->cld_logname)) { - LCONSOLE_ERROR_MSG(0x13a, - "Failed to get MGS log %s and no local copy.\n", - cld->cld_logname); - GOTO(out_pop, rc = -ENOENT); - } - CDEBUG(D_MGC, - "Failed to get MGS log %s, using local copy for now, will try to update later.\n", - cld->cld_logname); - } - /* Now, whether we copied or not, start using the local llog. - * If we failed to copy, we'll start using whatever the old - * log has. */ - llog_ctxt_put(ctxt); - ctxt = lctxt; - lctxt = NULL; - } else { - if (local_only) /* no local log at client side */ - GOTO(out_pop, rc = -EIO); + if (local_only) /* no local log at client side */ { + rc = -EIO; + goto out_pop; } if (cld_is_sptlrpc(cld)) { @@ -1745,8 +1513,6 @@ static int mgc_process_cfg_log(struct obd_device *mgc, out_pop: __llog_ctxt_put(env, ctxt); - if (lctxt) - __llog_ctxt_put(env, lctxt); /* * update settings on existing OBDs. doing it inside @@ -1829,12 +1595,8 @@ int mgc_process_log(struct obd_device *mgc, struct config_llog_data *cld) mutex_unlock(&cld->cld_lock); /* Now drop the lock so MGS can revoke it */ - if (!rcl) { - rcl = mgc_cancel(mgc->u.cli.cl_mgc_mgsexp, NULL, - LCK_CR, &lockh); - if (rcl) - CERROR("Can't drop cfg lock: %d\n", rcl); - } + if (!rcl) + ldlm_lock_decref(&lockh, LCK_CR); return rc; } @@ -1844,7 +1606,7 @@ int mgc_process_log(struct obd_device *mgc, struct config_llog_data *cld) * LCFG_LOG_START gets the config log from the MGS, processes it to start * any services, and adds it to the list logs to watch (follow). */ -static int mgc_process_config(struct obd_device *obd, obd_count len, void *buf) +static int mgc_process_config(struct obd_device *obd, u32 len, void *buf) { struct lustre_cfg *lcfg = buf; struct config_llog_instance *cfg = NULL; @@ -1857,8 +1619,10 @@ static int mgc_process_config(struct obd_device *obd, obd_count len, void *buf) struct mgs_target_info *mti; if (LUSTRE_CFG_BUFLEN(lcfg, 1) != - sizeof(struct mgs_target_info)) - GOTO(out, rc = -EINVAL); + sizeof(struct mgs_target_info)) { + rc = -EINVAL; + goto out; + } mti = (struct mgs_target_info *)lustre_cfg_buf(lcfg, 1); CDEBUG(D_MGC, "add_target %s %#x\n", @@ -1943,7 +1707,8 @@ static int mgc_process_config(struct obd_device *obd, obd_count len, void *buf) } default: { CERROR("Unknown command: %d\n", lcfg->lcfg_command); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } } @@ -1961,7 +1726,6 @@ struct obd_ops mgc_obd_ops = { .o_connect = client_connect_import, .o_disconnect = client_disconnect_export, /* .o_enqueue = mgc_enqueue, */ - .o_cancel = mgc_cancel, /* .o_iocontrol = mgc_iocontrol, */ .o_set_info_async = mgc_set_info_async, .o_get_info = mgc_get_info, diff --git a/drivers/staging/lustre/lustre/obdclass/Makefile b/drivers/staging/lustre/lustre/obdclass/Makefile index ba10043fdd50..e894681797c2 100644 --- a/drivers/staging/lustre/lustre/obdclass/Makefile +++ b/drivers/staging/lustre/lustre/obdclass/Makefile @@ -1,10 +1,11 @@ -obj-$(CONFIG_LUSTRE_FS) += obdclass.o llog_test.o +obj-$(CONFIG_LUSTRE_FS) += obdclass.o obdclass-y := linux/linux-module.o linux/linux-obdo.o linux/linux-sysctl.o \ llog.o llog_cat.o llog_obd.o llog_swab.o class_obd.o debug.o \ - genops.o uuid.o llog_ioctl.o lprocfs_status.o \ - lustre_handles.o lustre_peer.o llog_osd.o \ - local_storage.o statfs_pack.o obdo.o obd_config.o obd_mount.o\ - mea.o lu_object.o dt_object.o capa.o cl_object.o \ - cl_page.o cl_lock.o cl_io.o lu_ref.o acl.o idmap.o \ - lu_ucred.o + genops.o uuid.o lprocfs_status.o \ + lustre_handles.o lustre_peer.o \ + statfs_pack.o obdo.o obd_config.o obd_mount.o \ + lu_object.o dt_object.o capa.o cl_object.o \ + cl_page.o cl_lock.o cl_io.o lu_ref.o acl.o + +obdclass-$(CONFIG_PROC_FS) += lprocfs_counters.o diff --git a/drivers/staging/lustre/lustre/obdclass/acl.c b/drivers/staging/lustre/lustre/obdclass/acl.c index 3b394a0bff9d..2619bfeceb8b 100644 --- a/drivers/staging/lustre/lustre/obdclass/acl.c +++ b/drivers/staging/lustre/lustre/obdclass/acl.c @@ -196,8 +196,10 @@ int lustre_posix_acl_xattr_filter(posix_acl_xattr_header *header, int size, case ACL_GROUP_OBJ: case ACL_MASK: case ACL_OTHER: - if (id != ACL_UNDEFINED_ID) - GOTO(_out, rc = -EIO); + if (id != ACL_UNDEFINED_ID) { + rc = -EIO; + goto _out; + } memcpy(&new->a_entries[j++], &header->a_entries[i], sizeof(posix_acl_xattr_entry)); @@ -215,7 +217,8 @@ int lustre_posix_acl_xattr_filter(posix_acl_xattr_header *header, int size, sizeof(posix_acl_xattr_entry)); break; default: - GOTO(_out, rc = -EIO); + rc = -EIO; + goto _out; } } @@ -318,8 +321,10 @@ int lustre_acl_xattr_merge2posix(posix_acl_xattr_header *posix_header, int size, case ACL_USER_OBJ: case ACL_GROUP_OBJ: case ACL_OTHER: - if (ae.e_id != ACL_UNDEFINED_ID) - GOTO(_out, rc = -EIO); + if (ae.e_id != ACL_UNDEFINED_ID) { + rc = -EIO; + goto _out; + } if (ae.e_stat != ES_DEL) { new->a_entries[j].e_tag = @@ -336,7 +341,8 @@ int lustre_acl_xattr_merge2posix(posix_acl_xattr_header *posix_header, int size, if (ae.e_stat == ES_DEL) break; default: - GOTO(_out, rc = -EIO); + rc = -EIO; + goto _out; } } } else { @@ -437,8 +443,10 @@ lustre_acl_xattr_merge2ext(posix_acl_xattr_header *posix_header, int size, case ACL_GROUP_OBJ: case ACL_MASK: case ACL_OTHER: - if (pae.e_id != ACL_UNDEFINED_ID) - GOTO(out, rc = -EIO); + if (pae.e_id != ACL_UNDEFINED_ID) { + rc = -EIO; + goto out; + } case ACL_USER: /* ignore "nobody" entry. */ if (pae.e_id == NOBODY_UID) @@ -501,7 +509,8 @@ lustre_acl_xattr_merge2ext(posix_acl_xattr_header *posix_header, int size, } break; default: - GOTO(out, rc = -EIO); + rc = -EIO; + goto out; } } diff --git a/drivers/staging/lustre/lustre/obdclass/capa.c b/drivers/staging/lustre/lustre/obdclass/capa.c index 5af61a8c0b85..cd1abce378ea 100644 --- a/drivers/staging/lustre/lustre/obdclass/capa.c +++ b/drivers/staging/lustre/lustre/obdclass/capa.c @@ -213,12 +213,11 @@ struct obd_capa *capa_add(struct hlist_head *hash, struct lustre_capa *capa) capa_delete_lru(list); spin_unlock(&capa_lock); return ocapa; - } else { - capa_get(old); - spin_unlock(&capa_lock); - capa_put(ocapa); - return old; } + capa_get(old); + spin_unlock(&capa_lock); + capa_put(ocapa); + return old; } EXPORT_SYMBOL(capa_add); @@ -312,13 +311,14 @@ int capa_encrypt_id(__u32 *d, __u32 *s, __u8 *key, int keylen) min = ll_crypto_tfm_alg_min_keysize(tfm); if (keylen < min) { CERROR("keylen at least %d bits for aes\n", min * 8); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } rc = crypto_blkcipher_setkey(tfm, key, min); if (rc) { CERROR("failed to setting key for aes\n"); - GOTO(out, rc); + goto out; } sg_init_table(&sd, 1); @@ -334,7 +334,7 @@ int capa_encrypt_id(__u32 *d, __u32 *s, __u8 *key, int keylen) rc = crypto_blkcipher_encrypt(&desc, &sd, &ss, 16); if (rc) { CERROR("failed to encrypt for aes\n"); - GOTO(out, rc); + goto out; } out: @@ -364,13 +364,14 @@ int capa_decrypt_id(__u32 *d, __u32 *s, __u8 *key, int keylen) min = ll_crypto_tfm_alg_min_keysize(tfm); if (keylen < min) { CERROR("keylen at least %d bits for aes\n", min * 8); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } rc = crypto_blkcipher_setkey(tfm, key, min); if (rc) { CERROR("failed to setting key for aes\n"); - GOTO(out, rc); + goto out; } sg_init_table(&sd, 1); @@ -387,7 +388,7 @@ int capa_decrypt_id(__u32 *d, __u32 *s, __u8 *key, int keylen) rc = crypto_blkcipher_decrypt(&desc, &sd, &ss, 16); if (rc) { CERROR("failed to decrypt for aes\n"); - GOTO(out, rc); + goto out; } out: diff --git a/drivers/staging/lustre/lustre/obdclass/cl_io.c b/drivers/staging/lustre/lustre/obdclass/cl_io.c index 6870ee823736..f2383a497cbe 100644 --- a/drivers/staging/lustre/lustre/obdclass/cl_io.c +++ b/drivers/staging/lustre/lustre/obdclass/cl_io.c @@ -126,7 +126,7 @@ void cl_io_fini(const struct lu_env *env, struct cl_io *io) info->clt_current_io = NULL; /* sanity check for layout change */ - switch(io->ci_type) { + switch (io->ci_type) { case CIT_READ: case CIT_WRITE: break; @@ -1452,12 +1452,13 @@ struct cl_req *cl_req_alloc(const struct lu_env *env, struct cl_page *page, if (req != NULL) { int result; + req->crq_type = crt; + INIT_LIST_HEAD(&req->crq_pages); + INIT_LIST_HEAD(&req->crq_layers); + OBD_ALLOC(req->crq_o, nr_objects * sizeof(req->crq_o[0])); if (req->crq_o != NULL) { req->crq_nrobjs = nr_objects; - req->crq_type = crt; - INIT_LIST_HEAD(&req->crq_pages); - INIT_LIST_HEAD(&req->crq_layers); result = cl_req_init(env, req, page); } else result = -ENOMEM; @@ -1559,7 +1560,7 @@ EXPORT_SYMBOL(cl_req_prep); * for the same request. */ void cl_req_attr_set(const struct lu_env *env, struct cl_req *req, - struct cl_req_attr *attr, obd_valid flags) + struct cl_req_attr *attr, u64 flags) { const struct cl_req_slice *slice; struct cl_page *page; diff --git a/drivers/staging/lustre/lustre/obdclass/cl_lock.c b/drivers/staging/lustre/lustre/obdclass/cl_lock.c index 7d99319b714e..b204531ef710 100644 --- a/drivers/staging/lustre/lustre/obdclass/cl_lock.c +++ b/drivers/staging/lustre/lustre/obdclass/cl_lock.c @@ -1938,7 +1938,7 @@ int cl_lock_discard_pages(const struct lu_env *env, struct cl_lock *lock) io->ci_ignore_layout = 1; result = cl_io_init(env, io, CIT_MISC, io->ci_obj); if (result != 0) - GOTO(out, result); + goto out; cb = descr->cld_mode == CLM_READ ? check_and_discard_cb : discard_cb; info->clt_fn_index = info->clt_next_index = descr->cld_start; diff --git a/drivers/staging/lustre/lustre/obdclass/class_obd.c b/drivers/staging/lustre/lustre/obdclass/class_obd.c index 701c6a776524..7265ecbc6f9d 100644 --- a/drivers/staging/lustre/lustre/obdclass/class_obd.c +++ b/drivers/staging/lustre/lustre/obdclass/class_obd.c @@ -177,18 +177,21 @@ int class_resolve_dev_name(__u32 len, const char *name) if (!len || !name) { CERROR("No name passed,!\n"); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } if (name[len - 1] != 0) { CERROR("Name not nul terminated!\n"); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } CDEBUG(D_IOCTL, "device name %s\n", name); dev = class_name2dev(name); if (dev == -1) { CDEBUG(D_IOCTL, "No device for name %s!\n", name); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } CDEBUG(D_IOCTL, "device name %s, dev %d\n", name, dev); @@ -208,7 +211,7 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg) /* only for debugging */ if (cmd == LIBCFS_IOC_DEBUG_MASK) { - debug_data = (struct libcfs_debug_ioctl_data*)arg; + debug_data = (struct libcfs_debug_ioctl_data *)arg; libcfs_subsystem_debug = debug_data->subs; libcfs_debug = debug_data->debug; return 0; @@ -227,11 +230,14 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg) if (!data->ioc_plen1 || !data->ioc_pbuf1) { CERROR("No config buffer passed!\n"); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } OBD_ALLOC(lcfg, data->ioc_plen1); - if (lcfg == NULL) - GOTO(out, err = -ENOMEM); + if (lcfg == NULL) { + err = -ENOMEM; + goto out; + } err = copy_from_user(lcfg, data->ioc_pbuf1, data->ioc_plen1); if (!err) @@ -240,18 +246,20 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg) err = class_process_config(lcfg); OBD_FREE(lcfg, data->ioc_plen1); - GOTO(out, err); + goto out; } case OBD_GET_VERSION: if (!data->ioc_inlbuf1) { CERROR("No buffer passed in ioctl\n"); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } if (strlen(BUILD_VERSION) + 1 > data->ioc_inllen1) { CERROR("ioctl buffer too small to hold version\n"); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } memcpy(data->ioc_bulk, BUILD_VERSION, @@ -260,7 +268,7 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg) err = obd_ioctl_popdata((void *)arg, data, len); if (err) err = -EFAULT; - GOTO(out, err); + goto out; case OBD_IOC_NAME2DEV: { /* Resolve a device name. This does not change the @@ -271,13 +279,15 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg) dev = class_resolve_dev_name(data->ioc_inllen1, data->ioc_inlbuf1); data->ioc_dev = dev; - if (dev < 0) - GOTO(out, err = -EINVAL); + if (dev < 0) { + err = -EINVAL; + goto out; + } err = obd_ioctl_popdata((void *)arg, data, sizeof(*data)); if (err) err = -EFAULT; - GOTO(out, err); + goto out; } case OBD_IOC_UUID2DEV: { @@ -289,11 +299,13 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg) if (!data->ioc_inllen1 || !data->ioc_inlbuf1) { CERROR("No UUID passed!\n"); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } if (data->ioc_inlbuf1[data->ioc_inllen1 - 1] != 0) { CERROR("UUID not NUL terminated!\n"); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } CDEBUG(D_IOCTL, "device name %s\n", data->ioc_inlbuf1); @@ -303,7 +315,8 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg) if (dev == -1) { CDEBUG(D_IOCTL, "No device for UUID %s!\n", data->ioc_inlbuf1); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } CDEBUG(D_IOCTL, "device name %s, dev %d\n", data->ioc_inlbuf1, @@ -311,13 +324,14 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg) err = obd_ioctl_popdata((void *)arg, data, sizeof(*data)); if (err) err = -EFAULT; - GOTO(out, err); + goto out; } case OBD_IOC_CLOSE_UUID: { CDEBUG(D_IOCTL, "closing all connections to uuid %s (NOOP)\n", data->ioc_inlbuf1); - GOTO(out, err = 0); + err = 0; + goto out; } case OBD_IOC_GETDEVICE: { @@ -326,16 +340,20 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg) if (!data->ioc_inlbuf1) { CERROR("No buffer passed in ioctl\n"); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } if (data->ioc_inllen1 < 128) { CERROR("ioctl buffer too small to hold version\n"); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } obd = class_num2obd(index); - if (!obd) - GOTO(out, err = -ENOENT); + if (!obd) { + err = -ENOENT; + goto out; + } if (obd->obd_stopping) status = "ST"; @@ -352,56 +370,66 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg) atomic_read(&obd->obd_refcount)); err = obd_ioctl_popdata((void *)arg, data, len); - GOTO(out, err = 0); + err = 0; + goto out; } } if (data->ioc_dev == OBD_DEV_BY_DEVNAME) { - if (data->ioc_inllen4 <= 0 || data->ioc_inlbuf4 == NULL) - GOTO(out, err = -EINVAL); - if (strnlen(data->ioc_inlbuf4, MAX_OBD_NAME) >= MAX_OBD_NAME) - GOTO(out, err = -EINVAL); + if (data->ioc_inllen4 <= 0 || data->ioc_inlbuf4 == NULL) { + err = -EINVAL; + goto out; + } + if (strnlen(data->ioc_inlbuf4, MAX_OBD_NAME) >= MAX_OBD_NAME) { + err = -EINVAL; + goto out; + } obd = class_name2obd(data->ioc_inlbuf4); } else if (data->ioc_dev < class_devno_max()) { obd = class_num2obd(data->ioc_dev); } else { CERROR("OBD ioctl: No device\n"); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } if (obd == NULL) { CERROR("OBD ioctl : No Device %d\n", data->ioc_dev); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC); if (!obd->obd_set_up || obd->obd_stopping) { - CERROR("OBD ioctl: device not setup %d \n", data->ioc_dev); - GOTO(out, err = -EINVAL); + CERROR("OBD ioctl: device not setup %d\n", data->ioc_dev); + err = -EINVAL; + goto out; } - switch(cmd) { + switch (cmd) { case OBD_IOC_NO_TRANSNO: { if (!obd->obd_attached) { CERROR("Device %d not attached\n", obd->obd_minor); - GOTO(out, err = -ENODEV); + err = -ENODEV; + goto out; } CDEBUG(D_HA, "%s: disabling committed-transno notification\n", obd->obd_name); obd->obd_no_transno = 1; - GOTO(out, err = 0); + err = 0; + goto out; } default: { err = obd_iocontrol(cmd, obd->obd_self_export, len, data, NULL); if (err) - GOTO(out, err); + goto out; err = obd_ioctl_popdata((void *)arg, data, len); if (err) err = -EFAULT; - GOTO(out, err); + goto out; } } @@ -506,20 +534,23 @@ static int __init init_obdclass(void) spin_lock_init(&obd_types_lock); obd_zombie_impexp_init(); - obd_memory = lprocfs_alloc_stats(OBD_STATS_NUM, - LPROCFS_STATS_FLAG_NONE | - LPROCFS_STATS_FLAG_IRQ_SAFE); - if (obd_memory == NULL) { - CERROR("kmalloc of 'obd_memory' failed\n"); - return -ENOMEM; - } + if (IS_ENABLED(CONFIG_PROC_FS)) { + obd_memory = lprocfs_alloc_stats(OBD_STATS_NUM, + LPROCFS_STATS_FLAG_NONE | + LPROCFS_STATS_FLAG_IRQ_SAFE); - lprocfs_counter_init(obd_memory, OBD_MEMORY_STAT, - LPROCFS_CNTR_AVGMINMAX, - "memused", "bytes"); - lprocfs_counter_init(obd_memory, OBD_MEMORY_PAGES_STAT, - LPROCFS_CNTR_AVGMINMAX, - "pagesused", "pages"); + if (obd_memory == NULL) { + CERROR("kmalloc of 'obd_memory' failed\n"); + return -ENOMEM; + } + + lprocfs_counter_init(obd_memory, OBD_MEMORY_STAT, + LPROCFS_CNTR_AVGMINMAX, + "memused", "bytes"); + lprocfs_counter_init(obd_memory, OBD_MEMORY_PAGES_STAT, + LPROCFS_CNTR_AVGMINMAX, + "pagesused", "pages"); + } err = obd_init_checks(); if (err == -EOVERFLOW) diff --git a/drivers/staging/lustre/lustre/obdclass/debug.c b/drivers/staging/lustre/lustre/obdclass/debug.c index e8aa42beb3c7..d0f8f875ddd6 100644 --- a/drivers/staging/lustre/lustre/obdclass/debug.c +++ b/drivers/staging/lustre/lustre/obdclass/debug.c @@ -41,7 +41,6 @@ #define DEBUG_SUBSYSTEM D_OTHER -#include "../include/obd_ost.h" #include "../include/obd_support.h" #include "../include/lustre_debug.h" #include "../include/lustre_net.h" diff --git a/drivers/staging/lustre/lustre/obdclass/dt_object.c b/drivers/staging/lustre/lustre/obdclass/dt_object.c index 130b8dd0b418..52256c26bf07 100644 --- a/drivers/staging/lustre/lustre/obdclass/dt_object.c +++ b/drivers/staging/lustre/lustre/obdclass/dt_object.c @@ -384,26 +384,30 @@ struct dt_object *dt_find_or_create(const struct lu_env *env, return dto; th = dt_trans_create(env, dt); - if (IS_ERR(th)) - GOTO(out, rc = PTR_ERR(th)); + if (IS_ERR(th)) { + rc = PTR_ERR(th); + goto out; + } rc = dt_declare_create(env, dto, at, NULL, dof, th); if (rc) - GOTO(trans_stop, rc); + goto trans_stop; rc = dt_trans_start_local(env, dt, th); if (rc) - GOTO(trans_stop, rc); + goto trans_stop; dt_write_lock(env, dto, 0); - if (dt_object_exists(dto)) - GOTO(unlock, rc = 0); + if (dt_object_exists(dto)) { + rc = 0; + goto unlock; + } CDEBUG(D_OTHER, "create new object "DFID"\n", PFID(fid)); rc = dt_create(env, dto, at, NULL, dof, th); if (rc) - GOTO(unlock, rc); + goto unlock; LASSERT(dt_object_exists(dto)); unlock: dt_write_unlock(env, dto); @@ -683,14 +687,18 @@ static int dt_index_page_build(const struct lu_env *env, union lu_page *lp, ii->ii_hash_end = hash; if (OBD_FAIL_CHECK(OBD_FAIL_OBD_IDX_READ_BREAK)) { - if (lip->lip_nr != 0) - GOTO(out, rc = 0); + if (lip->lip_nr != 0) { + rc = 0; + goto out; + } } if (nob < size) { if (lip->lip_nr == 0) - GOTO(out, rc = -EINVAL); - GOTO(out, rc = 0); + rc = -EINVAL; + else + rc = 0; + goto out; } if ((ii->ii_flags & II_FL_NOHASH) == 0) { @@ -710,7 +718,7 @@ static int dt_index_page_build(const struct lu_env *env, union lu_page *lp, rc = iops->rec(env, it, (struct dt_rec *)tmp_entry, attr); if (rc != -ESTALE) { if (rc != 0) - GOTO(out, rc); + goto out; /* hash/key/record successfully copied! */ lip->lip_nr++; @@ -727,7 +735,7 @@ static int dt_index_page_build(const struct lu_env *env, union lu_page *lp, } while (rc == 0); - GOTO(out, rc); + goto out; out: if (rc >= 0 && lip->lip_nr > 0) /* one more container */ @@ -869,20 +877,24 @@ int dt_index_read(const struct lu_env *env, struct dt_device *dev, obj = dt_locate(env, dev, &ii->ii_fid); if (IS_ERR(obj)) return PTR_ERR(obj); - if (dt_object_exists(obj) == 0) - GOTO(out, rc = -ENOENT); + if (dt_object_exists(obj) == 0) { + rc = -ENOENT; + goto out; + } /* fetch index features associated with index object */ feat = dt_index_feat_select(fid_seq(&ii->ii_fid), lu_object_attr(&obj->do_lu)); - if (IS_ERR(feat)) - GOTO(out, rc = PTR_ERR(feat)); + if (IS_ERR(feat)) { + rc = PTR_ERR(feat); + goto out; + } /* load index feature if not done already */ if (obj->do_index_ops == NULL) { rc = obj->do_ops->do_index_try(env, obj, feat); if (rc) - GOTO(out, rc); + goto out; } /* fill ii_flags with supported index features */ @@ -893,7 +905,8 @@ int dt_index_read(const struct lu_env *env, struct dt_device *dev, /* key size is variable */ ii->ii_flags |= II_FL_VARKEY; /* we don't support variable key size for the time being */ - GOTO(out, rc = -EOPNOTSUPP); + rc = -EOPNOTSUPP; + goto out; } ii->ii_recsize = feat->dif_recsize_max; @@ -901,7 +914,8 @@ int dt_index_read(const struct lu_env *env, struct dt_device *dev, /* record size is variable */ ii->ii_flags |= II_FL_VARREC; /* we don't support variable record size for the time being */ - GOTO(out, rc = -EOPNOTSUPP); + rc = -EOPNOTSUPP; + goto out; } if ((feat->dif_flags & DT_IND_NONUNQ) != 0) @@ -922,7 +936,7 @@ int dt_index_read(const struct lu_env *env, struct dt_device *dev, ii->ii_hash_end = II_END_OFF; } - GOTO(out, rc); + goto out; out: lu_object_put(env, &obj->do_lu); return rc; diff --git a/drivers/staging/lustre/lustre/obdclass/genops.c b/drivers/staging/lustre/lustre/obdclass/genops.c index 504c59aabaef..c314e9c2343e 100644 --- a/drivers/staging/lustre/lustre/obdclass/genops.c +++ b/drivers/staging/lustre/lustre/obdclass/genops.c @@ -40,7 +40,6 @@ */ #define DEBUG_SUBSYSTEM S_CLASS -#include "../include/obd_ost.h" #include "../include/obd_class.h" #include "../include/lprocfs_status.h" @@ -184,7 +183,7 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops, if (type->typ_dt_ops == NULL || type->typ_md_ops == NULL || type->typ_name == NULL) - GOTO (failed, rc); + goto failed; *(type->typ_dt_ops) = *dt_ops; /* md_ops is optional */ @@ -198,14 +197,14 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops, if (IS_ERR(type->typ_procroot)) { rc = PTR_ERR(type->typ_procroot); type->typ_procroot = NULL; - GOTO (failed, rc); + goto failed; } if (ldt != NULL) { type->typ_lu = ldt; rc = lu_device_type_init(ldt); if (rc != 0) - GOTO (failed, rc); + goto failed; } spin_lock(&obd_types_lock); @@ -295,8 +294,10 @@ struct obd_device *class_newdev(const char *type_name, const char *name) } newdev = obd_device_alloc(); - if (newdev == NULL) - GOTO(out_type, result = ERR_PTR(-ENOMEM)); + if (newdev == NULL) { + result = ERR_PTR(-ENOMEM); + goto out_type; + } LASSERT(newdev->obd_magic == OBD_DEVICE_MAGIC); @@ -336,11 +337,12 @@ struct obd_device *class_newdev(const char *type_name, const char *name) if (result == NULL && i >= class_devno_max()) { CERROR("all %u OBD devices used, increase MAX_OBD_DEVICES\n", class_devno_max()); - GOTO(out, result = ERR_PTR(-EOVERFLOW)); + result = ERR_PTR(-EOVERFLOW); + goto out; } if (IS_ERR(result)) - GOTO(out, result); + goto out; CDEBUG(D_IOCTL, "Adding new device %s (%p)\n", result->obd_name, result); @@ -656,26 +658,26 @@ int obd_init_caches(void) sizeof(struct obd_device), 0, 0, NULL); if (!obd_device_cachep) - GOTO(out, -ENOMEM); + goto out; LASSERT(obdo_cachep == NULL); obdo_cachep = kmem_cache_create("ll_obdo_cache", sizeof(struct obdo), 0, 0, NULL); if (!obdo_cachep) - GOTO(out, -ENOMEM); + goto out; LASSERT(import_cachep == NULL); import_cachep = kmem_cache_create("ll_import_cache", sizeof(struct obd_import), 0, 0, NULL); if (!import_cachep) - GOTO(out, -ENOMEM); + goto out; LASSERT(capa_cachep == NULL); capa_cachep = kmem_cache_create("capa_cache", sizeof(struct obd_capa), 0, 0, NULL); if (!capa_cachep) - GOTO(out, -ENOMEM); + goto out; return 0; out: @@ -857,12 +859,16 @@ struct obd_export *class_new_export(struct obd_device *obd, spin_lock(&obd->obd_dev_lock); /* shouldn't happen, but might race */ - if (obd->obd_stopping) - GOTO(exit_unlock, rc = -ENODEV); + if (obd->obd_stopping) { + rc = -ENODEV; + goto exit_unlock; + } hash = cfs_hash_getref(obd->obd_uuid_hash); - if (hash == NULL) - GOTO(exit_unlock, rc = -ENODEV); + if (hash == NULL) { + rc = -ENODEV; + goto exit_unlock; + } spin_unlock(&obd->obd_dev_lock); if (!obd_uuid_equals(cluuid, &obd->obd_uuid)) { @@ -870,14 +876,16 @@ struct obd_export *class_new_export(struct obd_device *obd, if (rc != 0) { LCONSOLE_WARN("%s: denying duplicate export for %s, %d\n", obd->obd_name, cluuid->uuid, rc); - GOTO(exit_err, rc = -EALREADY); + rc = -EALREADY; + goto exit_err; } } spin_lock(&obd->obd_dev_lock); if (obd->obd_stopping) { cfs_hash_del(hash, cluuid, &export->exp_uuid_hash); - GOTO(exit_unlock, rc = -ENODEV); + rc = -ENODEV; + goto exit_unlock; } class_incref(obd, "export", export); @@ -1187,7 +1195,7 @@ int class_disconnect(struct obd_export *export) * call extra class_export_puts(). */ if (already_disconnected) { LASSERT(hlist_unhashed(&export->exp_nid_hash)); - GOTO(no_disconn, already_disconnected); + goto no_disconn; } CDEBUG(D_IOCTL, "disconnect: cookie %#llx\n", @@ -1425,7 +1433,8 @@ int obd_export_evict_by_nid(struct obd_device *obd, const char *nid) cfs_hash_putref(nid_hash); if (!exports_evicted) - CDEBUG(D_HA,"%s: can't disconnect NID '%s': no exports found\n", + CDEBUG(D_HA, + "%s: can't disconnect NID '%s': no exports found\n", obd->obd_name, nid); return exports_evicted; } diff --git a/drivers/staging/lustre/lustre/obdclass/idmap.c b/drivers/staging/lustre/lustre/obdclass/idmap.c deleted file mode 100644 index 1190885c06b6..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/idmap.c +++ /dev/null @@ -1,477 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/obdclass/idmap.c - * - * Lustre user identity mapping. - * - * Author: Fan Yong <fanyong@clusterfs.com> - */ - -#define DEBUG_SUBSYSTEM S_SEC - -#include "../include/lustre_idmap.h" -#include "../include/md_object.h" -#include "../include/obd_support.h" - -#define lustre_get_group_info(group_info) do { \ - atomic_inc(&(group_info)->usage); \ -} while (0) - -#define lustre_put_group_info(group_info) do { \ - if (atomic_dec_and_test(&(group_info)->usage)) \ - groups_free(group_info); \ -} while (0) - -/* - * groups_search() is copied from linux kernel! - * A simple bsearch. - */ -static int lustre_groups_search(const struct group_info *group_info, gid_t grp) -{ - int left, right; - - if (!group_info) - return 0; - - left = 0; - right = group_info->ngroups; - while (left < right) { - int mid = (left + right) / 2; - int cmp = grp - - from_kgid(&init_user_ns, CFS_GROUP_AT(group_info, mid)); - - if (cmp > 0) - left = mid + 1; - else if (cmp < 0) - right = mid; - else - return 1; - } - return 0; -} - -void lustre_groups_from_list(struct group_info *ginfo, gid_t *glist) -{ - int i; - int count = ginfo->ngroups; - - /* fill group_info from gid array */ - for (i = 0; i < ginfo->nblocks && count > 0; i++) { - int cp_count = min(CFS_NGROUPS_PER_BLOCK, count); - int off = i * CFS_NGROUPS_PER_BLOCK; - int len = cp_count * sizeof(*glist); - - memcpy(ginfo->blocks[i], glist + off, len); - count -= cp_count; - } -} -EXPORT_SYMBOL(lustre_groups_from_list); - -/* groups_sort() is copied from linux kernel! */ -/* a simple shell-metzner sort */ -void lustre_groups_sort(struct group_info *group_info) -{ - int base, max, stride; - int gidsetsize = group_info->ngroups; - - for (stride = 1; stride < gidsetsize; stride = 3 * stride + 1) - ; /* nothing */ - stride /= 3; - - while (stride) { - max = gidsetsize - stride; - for (base = 0; base < max; base++) { - int left = base; - int right = left + stride; - gid_t tmp = from_kgid(&init_user_ns, - CFS_GROUP_AT(group_info, right)); - - while (left >= 0 && - tmp < from_kgid(&init_user_ns, - CFS_GROUP_AT(group_info, left))) { - CFS_GROUP_AT(group_info, right) = - CFS_GROUP_AT(group_info, left); - right = left; - left -= stride; - } - CFS_GROUP_AT(group_info, right) = - make_kgid(&init_user_ns, tmp); - } - stride /= 3; - } -} -EXPORT_SYMBOL(lustre_groups_sort); - -int lustre_in_group_p(struct lu_ucred *mu, gid_t grp) -{ - int rc = 1; - - if (grp != mu->uc_fsgid) { - struct group_info *group_info = NULL; - - if (mu->uc_ginfo || !mu->uc_identity || - mu->uc_valid == UCRED_OLD) - if (grp == mu->uc_suppgids[0] || - grp == mu->uc_suppgids[1]) - return 1; - - if (mu->uc_ginfo) - group_info = mu->uc_ginfo; - else if (mu->uc_identity) - group_info = mu->uc_identity->mi_ginfo; - - if (!group_info) - return 0; - - lustre_get_group_info(group_info); - rc = lustre_groups_search(group_info, grp); - lustre_put_group_info(group_info); - } - return rc; -} -EXPORT_SYMBOL(lustre_in_group_p); - -struct lustre_idmap_entry { - struct list_head lie_rmt_uid_hash; /* hashed as lie_rmt_uid; */ - struct list_head lie_lcl_uid_hash; /* hashed as lie_lcl_uid; */ - struct list_head lie_rmt_gid_hash; /* hashed as lie_rmt_gid; */ - struct list_head lie_lcl_gid_hash; /* hashed as lie_lcl_gid; */ - uid_t lie_rmt_uid; /* remote uid */ - uid_t lie_lcl_uid; /* local uid */ - gid_t lie_rmt_gid; /* remote gid */ - gid_t lie_lcl_gid; /* local gid */ -}; - -static inline __u32 lustre_idmap_hashfunc(__u32 id) -{ - return id & (CFS_IDMAP_HASHSIZE - 1); -} - -static -struct lustre_idmap_entry *idmap_entry_alloc(uid_t rmt_uid, uid_t lcl_uid, - gid_t rmt_gid, gid_t lcl_gid) -{ - struct lustre_idmap_entry *e; - - OBD_ALLOC_PTR(e); - if (e == NULL) - return NULL; - - INIT_LIST_HEAD(&e->lie_rmt_uid_hash); - INIT_LIST_HEAD(&e->lie_lcl_uid_hash); - INIT_LIST_HEAD(&e->lie_rmt_gid_hash); - INIT_LIST_HEAD(&e->lie_lcl_gid_hash); - e->lie_rmt_uid = rmt_uid; - e->lie_lcl_uid = lcl_uid; - e->lie_rmt_gid = rmt_gid; - e->lie_lcl_gid = lcl_gid; - - return e; -} - -static void idmap_entry_free(struct lustre_idmap_entry *e) -{ - if (!list_empty(&e->lie_rmt_uid_hash)) - list_del(&e->lie_rmt_uid_hash); - if (!list_empty(&e->lie_lcl_uid_hash)) - list_del(&e->lie_lcl_uid_hash); - if (!list_empty(&e->lie_rmt_gid_hash)) - list_del(&e->lie_rmt_gid_hash); - if (!list_empty(&e->lie_lcl_gid_hash)) - list_del(&e->lie_lcl_gid_hash); - OBD_FREE_PTR(e); -} - -/* - * return value - * NULL: not found entry - * ERR_PTR(-EACCES): found 1(remote):N(local) mapped entry - * others: found normal entry - */ -static -struct lustre_idmap_entry *idmap_search_entry(struct lustre_idmap_table *t, - uid_t rmt_uid, uid_t lcl_uid, - gid_t rmt_gid, gid_t lcl_gid) -{ - struct list_head *head; - struct lustre_idmap_entry *e; - - head = &t->lit_idmaps[RMT_UIDMAP_IDX][lustre_idmap_hashfunc(rmt_uid)]; - list_for_each_entry(e, head, lie_rmt_uid_hash) - if (e->lie_rmt_uid == rmt_uid) { - if (e->lie_lcl_uid == lcl_uid) { - if (e->lie_rmt_gid == rmt_gid && - e->lie_lcl_gid == lcl_gid) - /* must be quaternion match */ - return e; - } else { - /* 1:N uid mapping */ - CERROR("rmt uid %u already be mapped to %u" - " (new %u)\n", e->lie_rmt_uid, - e->lie_lcl_uid, lcl_uid); - return ERR_PTR(-EACCES); - } - } - - head = &t->lit_idmaps[RMT_GIDMAP_IDX][lustre_idmap_hashfunc(rmt_gid)]; - list_for_each_entry(e, head, lie_rmt_gid_hash) - if (e->lie_rmt_gid == rmt_gid) { - if (e->lie_lcl_gid == lcl_gid) { - if (unlikely(e->lie_rmt_uid == rmt_uid && - e->lie_lcl_uid == lcl_uid)) - /* after uid mapping search above, - * we should never come here */ - LBUG(); - } else { - /* 1:N gid mapping */ - CERROR("rmt gid %u already be mapped to %u" - " (new %u)\n", e->lie_rmt_gid, - e->lie_lcl_gid, lcl_gid); - return ERR_PTR(-EACCES); - } - } - - return NULL; -} - -static __u32 idmap_lookup_uid(struct list_head *hash, int reverse, - __u32 uid) -{ - struct list_head *head = &hash[lustre_idmap_hashfunc(uid)]; - struct lustre_idmap_entry *e; - - if (!reverse) { - list_for_each_entry(e, head, lie_rmt_uid_hash) - if (e->lie_rmt_uid == uid) - return e->lie_lcl_uid; - } else { - list_for_each_entry(e, head, lie_lcl_uid_hash) - if (e->lie_lcl_uid == uid) - return e->lie_rmt_uid; - } - - return CFS_IDMAP_NOTFOUND; -} - -static __u32 idmap_lookup_gid(struct list_head *hash, int reverse, __u32 gid) -{ - struct list_head *head = &hash[lustre_idmap_hashfunc(gid)]; - struct lustre_idmap_entry *e; - - if (!reverse) { - list_for_each_entry(e, head, lie_rmt_gid_hash) - if (e->lie_rmt_gid == gid) - return e->lie_lcl_gid; - } else { - list_for_each_entry(e, head, lie_lcl_gid_hash) - if (e->lie_lcl_gid == gid) - return e->lie_rmt_gid; - } - - return CFS_IDMAP_NOTFOUND; -} - -int lustre_idmap_add(struct lustre_idmap_table *t, - uid_t ruid, uid_t luid, - gid_t rgid, gid_t lgid) -{ - struct lustre_idmap_entry *e0, *e1; - - LASSERT(t); - - spin_lock(&t->lit_lock); - e0 = idmap_search_entry(t, ruid, luid, rgid, lgid); - spin_unlock(&t->lit_lock); - if (!e0) { - e0 = idmap_entry_alloc(ruid, luid, rgid, lgid); - if (!e0) - return -ENOMEM; - - spin_lock(&t->lit_lock); - e1 = idmap_search_entry(t, ruid, luid, rgid, lgid); - if (e1 == NULL) { - list_add_tail(&e0->lie_rmt_uid_hash, - &t->lit_idmaps[RMT_UIDMAP_IDX] - [lustre_idmap_hashfunc(ruid)]); - list_add_tail(&e0->lie_lcl_uid_hash, - &t->lit_idmaps[LCL_UIDMAP_IDX] - [lustre_idmap_hashfunc(luid)]); - list_add_tail(&e0->lie_rmt_gid_hash, - &t->lit_idmaps[RMT_GIDMAP_IDX] - [lustre_idmap_hashfunc(rgid)]); - list_add_tail(&e0->lie_lcl_gid_hash, - &t->lit_idmaps[LCL_GIDMAP_IDX] - [lustre_idmap_hashfunc(lgid)]); - } - spin_unlock(&t->lit_lock); - if (e1 != NULL) { - idmap_entry_free(e0); - if (IS_ERR(e1)) - return PTR_ERR(e1); - } - } else if (IS_ERR(e0)) { - return PTR_ERR(e0); - } - - return 0; -} -EXPORT_SYMBOL(lustre_idmap_add); - -int lustre_idmap_del(struct lustre_idmap_table *t, - uid_t ruid, uid_t luid, - gid_t rgid, gid_t lgid) -{ - struct lustre_idmap_entry *e; - int rc = 0; - - LASSERT(t); - - spin_lock(&t->lit_lock); - e = idmap_search_entry(t, ruid, luid, rgid, lgid); - if (IS_ERR(e)) - rc = PTR_ERR(e); - else if (e) - idmap_entry_free(e); - spin_unlock(&t->lit_lock); - - return rc; -} -EXPORT_SYMBOL(lustre_idmap_del); - -int lustre_idmap_lookup_uid(struct lu_ucred *mu, - struct lustre_idmap_table *t, - int reverse, uid_t uid) -{ - struct list_head *hash; - - if (mu && (mu->uc_valid == UCRED_OLD || mu->uc_valid == UCRED_NEW)) { - if (!reverse) { - if (uid == mu->uc_o_uid) - return mu->uc_uid; - else if (uid == mu->uc_o_fsuid) - return mu->uc_fsuid; - } else { - if (uid == mu->uc_uid) - return mu->uc_o_uid; - else if (uid == mu->uc_fsuid) - return mu->uc_o_fsuid; - } - } - - if (t == NULL) - return CFS_IDMAP_NOTFOUND; - - hash = t->lit_idmaps[reverse ? LCL_UIDMAP_IDX : RMT_UIDMAP_IDX]; - - spin_lock(&t->lit_lock); - uid = idmap_lookup_uid(hash, reverse, uid); - spin_unlock(&t->lit_lock); - - return uid; -} -EXPORT_SYMBOL(lustre_idmap_lookup_uid); - -int lustre_idmap_lookup_gid(struct lu_ucred *mu, struct lustre_idmap_table *t, - int reverse, gid_t gid) -{ - struct list_head *hash; - - if (mu && (mu->uc_valid == UCRED_OLD || mu->uc_valid == UCRED_NEW)) { - if (!reverse) { - if (gid == mu->uc_o_gid) - return mu->uc_gid; - else if (gid == mu->uc_o_fsgid) - return mu->uc_fsgid; - } else { - if (gid == mu->uc_gid) - return mu->uc_o_gid; - else if (gid == mu->uc_fsgid) - return mu->uc_o_fsgid; - } - } - - if (t == NULL) - return CFS_IDMAP_NOTFOUND; - - hash = t->lit_idmaps[reverse ? LCL_GIDMAP_IDX : RMT_GIDMAP_IDX]; - - spin_lock(&t->lit_lock); - gid = idmap_lookup_gid(hash, reverse, gid); - spin_unlock(&t->lit_lock); - - return gid; -} -EXPORT_SYMBOL(lustre_idmap_lookup_gid); - -struct lustre_idmap_table *lustre_idmap_init(void) -{ - struct lustre_idmap_table *t; - int i, j; - - OBD_ALLOC_PTR(t); - if(unlikely(t == NULL)) - return (ERR_PTR(-ENOMEM)); - - spin_lock_init(&t->lit_lock); - for (i = 0; i < ARRAY_SIZE(t->lit_idmaps); i++) - for (j = 0; j < ARRAY_SIZE(t->lit_idmaps[i]); j++) - INIT_LIST_HEAD(&t->lit_idmaps[i][j]); - - return t; -} -EXPORT_SYMBOL(lustre_idmap_init); - -void lustre_idmap_fini(struct lustre_idmap_table *t) -{ - struct list_head *list; - struct lustre_idmap_entry *e; - int i; - LASSERT(t); - - list = t->lit_idmaps[RMT_UIDMAP_IDX]; - spin_lock(&t->lit_lock); - for (i = 0; i < CFS_IDMAP_HASHSIZE; i++) - while (!list_empty(&list[i])) { - e = list_entry(list[i].next, - struct lustre_idmap_entry, - lie_rmt_uid_hash); - idmap_entry_free(e); - } - spin_unlock(&t->lit_lock); - - OBD_FREE_PTR(t); -} -EXPORT_SYMBOL(lustre_idmap_fini); diff --git a/drivers/staging/lustre/lustre/obdclass/linkea.c b/drivers/staging/lustre/lustre/obdclass/linkea.c deleted file mode 100644 index 8a1c7b6fefe9..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/linkea.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * version 2 along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 021110-1307, USA - * - * GPL HEADER END - */ -/* - * Copyright (c) 2013, Intel Corporation. - * Use is subject to license terms. - * - * Author: Di Wang <di.wang@intel.com> - */ - -#include "../include/lustre/lustre_idl.h" -#include "../include/obd.h" -#include "../include/lustre_linkea.h" - -int linkea_data_new(struct linkea_data *ldata, struct lu_buf *buf) -{ - ldata->ld_buf = lu_buf_check_and_alloc(buf, PAGE_CACHE_SIZE); - if (ldata->ld_buf->lb_buf == NULL) - return -ENOMEM; - ldata->ld_leh = ldata->ld_buf->lb_buf; - ldata->ld_leh->leh_magic = LINK_EA_MAGIC; - ldata->ld_leh->leh_len = sizeof(struct link_ea_header); - ldata->ld_leh->leh_reccount = 0; - return 0; -} -EXPORT_SYMBOL(linkea_data_new); - -int linkea_init(struct linkea_data *ldata) -{ - struct link_ea_header *leh; - - LASSERT(ldata->ld_buf != NULL); - leh = ldata->ld_buf->lb_buf; - if (leh->leh_magic == __swab32(LINK_EA_MAGIC)) { - leh->leh_magic = LINK_EA_MAGIC; - leh->leh_reccount = __swab32(leh->leh_reccount); - leh->leh_len = __swab64(leh->leh_len); - /* entries are swabbed by linkea_entry_unpack */ - } - if (leh->leh_magic != LINK_EA_MAGIC) - return -EINVAL; - if (leh->leh_reccount == 0) - return -ENODATA; - - ldata->ld_leh = leh; - return 0; -} -EXPORT_SYMBOL(linkea_init); - -/** - * Pack a link_ea_entry. - * All elements are stored as chars to avoid alignment issues. - * Numbers are always big-endian - * \retval record length - */ -static int linkea_entry_pack(struct link_ea_entry *lee, - const struct lu_name *lname, - const struct lu_fid *pfid) -{ - struct lu_fid tmpfid; - int reclen; - - fid_cpu_to_be(&tmpfid, pfid); - if (OBD_FAIL_CHECK(OBD_FAIL_LFSCK_LINKEA_CRASH)) - tmpfid.f_ver = ~0; - memcpy(&lee->lee_parent_fid, &tmpfid, sizeof(tmpfid)); - memcpy(lee->lee_name, lname->ln_name, lname->ln_namelen); - reclen = sizeof(struct link_ea_entry) + lname->ln_namelen; - - lee->lee_reclen[0] = (reclen >> 8) & 0xff; - lee->lee_reclen[1] = reclen & 0xff; - return reclen; -} - -void linkea_entry_unpack(const struct link_ea_entry *lee, int *reclen, - struct lu_name *lname, struct lu_fid *pfid) -{ - *reclen = (lee->lee_reclen[0] << 8) | lee->lee_reclen[1]; - memcpy(pfid, &lee->lee_parent_fid, sizeof(*pfid)); - fid_be_to_cpu(pfid, pfid); - lname->ln_name = lee->lee_name; - lname->ln_namelen = *reclen - sizeof(struct link_ea_entry); -} -EXPORT_SYMBOL(linkea_entry_unpack); - -/** - * Add a record to the end of link ea buf - **/ -int linkea_add_buf(struct linkea_data *ldata, const struct lu_name *lname, - const struct lu_fid *pfid) -{ - LASSERT(ldata->ld_leh != NULL); - - if (lname == NULL || pfid == NULL) - return -EINVAL; - - ldata->ld_reclen = lname->ln_namelen + sizeof(struct link_ea_entry); - if (ldata->ld_leh->leh_len + ldata->ld_reclen > - ldata->ld_buf->lb_len) { - if (lu_buf_check_and_grow(ldata->ld_buf, - ldata->ld_leh->leh_len + - ldata->ld_reclen) < 0) - return -ENOMEM; - } - - ldata->ld_leh = ldata->ld_buf->lb_buf; - ldata->ld_lee = ldata->ld_buf->lb_buf + ldata->ld_leh->leh_len; - ldata->ld_reclen = linkea_entry_pack(ldata->ld_lee, lname, pfid); - ldata->ld_leh->leh_len += ldata->ld_reclen; - ldata->ld_leh->leh_reccount++; - CDEBUG(D_INODE, "New link_ea name '%.*s' is added\n", - lname->ln_namelen, lname->ln_name); - return 0; -} -EXPORT_SYMBOL(linkea_add_buf); - -/** Del the current record from the link ea buf */ -void linkea_del_buf(struct linkea_data *ldata, const struct lu_name *lname) -{ - LASSERT(ldata->ld_leh != NULL && ldata->ld_lee != NULL); - - ldata->ld_leh->leh_reccount--; - ldata->ld_leh->leh_len -= ldata->ld_reclen; - memmove(ldata->ld_lee, (char *)ldata->ld_lee + ldata->ld_reclen, - (char *)ldata->ld_leh + ldata->ld_leh->leh_len - - (char *)ldata->ld_lee); - CDEBUG(D_INODE, "Old link_ea name '%.*s' is removed\n", - lname->ln_namelen, lname->ln_name); -} -EXPORT_SYMBOL(linkea_del_buf); - -/** - * Check if such a link exists in linkEA. - * - * \param ldata link data the search to be done on - * \param lname name in the parent's directory entry pointing to this object - * \param pfid parent fid the link to be found for - * - * \retval 0 success - * \retval -ENOENT link does not exist - * \retval -ve on error - */ -int linkea_links_find(struct linkea_data *ldata, const struct lu_name *lname, - const struct lu_fid *pfid) -{ - struct lu_name tmpname; - struct lu_fid tmpfid; - int count; - - LASSERT(ldata->ld_leh != NULL); - - /* link #0 */ - ldata->ld_lee = (struct link_ea_entry *)(ldata->ld_leh + 1); - - for (count = 0; count < ldata->ld_leh->leh_reccount; count++) { - linkea_entry_unpack(ldata->ld_lee, &ldata->ld_reclen, - &tmpname, &tmpfid); - if (tmpname.ln_namelen == lname->ln_namelen && - lu_fid_eq(&tmpfid, pfid) && - (strncmp(tmpname.ln_name, lname->ln_name, - tmpname.ln_namelen) == 0)) - break; - ldata->ld_lee = (struct link_ea_entry *)((char *)ldata->ld_lee + - ldata->ld_reclen); - } - - if (count == ldata->ld_leh->leh_reccount) { - CDEBUG(D_INODE, "Old link_ea name '%.*s' not found\n", - lname->ln_namelen, lname->ln_name); - ldata->ld_lee = NULL; - return -ENOENT; - } - return 0; -} -EXPORT_SYMBOL(linkea_links_find); diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c index 9ce3d36c685d..7eaaaa648dfb 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-module.c @@ -58,10 +58,10 @@ #include <linux/poll.h> #include <linux/list.h> #include <linux/highmem.h> -#include <asm/io.h> +#include <linux/io.h> #include <asm/ioctls.h> -#include <asm/poll.h> -#include <asm/uaccess.h> +#include <linux/poll.h> +#include <linux/uaccess.h> #include <linux/miscdevice.h> #include <linux/seq_file.h> @@ -84,7 +84,7 @@ int obd_ioctl_getdata(char **buf, int *len, void *arg) int offset = 0; err = copy_from_user(&hdr, (void *)arg, sizeof(hdr)); - if ( err ) + if (err) return err; if (hdr.ioc_version != OBD_IOCTL_VERSION) { @@ -118,7 +118,7 @@ int obd_ioctl_getdata(char **buf, int *len, void *arg) data = (struct obd_ioctl_data *)*buf; err = copy_from_user(*buf, (void *)arg, hdr.ioc_len); - if ( err ) { + if (err) { OBD_FREE_LARGE(*buf, hdr.ioc_len); return err; } diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c index bb15202f1aae..62ed706b136d 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c @@ -52,7 +52,7 @@ /*FIXME: Just copy from obdo_from_inode*/ void obdo_from_la(struct obdo *dst, struct lu_attr *la, __u64 valid) { - obd_flag newvalid = 0; + u32 newvalid = 0; if (valid & LA_ATIME) { dst->o_atime = la->la_atime; @@ -97,7 +97,7 @@ void obdo_from_la(struct obdo *dst, struct lu_attr *la, __u64 valid) EXPORT_SYMBOL(obdo_from_la); /*FIXME: Just copy from obdo_from_inode*/ -void la_from_obdo(struct lu_attr *dst, struct obdo *obdo, obd_flag valid) +void la_from_obdo(struct lu_attr *dst, struct obdo *obdo, u32 valid) { __u64 newvalid = 0; @@ -145,7 +145,7 @@ void la_from_obdo(struct lu_attr *dst, struct obdo *obdo, obd_flag valid) } EXPORT_SYMBOL(la_from_obdo); -void obdo_refresh_inode(struct inode *dst, struct obdo *src, obd_flag valid) +void obdo_refresh_inode(struct inode *dst, struct obdo *src, u32 valid) { valid &= src->o_valid; @@ -180,7 +180,7 @@ void obdo_refresh_inode(struct inode *dst, struct obdo *src, obd_flag valid) } EXPORT_SYMBOL(obdo_refresh_inode); -void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid) +void obdo_to_inode(struct inode *dst, struct obdo *src, u32 valid) { valid &= src->o_valid; diff --git a/drivers/staging/lustre/lustre/obdclass/llog.c b/drivers/staging/lustre/lustre/obdclass/llog.c index cce86890c563..3ab05292152c 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog.c +++ b/drivers/staging/lustre/lustre/obdclass/llog.c @@ -56,7 +56,7 @@ * Allocate a new log or catalog handle * Used inside llog_open(). */ -struct llog_handle *llog_alloc_handle(void) +static struct llog_handle *llog_alloc_handle(void) { struct llog_handle *loghandle; @@ -75,7 +75,7 @@ struct llog_handle *llog_alloc_handle(void) /* * Free llog handle and header data if exists. Used in llog_close() only */ -void llog_free_handle(struct llog_handle *loghandle) +static void llog_free_handle(struct llog_handle *loghandle) { LASSERT(loghandle != NULL); @@ -140,7 +140,7 @@ int llog_cancel_rec(const struct lu_env *env, struct llog_handle *loghandle, loghandle->lgh_ctxt->loc_obd->obd_name, POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, rc); - GOTO(out_err, rc); + goto out_err; } return 1; } @@ -153,7 +153,7 @@ int llog_cancel_rec(const struct lu_env *env, struct llog_handle *loghandle, loghandle->lgh_ctxt->loc_obd->obd_name, POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, rc); - GOTO(out_err, rc); + goto out_err; } return 0; out_err: @@ -224,7 +224,8 @@ int llog_init_handle(const struct lu_env *env, struct llog_handle *handle, llh->llh_flags & LLOG_F_IS_CAT ? "catalog" : "plain", flags & LLOG_F_IS_CAT ? "catalog" : "plain"); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } else if (llh->llh_flags & (LLOG_F_IS_PLAIN | LLOG_F_IS_CAT)) { /* @@ -235,7 +236,8 @@ int llog_init_handle(const struct lu_env *env, struct llog_handle *handle, } else { /* for some reason the llh_flags has no type set */ CERROR("llog type is not specified!\n"); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } if (unlikely(uuid && !obd_uuid_equals(uuid, &llh->llh_tgtuuid))) { @@ -243,7 +245,8 @@ int llog_init_handle(const struct lu_env *env, struct llog_handle *handle, handle->lgh_ctxt->loc_obd->obd_name, (char *)uuid->uuid, (char *)llh->llh_tgtuuid.uuid); - GOTO(out, rc = -EEXIST); + rc = -EEXIST; + goto out; } } if (flags & LLOG_F_IS_CAT) { @@ -316,7 +319,7 @@ repeat: rc = llog_next_block(lpi->lpi_env, loghandle, &saved_index, index, &cur_offset, buf, LLOG_CHUNK_SIZE); if (rc) - GOTO(out, rc); + goto out; /* NB: when rec->lrh_len is accessed it is already swabbed * since it is used at the "end" of the loop and the rec @@ -336,16 +339,18 @@ repeat: if (rec->lrh_index == 0) { /* probably another rec just got added? */ + rc = 0; if (index <= loghandle->lgh_last_idx) - GOTO(repeat, rc = 0); - GOTO(out, rc = 0); /* no more records */ + goto repeat; + goto out; /* no more records */ } if (rec->lrh_len == 0 || rec->lrh_len > LLOG_CHUNK_SIZE) { CWARN("invalid length %d in llog record for " "index %d/%d\n", rec->lrh_len, rec->lrh_index, index); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } if (rec->lrh_index < index) { @@ -369,7 +374,7 @@ repeat: lpi->lpi_cbdata); last_called_index = index; if (rc == LLOG_PROC_BREAK) { - GOTO(out, rc); + goto out; } else if (rc == LLOG_DEL_RECORD) { llog_cancel_rec(lpi->lpi_env, loghandle, @@ -377,15 +382,17 @@ repeat: rc = 0; } if (rc) - GOTO(out, rc); + goto out; } else { CDEBUG(D_OTHER, "Skipped index %d\n", index); } /* next record, still in buffer? */ ++index; - if (index > last_index) - GOTO(out, rc = 0); + if (index > last_index) { + rc = 0; + goto out; + } } } @@ -506,7 +513,7 @@ int llog_reverse_process(const struct lu_env *env, rc = llog_prev_block(env, loghandle, index, buf, LLOG_CHUNK_SIZE); if (rc) - GOTO(out, rc); + goto out; rec = buf; idx = rec->lrh_index; @@ -522,8 +529,11 @@ int llog_reverse_process(const struct lu_env *env, /* process records in buffer, starting where we found one */ while ((void *)tail > buf) { - if (tail->lrt_index == 0) - GOTO(out, rc = 0); /* no more records */ + if (tail->lrt_index == 0) { + /* no more records */ + rc = 0; + goto out; + } /* if set, process the callback on this record */ if (ext2_test_bit(index, llh->llh_bitmap)) { @@ -532,20 +542,22 @@ int llog_reverse_process(const struct lu_env *env, rc = cb(env, loghandle, rec, data); if (rc == LLOG_PROC_BREAK) { - GOTO(out, rc); + goto out; } else if (rc == LLOG_DEL_RECORD) { llog_cancel_rec(env, loghandle, tail->lrt_index); rc = 0; } if (rc) - GOTO(out, rc); + goto out; } /* previous record, still in buffer? */ --index; - if (index < first_index) - GOTO(out, rc = 0); + if (index < first_index) { + rc = 0; + goto out; + } tail = (void *)tail - tail->lrt_len; } } @@ -750,8 +762,10 @@ int llog_open_create(const struct lu_env *env, struct llog_ctxt *ctxt, d = lu2dt_dev((*res)->lgh_obj->do_lu.lo_dev); th = dt_trans_create(env, d); - if (IS_ERR(th)) - GOTO(out, rc = PTR_ERR(th)); + if (IS_ERR(th)) { + rc = PTR_ERR(th); + goto out; + } rc = llog_declare_create(env, *res, th); if (rc == 0) { @@ -820,11 +834,11 @@ int llog_write(const struct lu_env *env, struct llog_handle *loghandle, rc = llog_declare_write_rec(env, loghandle, rec, idx, th); if (rc) - GOTO(out_trans, rc); + goto out_trans; rc = dt_trans_start_local(env, dt, th); if (rc) - GOTO(out_trans, rc); + goto out_trans; down_write(&loghandle->lgh_lock); rc = llog_write_rec(env, loghandle, rec, reccookie, @@ -878,9 +892,11 @@ int llog_close(const struct lu_env *env, struct llog_handle *loghandle) rc = llog_handle2ops(loghandle, &lop); if (rc) - GOTO(out, rc); - if (lop->lop_close == NULL) - GOTO(out, rc = -EOPNOTSUPP); + goto out; + if (lop->lop_close == NULL) { + rc = -EOPNOTSUPP; + goto out; + } rc = lop->lop_close(env, loghandle); out: llog_handle_put(loghandle); @@ -898,12 +914,12 @@ int llog_is_empty(const struct lu_env *env, struct llog_ctxt *ctxt, if (rc < 0) { if (likely(rc == -ENOENT)) rc = 0; - GOTO(out, rc); + goto out; } rc = llog_init_handle(env, llh, LLOG_F_IS_PLAIN, NULL); if (rc) - GOTO(out_close, rc); + goto out_close; rc = llog_get_size(llh); out_close: @@ -948,19 +964,19 @@ int llog_backup(const struct lu_env *env, struct obd_device *obd, rc = llog_init_handle(env, llh, LLOG_F_IS_PLAIN, NULL); if (rc) - GOTO(out_close, rc); + goto out_close; /* Make sure there's no old backup log */ rc = llog_erase(env, bctxt, NULL, backup); if (rc < 0 && rc != -ENOENT) - GOTO(out_close, rc); + goto out_close; /* open backup log */ rc = llog_open_create(env, bctxt, &bllh, NULL, backup); if (rc) { CERROR("%s: failed to open backup logfile %s: rc = %d\n", obd->obd_name, backup, rc); - GOTO(out_close, rc); + goto out_close; } /* check that backup llog is not the same object as original one */ @@ -968,12 +984,13 @@ int llog_backup(const struct lu_env *env, struct obd_device *obd, CERROR("%s: backup llog %s to itself (%s), objects %p/%p\n", obd->obd_name, name, backup, llh->lgh_obj, bllh->lgh_obj); - GOTO(out_backup, rc = -EEXIST); + rc = -EEXIST; + goto out_backup; } rc = llog_init_handle(env, bllh, LLOG_F_IS_PLAIN, NULL); if (rc) - GOTO(out_backup, rc); + goto out_backup; /* Copy log record by record */ rc = llog_process_or_fork(env, llh, llog_copy_handler, (void *)bllh, diff --git a/drivers/staging/lustre/lustre/obdclass/llog_cat.c b/drivers/staging/lustre/lustre/obdclass/llog_cat.c index ca9927ccde68..6e139cf372c4 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_cat.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_cat.c @@ -96,7 +96,7 @@ static int llog_cat_new_log(const struct lu_env *env, LLOG_F_IS_PLAIN | LLOG_F_ZAP_WHEN_EMPTY, &cathandle->lgh_hdr->llh_tgtuuid); if (rc) - GOTO(out_destroy, rc); + goto out_destroy; if (index == 0) index = 1; @@ -114,7 +114,8 @@ static int llog_cat_new_log(const struct lu_env *env, cathandle->lgh_last_idx = index; llh->llh_tail.lrt_index = index; - CDEBUG(D_RPCTRACE,"new recovery log "DOSTID":%x for index %u of catalog" + CDEBUG(D_RPCTRACE, + "new recovery log "DOSTID":%x for index %u of catalog" DOSTID"\n", POSTID(&loghandle->lgh_id.lgl_oi), loghandle->lgh_id.lgl_ogen, index, POSTID(&cathandle->lgh_id.lgl_oi)); @@ -130,7 +131,7 @@ static int llog_cat_new_log(const struct lu_env *env, rc = llog_write_rec(env, cathandle, &rec.lid_hdr, &loghandle->u.phd.phd_cookie, 1, NULL, index, th); if (rc < 0) - GOTO(out_destroy, rc); + goto out_destroy; loghandle->lgh_hdr->llh_cat_idx = index; return 0; @@ -173,7 +174,8 @@ int llog_cat_id2handle(const struct lu_env *env, struct llog_handle *cathandle, } loghandle->u.phd.phd_cat_handle = cathandle; up_write(&cathandle->lgh_lock); - GOTO(out, rc = 0); + rc = 0; + goto out; } } up_write(&cathandle->lgh_lock); @@ -403,20 +405,20 @@ int llog_cat_declare_add_rec(const struct lu_env *env, up_write(&cathandle->lgh_lock); } if (rc) - GOTO(out, rc); + goto out; if (!llog_exist(cathandle->u.chd.chd_current_log)) { rc = llog_declare_create(env, cathandle->u.chd.chd_current_log, th); if (rc) - GOTO(out, rc); + goto out; llog_declare_write_rec(env, cathandle, NULL, -1, th); } /* declare records in the llogs */ rc = llog_declare_write_rec(env, cathandle->u.chd.chd_current_log, rec, -1, th); if (rc) - GOTO(out, rc); + goto out; next = cathandle->u.chd.chd_next_log; if (next) { @@ -454,11 +456,11 @@ int llog_cat_add(const struct lu_env *env, struct llog_handle *cathandle, rc = llog_cat_declare_add_rec(env, cathandle, rec, th); if (rc) - GOTO(out_trans, rc); + goto out_trans; rc = dt_trans_start_local(env, dt, th); if (rc) - GOTO(out_trans, rc); + goto out_trans; rc = llog_cat_add_rec(env, cathandle, rec, reccookie, buf, th); out_trans: dt_trans_stop(env, dt, th); diff --git a/drivers/staging/lustre/lustre/obdclass/llog_ioctl.c b/drivers/staging/lustre/lustre/obdclass/llog_ioctl.c deleted file mode 100644 index 9b7fa1d5e79a..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/llog_ioctl.c +++ /dev/null @@ -1,418 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2003, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - */ - -#define DEBUG_SUBSYSTEM S_LOG - -#include "../include/obd_class.h" -#include "../include/lustre_log.h" -#include "llog_internal.h" - -static int str2logid(struct llog_logid *logid, char *str, int len) -{ - char *start, *end, *endp; - __u64 id, seq; - - start = str; - if (*start != '#') - return -EINVAL; - - start++; - if (start - str >= len - 1) - return -EINVAL; - end = strchr(start, '#'); - if (end == NULL || end == start) - return -EINVAL; - - *end = '\0'; - id = simple_strtoull(start, &endp, 0); - if (endp != end) - return -EINVAL; - - start = ++end; - if (start - str >= len - 1) - return -EINVAL; - end = strchr(start, '#'); - if (end == NULL || end == start) - return -EINVAL; - - *end = '\0'; - seq = simple_strtoull(start, &endp, 0); - if (endp != end) - return -EINVAL; - - ostid_set_seq(&logid->lgl_oi, seq); - ostid_set_id(&logid->lgl_oi, id); - - start = ++end; - if (start - str >= len - 1) - return -EINVAL; - logid->lgl_ogen = simple_strtoul(start, &endp, 16); - if (*endp != '\0') - return -EINVAL; - - return 0; -} - -static int llog_check_cb(const struct lu_env *env, struct llog_handle *handle, - struct llog_rec_hdr *rec, void *data) -{ - struct obd_ioctl_data *ioc_data = (struct obd_ioctl_data *)data; - static int l, remains, from, to; - static char *out; - char *endp; - int cur_index, rc = 0; - - if (ioc_data && ioc_data->ioc_inllen1 > 0) { - l = 0; - remains = ioc_data->ioc_inllen4 + - cfs_size_round(ioc_data->ioc_inllen1) + - cfs_size_round(ioc_data->ioc_inllen2) + - cfs_size_round(ioc_data->ioc_inllen3); - from = simple_strtol(ioc_data->ioc_inlbuf2, &endp, 0); - if (*endp != '\0') - return -EINVAL; - to = simple_strtol(ioc_data->ioc_inlbuf3, &endp, 0); - if (*endp != '\0') - return -EINVAL; - ioc_data->ioc_inllen1 = 0; - out = ioc_data->ioc_bulk; - } - - cur_index = rec->lrh_index; - if (cur_index < from) - return 0; - if (to > 0 && cur_index > to) - return -LLOG_EEMPTY; - - if (handle->lgh_hdr->llh_flags & LLOG_F_IS_CAT) { - struct llog_logid_rec *lir = (struct llog_logid_rec *)rec; - struct llog_handle *loghandle; - - if (rec->lrh_type != LLOG_LOGID_MAGIC) { - l = snprintf(out, remains, "[index]: %05d [type]: " - "%02x [len]: %04d failed\n", - cur_index, rec->lrh_type, - rec->lrh_len); - } - if (handle->lgh_ctxt == NULL) - return -EOPNOTSUPP; - rc = llog_cat_id2handle(env, handle, &loghandle, &lir->lid_id); - if (rc) { - CDEBUG(D_IOCTL, "cannot find log #"DOSTID"#%08x\n", - POSTID(&lir->lid_id.lgl_oi), - lir->lid_id.lgl_ogen); - return rc; - } - rc = llog_process(env, loghandle, llog_check_cb, NULL, NULL); - llog_handle_put(loghandle); - } else { - bool ok; - - switch (rec->lrh_type) { - case OST_SZ_REC: - case MDS_UNLINK_REC: - case MDS_UNLINK64_REC: - case MDS_SETATTR64_REC: - case OBD_CFG_REC: - case LLOG_GEN_REC: - case LLOG_HDR_MAGIC: - ok = true; - break; - default: - ok = false; - } - - l = snprintf(out, remains, "[index]: %05d [type]: " - "%02x [len]: %04d %s\n", - cur_index, rec->lrh_type, rec->lrh_len, - ok ? "ok" : "failed"); - out += l; - remains -= l; - if (remains <= 0) { - CERROR("%s: no space to print log records\n", - handle->lgh_ctxt->loc_obd->obd_name); - return -LLOG_EEMPTY; - } - } - return rc; -} - -static int llog_print_cb(const struct lu_env *env, struct llog_handle *handle, - struct llog_rec_hdr *rec, void *data) -{ - struct obd_ioctl_data *ioc_data = (struct obd_ioctl_data *)data; - static int l, remains, from, to; - static char *out; - char *endp; - int cur_index; - - if (ioc_data != NULL && ioc_data->ioc_inllen1 > 0) { - l = 0; - remains = ioc_data->ioc_inllen4 + - cfs_size_round(ioc_data->ioc_inllen1) + - cfs_size_round(ioc_data->ioc_inllen2) + - cfs_size_round(ioc_data->ioc_inllen3); - from = simple_strtol(ioc_data->ioc_inlbuf2, &endp, 0); - if (*endp != '\0') - return -EINVAL; - to = simple_strtol(ioc_data->ioc_inlbuf3, &endp, 0); - if (*endp != '\0') - return -EINVAL; - out = ioc_data->ioc_bulk; - ioc_data->ioc_inllen1 = 0; - } - - cur_index = rec->lrh_index; - if (cur_index < from) - return 0; - if (to > 0 && cur_index > to) - return -LLOG_EEMPTY; - - if (handle->lgh_hdr->llh_flags & LLOG_F_IS_CAT) { - struct llog_logid_rec *lir = (struct llog_logid_rec *)rec; - - if (rec->lrh_type != LLOG_LOGID_MAGIC) { - CERROR("invalid record in catalog\n"); - return -EINVAL; - } - - l = snprintf(out, remains, - "[index]: %05d [logid]: #"DOSTID"#%08x\n", - cur_index, POSTID(&lir->lid_id.lgl_oi), - lir->lid_id.lgl_ogen); - } else if (rec->lrh_type == OBD_CFG_REC) { - int rc; - - rc = class_config_parse_rec(rec, out, remains); - if (rc < 0) - return rc; - l = rc; - } else { - l = snprintf(out, remains, - "[index]: %05d [type]: %02x [len]: %04d\n", - cur_index, rec->lrh_type, rec->lrh_len); - } - out += l; - remains -= l; - if (remains <= 0) { - CERROR("not enough space for print log records\n"); - return -LLOG_EEMPTY; - } - - return 0; -} -static int llog_remove_log(const struct lu_env *env, struct llog_handle *cat, - struct llog_logid *logid) -{ - struct llog_handle *log; - int rc; - - rc = llog_cat_id2handle(env, cat, &log, logid); - if (rc) { - CDEBUG(D_IOCTL, "cannot find log #"DOSTID"#%08x\n", - POSTID(&logid->lgl_oi), logid->lgl_ogen); - return -ENOENT; - } - - rc = llog_destroy(env, log); - if (rc) { - CDEBUG(D_IOCTL, "cannot destroy log\n"); - GOTO(out, rc); - } - llog_cat_cleanup(env, cat, log, log->u.phd.phd_cookie.lgc_index); -out: - llog_handle_put(log); - return rc; - -} - -static int llog_delete_cb(const struct lu_env *env, struct llog_handle *handle, - struct llog_rec_hdr *rec, void *data) -{ - struct llog_logid_rec *lir = (struct llog_logid_rec *)rec; - int rc; - - if (rec->lrh_type != LLOG_LOGID_MAGIC) - return -EINVAL; - rc = llog_remove_log(env, handle, &lir->lid_id); - - return rc; -} - - -int llog_ioctl(const struct lu_env *env, struct llog_ctxt *ctxt, int cmd, - struct obd_ioctl_data *data) -{ - struct llog_logid logid; - int rc = 0; - struct llog_handle *handle = NULL; - - if (*data->ioc_inlbuf1 == '#') { - rc = str2logid(&logid, data->ioc_inlbuf1, data->ioc_inllen1); - if (rc) - return rc; - rc = llog_open(env, ctxt, &handle, &logid, NULL, - LLOG_OPEN_EXISTS); - if (rc) - return rc; - } else if (*data->ioc_inlbuf1 == '$') { - char *name = data->ioc_inlbuf1 + 1; - - rc = llog_open(env, ctxt, &handle, NULL, name, - LLOG_OPEN_EXISTS); - if (rc) - return rc; - } else { - return -EINVAL; - } - - rc = llog_init_handle(env, handle, 0, NULL); - if (rc) - GOTO(out_close, rc = -ENOENT); - - switch (cmd) { - case OBD_IOC_LLOG_INFO: { - int l; - int remains = data->ioc_inllen2 + - cfs_size_round(data->ioc_inllen1); - char *out = data->ioc_bulk; - - l = snprintf(out, remains, - "logid: #"DOSTID"#%08x\n" - "flags: %x (%s)\n" - "records count: %d\n" - "last index: %d\n", - POSTID(&handle->lgh_id.lgl_oi), - handle->lgh_id.lgl_ogen, - handle->lgh_hdr->llh_flags, - handle->lgh_hdr->llh_flags & - LLOG_F_IS_CAT ? "cat" : "plain", - handle->lgh_hdr->llh_count, - handle->lgh_last_idx); - out += l; - remains -= l; - if (remains <= 0) { - CERROR("%s: not enough space for log header info\n", - ctxt->loc_obd->obd_name); - rc = -ENOSPC; - } - break; - } - case OBD_IOC_LLOG_CHECK: - LASSERT(data->ioc_inllen1 > 0); - rc = llog_process(env, handle, llog_check_cb, data, NULL); - if (rc == -LLOG_EEMPTY) - rc = 0; - else if (rc) - GOTO(out_close, rc); - break; - case OBD_IOC_LLOG_PRINT: - LASSERT(data->ioc_inllen1 > 0); - rc = llog_process(env, handle, llog_print_cb, data, NULL); - if (rc == -LLOG_EEMPTY) - rc = 0; - else if (rc) - GOTO(out_close, rc); - break; - case OBD_IOC_LLOG_CANCEL: { - struct llog_cookie cookie; - struct llog_logid plain; - char *endp; - - cookie.lgc_index = simple_strtoul(data->ioc_inlbuf3, &endp, 0); - if (*endp != '\0') - GOTO(out_close, rc = -EINVAL); - - if (handle->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN) { - rc = llog_cancel_rec(NULL, handle, cookie.lgc_index); - GOTO(out_close, rc); - } else if (!(handle->lgh_hdr->llh_flags & LLOG_F_IS_CAT)) { - GOTO(out_close, rc = -EINVAL); - } - - if (data->ioc_inlbuf2 == NULL) /* catalog but no logid */ - GOTO(out_close, rc = -ENOTTY); - - rc = str2logid(&plain, data->ioc_inlbuf2, data->ioc_inllen2); - if (rc) - GOTO(out_close, rc); - cookie.lgc_lgl = plain; - rc = llog_cat_cancel_records(env, handle, 1, &cookie); - if (rc) - GOTO(out_close, rc); - break; - } - case OBD_IOC_LLOG_REMOVE: { - struct llog_logid plain; - - if (handle->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN) { - rc = llog_destroy(env, handle); - GOTO(out_close, rc); - } else if (!(handle->lgh_hdr->llh_flags & LLOG_F_IS_CAT)) { - GOTO(out_close, rc = -EINVAL); - } - - if (data->ioc_inllen2 > 0) { - /* remove indicate log from the catalog */ - rc = str2logid(&plain, data->ioc_inlbuf2, - data->ioc_inllen2); - if (rc) - GOTO(out_close, rc); - rc = llog_remove_log(env, handle, &plain); - } else { - /* remove all the log of the catalog */ - rc = llog_process(env, handle, llog_delete_cb, NULL, - NULL); - if (rc) - GOTO(out_close, rc); - } - break; - } - default: - CERROR("%s: Unknown ioctl cmd %#x\n", - ctxt->loc_obd->obd_name, cmd); - GOTO(out_close, rc = -ENOTTY); - } - -out_close: - if (handle->lgh_hdr && - handle->lgh_hdr->llh_flags & LLOG_F_IS_CAT) - llog_cat_close(env, handle); - else - llog_close(env, handle); - return rc; -} -EXPORT_SYMBOL(llog_ioctl); diff --git a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c b/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c deleted file mode 100644 index fd48d59cf315..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/llog_lvfs.c +++ /dev/null @@ -1,847 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2003, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/obdclass/llog_lvfs.c - * - * OST<->MDS recovery logging infrastructure. - * Invariants in implementation: - * - we do not share logs among different OST<->MDS connections, so that - * if an OST or MDS fails it need only look at log(s) relevant to itself - * - * Author: Andreas Dilger <adilger@clusterfs.com> - */ - -#define DEBUG_SUBSYSTEM S_LOG - - -#include "../include/obd.h" -#include "../include/obd_class.h" -#include "../include/lustre_log.h" -#include "../include/obd_ost.h" -#include <linux/list.h> -#include "../include/lvfs.h" -#include "../include/lustre_fsfilt.h" -#include "../include/lustre_disk.h" -#include "llog_internal.h" - -#if defined(LLOG_LVFS) - -static int llog_lvfs_pad(struct obd_device *obd, struct file *file, int len, - int index) -{ - struct llog_rec_hdr rec = { 0 }; - struct llog_rec_tail tail; - int rc; - - LASSERT(len >= LLOG_MIN_REC_SIZE && (len & 0x7) == 0); - - tail.lrt_len = rec.lrh_len = len; - tail.lrt_index = rec.lrh_index = index; - rec.lrh_type = LLOG_PAD_MAGIC; - - rc = fsfilt_write_record(obd, file, &rec, sizeof(rec), &file->f_pos, 0); - if (rc) { - CERROR("error writing padding record: rc %d\n", rc); - goto out; - } - - file->f_pos += len - sizeof(rec) - sizeof(tail); - rc = fsfilt_write_record(obd, file, &tail, sizeof(tail),&file->f_pos,0); - if (rc) { - CERROR("error writing padding record: rc %d\n", rc); - goto out; - } - - out: - return rc; -} - -static int llog_lvfs_write_blob(struct obd_device *obd, struct file *file, - struct llog_rec_hdr *rec, void *buf, loff_t off) -{ - int rc; - struct llog_rec_tail end; - loff_t saved_off = file->f_pos; - int buflen = rec->lrh_len; - - file->f_pos = off; - - if (buflen == 0) - CWARN("0-length record\n"); - - if (!buf) { - rc = fsfilt_write_record(obd, file, rec, buflen,&file->f_pos,0); - if (rc) { - CERROR("error writing log record: rc %d\n", rc); - goto out; - } - GOTO(out, rc = 0); - } - - /* the buf case */ - rec->lrh_len = sizeof(*rec) + buflen + sizeof(end); - rc = fsfilt_write_record(obd, file, rec, sizeof(*rec), &file->f_pos, 0); - if (rc) { - CERROR("error writing log hdr: rc %d\n", rc); - goto out; - } - - rc = fsfilt_write_record(obd, file, buf, buflen, &file->f_pos, 0); - if (rc) { - CERROR("error writing log buffer: rc %d\n", rc); - goto out; - } - - end.lrt_len = rec->lrh_len; - end.lrt_index = rec->lrh_index; - rc = fsfilt_write_record(obd, file, &end, sizeof(end), &file->f_pos, 0); - if (rc) { - CERROR("error writing log tail: rc %d\n", rc); - goto out; - } - - rc = 0; - out: - if (saved_off > file->f_pos) - file->f_pos = saved_off; - LASSERT(rc <= 0); - return rc; -} - -static int llog_lvfs_read_blob(struct obd_device *obd, struct file *file, - void *buf, int size, loff_t off) -{ - loff_t offset = off; - int rc; - - rc = fsfilt_read_record(obd, file, buf, size, &offset); - if (rc) { - CERROR("error reading log record: rc %d\n", rc); - return rc; - } - return 0; -} - -static int llog_lvfs_read_header(const struct lu_env *env, - struct llog_handle *handle) -{ - struct obd_device *obd; - int rc; - - LASSERT(sizeof(*handle->lgh_hdr) == LLOG_CHUNK_SIZE); - - obd = handle->lgh_ctxt->loc_exp->exp_obd; - - if (i_size_read(handle->lgh_file->f_dentry->d_inode) == 0) { - CDEBUG(D_HA, "not reading header from 0-byte log\n"); - return LLOG_EEMPTY; - } - - rc = llog_lvfs_read_blob(obd, handle->lgh_file, handle->lgh_hdr, - LLOG_CHUNK_SIZE, 0); - if (rc) { - CERROR("error reading log header from %.*s\n", - handle->lgh_file->f_dentry->d_name.len, - handle->lgh_file->f_dentry->d_name.name); - } else { - struct llog_rec_hdr *llh_hdr = &handle->lgh_hdr->llh_hdr; - - if (LLOG_REC_HDR_NEEDS_SWABBING(llh_hdr)) - lustre_swab_llog_hdr(handle->lgh_hdr); - - if (llh_hdr->lrh_type != LLOG_HDR_MAGIC) { - CERROR("bad log %.*s header magic: %#x (expected %#x)\n", - handle->lgh_file->f_dentry->d_name.len, - handle->lgh_file->f_dentry->d_name.name, - llh_hdr->lrh_type, LLOG_HDR_MAGIC); - rc = -EIO; - } else if (llh_hdr->lrh_len != LLOG_CHUNK_SIZE) { - CERROR("incorrectly sized log %.*s header: %#x " - "(expected %#x)\n", - handle->lgh_file->f_dentry->d_name.len, - handle->lgh_file->f_dentry->d_name.name, - llh_hdr->lrh_len, LLOG_CHUNK_SIZE); - CERROR("you may need to re-run lconf --write_conf.\n"); - rc = -EIO; - } - } - - handle->lgh_last_idx = handle->lgh_hdr->llh_tail.lrt_index; - handle->lgh_file->f_pos = i_size_read(handle->lgh_file->f_dentry->d_inode); - - return rc; -} - -/* returns negative in on error; 0 if success && reccookie == 0; 1 otherwise */ -/* appends if idx == -1, otherwise overwrites record idx. */ -static int llog_lvfs_write_rec(const struct lu_env *env, - struct llog_handle *loghandle, - struct llog_rec_hdr *rec, - struct llog_cookie *reccookie, int cookiecount, - void *buf, int idx, struct thandle *th) -{ - struct llog_log_hdr *llh; - int reclen = rec->lrh_len, index, rc; - struct llog_rec_tail *lrt; - struct obd_device *obd; - struct file *file; - size_t left; - - llh = loghandle->lgh_hdr; - file = loghandle->lgh_file; - obd = loghandle->lgh_ctxt->loc_exp->exp_obd; - - /* record length should not bigger than LLOG_CHUNK_SIZE */ - if (buf) - rc = (reclen > LLOG_CHUNK_SIZE - sizeof(struct llog_rec_hdr) - - sizeof(struct llog_rec_tail)) ? -E2BIG : 0; - else - rc = (reclen > LLOG_CHUNK_SIZE) ? -E2BIG : 0; - if (rc) - return rc; - - if (buf) - /* write_blob adds header and tail to lrh_len. */ - reclen = sizeof(*rec) + rec->lrh_len + - sizeof(struct llog_rec_tail); - - if (idx != -1) { - loff_t saved_offset; - - /* no header: only allowed to insert record 1 */ - if (idx != 1 && !i_size_read(file->f_dentry->d_inode)) { - CERROR("idx != -1 in empty log\n"); - LBUG(); - } - - if (idx && llh->llh_size && llh->llh_size != rec->lrh_len) - return -EINVAL; - - if (!ext2_test_bit(idx, llh->llh_bitmap)) - CERROR("Modify unset record %u\n", idx); - if (idx != rec->lrh_index) - CERROR("Index mismatch %d %u\n", idx, rec->lrh_index); - - rc = llog_lvfs_write_blob(obd, file, &llh->llh_hdr, NULL, 0); - /* we are done if we only write the header or on error */ - if (rc || idx == 0) - return rc; - - if (buf) { - /* We assume that caller has set lgh_cur_* */ - saved_offset = loghandle->lgh_cur_offset; - CDEBUG(D_OTHER, - "modify record "DOSTID": idx:%d/%u/%d, len:%u " - "offset %llu\n", - POSTID(&loghandle->lgh_id.lgl_oi), idx, rec->lrh_index, - loghandle->lgh_cur_idx, rec->lrh_len, - (long long)(saved_offset - sizeof(*llh))); - if (rec->lrh_index != loghandle->lgh_cur_idx) { - CERROR("modify idx mismatch %u/%d\n", - idx, loghandle->lgh_cur_idx); - return -EFAULT; - } - } else { - /* Assumes constant lrh_len */ - saved_offset = sizeof(*llh) + (idx - 1) * reclen; - } - - rc = llog_lvfs_write_blob(obd, file, rec, buf, saved_offset); - if (rc == 0 && reccookie) { - reccookie->lgc_lgl = loghandle->lgh_id; - reccookie->lgc_index = idx; - rc = 1; - } - return rc; - } - - /* Make sure that records don't cross a chunk boundary, so we can - * process them page-at-a-time if needed. If it will cross a chunk - * boundary, write in a fake (but referenced) entry to pad the chunk. - * - * We know that llog_current_log() will return a loghandle that is - * big enough to hold reclen, so all we care about is padding here. - */ - left = LLOG_CHUNK_SIZE - (file->f_pos & (LLOG_CHUNK_SIZE - 1)); - - /* NOTE: padding is a record, but no bit is set */ - if (left != 0 && left != reclen && - left < (reclen + LLOG_MIN_REC_SIZE)) { - index = loghandle->lgh_last_idx + 1; - rc = llog_lvfs_pad(obd, file, left, index); - if (rc) - return rc; - loghandle->lgh_last_idx++; /*for pad rec*/ - } - /* if it's the last idx in log file, then return -ENOSPC */ - if (loghandle->lgh_last_idx >= LLOG_BITMAP_SIZE(llh) - 1) - return -ENOSPC; - loghandle->lgh_last_idx++; - index = loghandle->lgh_last_idx; - LASSERT(index < LLOG_BITMAP_SIZE(llh)); - rec->lrh_index = index; - if (buf == NULL) { - lrt = (struct llog_rec_tail *) - ((char *)rec + rec->lrh_len - sizeof(*lrt)); - lrt->lrt_len = rec->lrh_len; - lrt->lrt_index = rec->lrh_index; - } - /*The caller should make sure only 1 process access the lgh_last_idx, - *Otherwise it might hit the assert.*/ - LASSERT(index < LLOG_BITMAP_SIZE(llh)); - spin_lock(&loghandle->lgh_hdr_lock); - if (ext2_set_bit(index, llh->llh_bitmap)) { - CERROR("argh, index %u already set in log bitmap?\n", index); - spin_unlock(&loghandle->lgh_hdr_lock); - LBUG(); /* should never happen */ - } - llh->llh_count++; - spin_unlock(&loghandle->lgh_hdr_lock); - llh->llh_tail.lrt_index = index; - - rc = llog_lvfs_write_blob(obd, file, &llh->llh_hdr, NULL, 0); - if (rc) - return rc; - - rc = llog_lvfs_write_blob(obd, file, rec, buf, file->f_pos); - if (rc) - return rc; - - CDEBUG(D_RPCTRACE, "added record "DOSTID": idx: %u, %u \n", - POSTID(&loghandle->lgh_id.lgl_oi), index, rec->lrh_len); - if (rc == 0 && reccookie) { - reccookie->lgc_lgl = loghandle->lgh_id; - reccookie->lgc_index = index; - if ((rec->lrh_type == MDS_UNLINK_REC) || - (rec->lrh_type == MDS_SETATTR64_REC)) - reccookie->lgc_subsys = LLOG_MDS_OST_ORIG_CTXT; - else if (rec->lrh_type == OST_SZ_REC) - reccookie->lgc_subsys = LLOG_SIZE_ORIG_CTXT; - else - reccookie->lgc_subsys = -1; - rc = 1; - } - if (rc == 0 && rec->lrh_type == LLOG_GEN_REC) - rc = 1; - - return rc; -} - -/* We can skip reading at least as many log blocks as the number of -* minimum sized log records we are skipping. If it turns out -* that we are not far enough along the log (because the -* actual records are larger than minimum size) we just skip -* some more records. */ - -static void llog_skip_over(__u64 *off, int curr, int goal) -{ - if (goal <= curr) - return; - *off = (*off + (goal-curr-1) * LLOG_MIN_REC_SIZE) & - ~(LLOG_CHUNK_SIZE - 1); -} - - -/* sets: - * - cur_offset to the furthest point read in the log file - * - cur_idx to the log index preceding cur_offset - * returns -EIO/-EINVAL on error - */ -static int llog_lvfs_next_block(const struct lu_env *env, - struct llog_handle *loghandle, int *cur_idx, - int next_idx, __u64 *cur_offset, void *buf, - int len) -{ - int rc; - - if (len == 0 || len & (LLOG_CHUNK_SIZE - 1)) - return -EINVAL; - - CDEBUG(D_OTHER, "looking for log index %u (cur idx %u off %llu)\n", - next_idx, *cur_idx, *cur_offset); - - while (*cur_offset < i_size_read(loghandle->lgh_file->f_dentry->d_inode)) { - struct llog_rec_hdr *rec, *last_rec; - struct llog_rec_tail *tail; - loff_t ppos; - int llen; - - llog_skip_over(cur_offset, *cur_idx, next_idx); - - /* read up to next LLOG_CHUNK_SIZE block */ - ppos = *cur_offset; - llen = LLOG_CHUNK_SIZE - (*cur_offset & (LLOG_CHUNK_SIZE - 1)); - rc = fsfilt_read_record(loghandle->lgh_ctxt->loc_exp->exp_obd, - loghandle->lgh_file, buf, llen, - cur_offset); - if (rc < 0) { - CERROR("Cant read llog block at log id "DOSTID - "/%u offset %llu\n", - POSTID(&loghandle->lgh_id.lgl_oi), - loghandle->lgh_id.lgl_ogen, - *cur_offset); - return rc; - } - - /* put number of bytes read into rc to make code simpler */ - rc = *cur_offset - ppos; - if (rc < len) { - /* signal the end of the valid buffer to llog_process */ - memset(buf + rc, 0, len - rc); - } - - if (rc == 0) /* end of file, nothing to do */ - return 0; - - if (rc < sizeof(*tail)) { - CERROR("Invalid llog block at log id "DOSTID"/%u offset%llu\n", - POSTID(&loghandle->lgh_id.lgl_oi), - loghandle->lgh_id.lgl_ogen, *cur_offset); - return -EINVAL; - } - - rec = buf; - if (LLOG_REC_HDR_NEEDS_SWABBING(rec)) - lustre_swab_llog_rec(rec); - - tail = (struct llog_rec_tail *)(buf + rc - - sizeof(struct llog_rec_tail)); - - /* get the last record in block */ - last_rec = (struct llog_rec_hdr *)(buf + rc - - le32_to_cpu(tail->lrt_len)); - - if (LLOG_REC_HDR_NEEDS_SWABBING(last_rec)) - lustre_swab_llog_rec(last_rec); - LASSERT(last_rec->lrh_index == tail->lrt_index); - - *cur_idx = tail->lrt_index; - - /* this shouldn't happen */ - if (tail->lrt_index == 0) { - CERROR("Invalid llog tail at log id "DOSTID"/%u offset %llu\n", - POSTID(&loghandle->lgh_id.lgl_oi), - loghandle->lgh_id.lgl_ogen, *cur_offset); - return -EINVAL; - } - if (tail->lrt_index < next_idx) - continue; - - /* sanity check that the start of the new buffer is no farther - * than the record that we wanted. This shouldn't happen. */ - if (rec->lrh_index > next_idx) { - CERROR("missed desired record? %u > %u\n", - rec->lrh_index, next_idx); - return -ENOENT; - } - return 0; - } - return -EIO; -} - -static int llog_lvfs_prev_block(const struct lu_env *env, - struct llog_handle *loghandle, - int prev_idx, void *buf, int len) -{ - __u64 cur_offset; - int rc; - - if (len == 0 || len & (LLOG_CHUNK_SIZE - 1)) - return -EINVAL; - - CDEBUG(D_OTHER, "looking for log index %u\n", prev_idx); - - cur_offset = LLOG_CHUNK_SIZE; - llog_skip_over(&cur_offset, 0, prev_idx); - - while (cur_offset < i_size_read(loghandle->lgh_file->f_dentry->d_inode)) { - struct llog_rec_hdr *rec, *last_rec; - struct llog_rec_tail *tail; - loff_t ppos = cur_offset; - - rc = fsfilt_read_record(loghandle->lgh_ctxt->loc_exp->exp_obd, - loghandle->lgh_file, buf, len, - &cur_offset); - if (rc < 0) { - CERROR("Cant read llog block at log id "DOSTID - "/%u offset %llu\n", - POSTID(&loghandle->lgh_id.lgl_oi), - loghandle->lgh_id.lgl_ogen, - cur_offset); - return rc; - } - - /* put number of bytes read into rc to make code simpler */ - rc = cur_offset - ppos; - - if (rc == 0) /* end of file, nothing to do */ - return 0; - - if (rc < sizeof(*tail)) { - CERROR("Invalid llog block at log id "DOSTID"/%u offset%llu\n", - POSTID(&loghandle->lgh_id.lgl_oi), - loghandle->lgh_id.lgl_ogen, cur_offset); - return -EINVAL; - } - - rec = buf; - if (LLOG_REC_HDR_NEEDS_SWABBING(rec)) - lustre_swab_llog_rec(rec); - - tail = (struct llog_rec_tail *)(buf + rc - - sizeof(struct llog_rec_tail)); - - /* get the last record in block */ - last_rec = (struct llog_rec_hdr *)(buf + rc - - le32_to_cpu(tail->lrt_len)); - - if (LLOG_REC_HDR_NEEDS_SWABBING(last_rec)) - lustre_swab_llog_rec(last_rec); - LASSERT(last_rec->lrh_index == tail->lrt_index); - - /* this shouldn't happen */ - if (tail->lrt_index == 0) { - CERROR("Invalid llog tail at log id "DOSTID"/%u offset%llu\n", - POSTID(&loghandle->lgh_id.lgl_oi), - loghandle->lgh_id.lgl_ogen, cur_offset); - return -EINVAL; - } - if (tail->lrt_index < prev_idx) - continue; - - /* sanity check that the start of the new buffer is no farther - * than the record that we wanted. This shouldn't happen. */ - if (rec->lrh_index > prev_idx) { - CERROR("missed desired record? %u > %u\n", - rec->lrh_index, prev_idx); - return -ENOENT; - } - return 0; - } - return -EIO; -} - -static struct file *llog_filp_open(char *dir, char *name, int flags, int mode) -{ - char *logname; - struct file *filp; - int len; - - OBD_ALLOC(logname, PATH_MAX); - if (logname == NULL) - return ERR_PTR(-ENOMEM); - - len = snprintf(logname, PATH_MAX, "%s/%s", dir, name); - if (len >= PATH_MAX - 1) { - filp = ERR_PTR(-ENAMETOOLONG); - } else { - filp = filp_open(logname, flags, mode); - if (IS_ERR(filp) && PTR_ERR(filp) != -ENOENT) - CERROR("logfile creation %s: %ld\n", logname, - PTR_ERR(filp)); - } - OBD_FREE(logname, PATH_MAX); - return filp; -} - -static int llog_lvfs_open(const struct lu_env *env, struct llog_handle *handle, - struct llog_logid *logid, char *name, - enum llog_open_param open_param) -{ - struct llog_ctxt *ctxt = handle->lgh_ctxt; - struct dentry *dchild = NULL; - struct obd_device *obd; - int rc = 0; - - LASSERT(ctxt); - LASSERT(ctxt->loc_exp); - LASSERT(ctxt->loc_exp->exp_obd); - obd = ctxt->loc_exp->exp_obd; - - LASSERT(handle); - if (logid != NULL) { - dchild = obd_lvfs_fid2dentry(ctxt->loc_exp, &logid->lgl_oi, - logid->lgl_ogen); - if (IS_ERR(dchild)) { - rc = PTR_ERR(dchild); - CERROR("%s: error looking up logfile #"DOSTID "#%08x:" - " rc = %d\n", ctxt->loc_obd->obd_name, - POSTID(&logid->lgl_oi), logid->lgl_ogen, rc); - GOTO(out, rc); - } - if (dchild->d_inode == NULL) { - l_dput(dchild); - rc = -ENOENT; - CERROR("%s: nonexistent llog #"DOSTID"#%08x:" - "rc = %d\n", ctxt->loc_obd->obd_name, - POSTID(&logid->lgl_oi), logid->lgl_ogen, rc); - GOTO(out, rc); - } - handle->lgh_file = l_dentry_open(&obd->obd_lvfs_ctxt, dchild, - O_RDWR | O_LARGEFILE); - l_dput(dchild); - if (IS_ERR(handle->lgh_file)) { - rc = PTR_ERR(handle->lgh_file); - handle->lgh_file = NULL; - CERROR("%s: error opening llog #"DOSTID"#%08x:" - "rc = %d\n", ctxt->loc_obd->obd_name, - POSTID(&logid->lgl_oi), logid->lgl_ogen, rc); - GOTO(out, rc); - } - handle->lgh_id = *logid; - } else if (name) { - handle->lgh_file = llog_filp_open(MOUNT_CONFIGS_DIR, name, - O_RDWR | O_LARGEFILE, 0644); - if (IS_ERR(handle->lgh_file)) { - rc = PTR_ERR(handle->lgh_file); - handle->lgh_file = NULL; - if (rc == -ENOENT && open_param == LLOG_OPEN_NEW) { - OBD_ALLOC(handle->lgh_name, strlen(name) + 1); - if (handle->lgh_name) - strcpy(handle->lgh_name, name); - else - GOTO(out, rc = -ENOMEM); - rc = 0; - } else { - GOTO(out, rc); - } - } else { - lustre_build_llog_lvfs_oid(&handle->lgh_id, - handle->lgh_file->f_dentry->d_inode->i_ino, - handle->lgh_file->f_dentry->d_inode->i_generation); - } - } else { - LASSERTF(open_param == LLOG_OPEN_NEW, "%#x\n", open_param); - handle->lgh_file = NULL; - } - - /* No new llog is expected but doesn't exist */ - if (open_param != LLOG_OPEN_NEW && handle->lgh_file == NULL) - GOTO(out_name, rc = -ENOENT); - - return 0; -out_name: - if (handle->lgh_name != NULL) - OBD_FREE(handle->lgh_name, strlen(name) + 1); -out: - return rc; -} - -static int llog_lvfs_exist(struct llog_handle *handle) -{ - return (handle->lgh_file != NULL); -} - -/* This is a callback from the llog_* functions. - * Assumes caller has already pushed us into the kernel context. */ -static int llog_lvfs_create(const struct lu_env *env, - struct llog_handle *handle, - struct thandle *th) -{ - struct llog_ctxt *ctxt = handle->lgh_ctxt; - struct obd_device *obd; - struct dentry *dchild = NULL; - struct file *file; - struct obdo *oa = NULL; - int rc = 0; - int open_flags = O_RDWR | O_CREAT | O_LARGEFILE; - - LASSERT(ctxt); - LASSERT(ctxt->loc_exp); - obd = ctxt->loc_exp->exp_obd; - LASSERT(handle->lgh_file == NULL); - - if (handle->lgh_name) { - file = llog_filp_open(MOUNT_CONFIGS_DIR, handle->lgh_name, - open_flags, 0644); - if (IS_ERR(file)) - return PTR_ERR(file); - - lustre_build_llog_lvfs_oid(&handle->lgh_id, - file->f_dentry->d_inode->i_ino, - file->f_dentry->d_inode->i_generation); - handle->lgh_file = file; - } else { - OBDO_ALLOC(oa); - if (oa == NULL) - return -ENOMEM; - - ostid_set_seq_llog(&oa->o_oi); - oa->o_valid = OBD_MD_FLGENER | OBD_MD_FLGROUP; - - rc = obd_create(NULL, ctxt->loc_exp, oa, NULL, NULL); - if (rc) - GOTO(out, rc); - - /* FIXME: rationalize the misuse of o_generation in - * this API along with mds_obd_{create,destroy}. - * Hopefully it is only an internal API issue. */ -#define o_generation o_parent_oid - dchild = obd_lvfs_fid2dentry(ctxt->loc_exp, &oa->o_oi, - oa->o_generation); - if (IS_ERR(dchild)) - GOTO(out, rc = PTR_ERR(dchild)); - - file = l_dentry_open(&obd->obd_lvfs_ctxt, dchild, open_flags); - l_dput(dchild); - if (IS_ERR(file)) - GOTO(out, rc = PTR_ERR(file)); - handle->lgh_id.lgl_oi = oa->o_oi; - handle->lgh_id.lgl_ogen = oa->o_generation; - handle->lgh_file = file; -out: - OBDO_FREE(oa); - } - return rc; -} - -static int llog_lvfs_close(const struct lu_env *env, - struct llog_handle *handle) -{ - int rc; - - if (handle->lgh_file == NULL) - return 0; - rc = filp_close(handle->lgh_file, 0); - if (rc) - CERROR("%s: error closing llog #"DOSTID"#%08x: " - "rc = %d\n", handle->lgh_ctxt->loc_obd->obd_name, - POSTID(&handle->lgh_id.lgl_oi), - handle->lgh_id.lgl_ogen, rc); - handle->lgh_file = NULL; - if (handle->lgh_name) { - OBD_FREE(handle->lgh_name, strlen(handle->lgh_name) + 1); - handle->lgh_name = NULL; - } - return rc; -} - -static int llog_lvfs_destroy(const struct lu_env *env, - struct llog_handle *handle) -{ - struct dentry *fdentry; - struct obdo *oa; - struct obd_device *obd = handle->lgh_ctxt->loc_exp->exp_obd; - char *dir; - void *th; - struct inode *inode; - int rc, rc1; - - dir = MOUNT_CONFIGS_DIR; - - LASSERT(handle->lgh_file); - fdentry = handle->lgh_file->f_dentry; - inode = fdentry->d_parent->d_inode; - if (strcmp(fdentry->d_parent->d_name.name, dir) == 0) { - struct lvfs_run_ctxt saved; - struct vfsmount *mnt = mntget(handle->lgh_file->f_vfsmnt); - - push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - dget(fdentry); - rc = llog_lvfs_close(env, handle); - if (rc == 0) { - mutex_lock_nested(&inode->i_mutex, I_MUTEX_PARENT); - rc = ll_vfs_unlink(inode, fdentry, mnt); - mutex_unlock(&inode->i_mutex); - } - mntput(mnt); - - dput(fdentry); - pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - return rc; - } - - OBDO_ALLOC(oa); - if (oa == NULL) - return -ENOMEM; - - oa->o_oi = handle->lgh_id.lgl_oi; - oa->o_generation = handle->lgh_id.lgl_ogen; -#undef o_generation - oa->o_valid = OBD_MD_FLID | OBD_MD_FLGROUP | OBD_MD_FLGENER; - - rc = llog_lvfs_close(env, handle); - if (rc) - GOTO(out, rc); - - th = fsfilt_start_log(obd, inode, FSFILT_OP_UNLINK, NULL, 1); - if (IS_ERR(th)) { - CERROR("fsfilt_start failed: %ld\n", PTR_ERR(th)); - GOTO(out, rc = PTR_ERR(th)); - } - - rc = obd_destroy(NULL, handle->lgh_ctxt->loc_exp, oa, - NULL, NULL, NULL, NULL); - - rc1 = fsfilt_commit(obd, inode, th, 0); - if (rc == 0 && rc1 != 0) - rc = rc1; - out: - OBDO_FREE(oa); - return rc; -} - -static int llog_lvfs_declare_create(const struct lu_env *env, - struct llog_handle *res, - struct thandle *th) -{ - return 0; -} - -static int llog_lvfs_declare_write_rec(const struct lu_env *env, - struct llog_handle *loghandle, - struct llog_rec_hdr *rec, - int idx, struct thandle *th) -{ - return 0; -} - -struct llog_operations llog_lvfs_ops = { - .lop_write_rec = llog_lvfs_write_rec, - .lop_next_block = llog_lvfs_next_block, - .lop_prev_block = llog_lvfs_prev_block, - .lop_read_header = llog_lvfs_read_header, - .lop_create = llog_lvfs_create, - .lop_destroy = llog_lvfs_destroy, - .lop_close = llog_lvfs_close, - .lop_open = llog_lvfs_open, - .lop_exist = llog_lvfs_exist, - .lop_declare_create = llog_lvfs_declare_create, - .lop_declare_write_rec = llog_lvfs_declare_write_rec, -}; -EXPORT_SYMBOL(llog_lvfs_ops); -#else /* !__KERNEL__ */ -struct llog_operations llog_lvfs_ops = {}; -#endif diff --git a/drivers/staging/lustre/lustre/obdclass/llog_obd.c b/drivers/staging/lustre/lustre/obdclass/llog_obd.c index 8ff01d3f90b4..da769db0af77 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_obd.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_obd.c @@ -242,31 +242,6 @@ int llog_cancel(const struct lu_env *env, struct llog_ctxt *ctxt, } EXPORT_SYMBOL(llog_cancel); -int obd_llog_init(struct obd_device *obd, struct obd_llog_group *olg, - struct obd_device *disk_obd, int *index) -{ - int rc; - - OBD_CHECK_DT_OP(obd, llog_init, 0); - OBD_COUNTER_INCREMENT(obd, llog_init); - - rc = OBP(obd, llog_init)(obd, olg, disk_obd, index); - return rc; -} -EXPORT_SYMBOL(obd_llog_init); - -int obd_llog_finish(struct obd_device *obd, int count) -{ - int rc; - - OBD_CHECK_DT_OP(obd, llog_finish, 0); - OBD_COUNTER_INCREMENT(obd, llog_finish); - - rc = OBP(obd, llog_finish)(obd, count); - return rc; -} -EXPORT_SYMBOL(obd_llog_finish); - /* context key constructor/destructor: llog_key_init, llog_key_fini */ LU_KEY_INIT_FINI(llog, struct llog_thread_info); /* context key: llog_thread_key */ diff --git a/drivers/staging/lustre/lustre/obdclass/llog_osd.c b/drivers/staging/lustre/lustre/obdclass/llog_osd.c deleted file mode 100644 index 2c6a51e90697..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/llog_osd.c +++ /dev/null @@ -1,1290 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2009, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/obdclass/llog_osd.c - low level llog routines on top of OSD API - * - * Author: Alexey Zhuravlev <alexey.zhuravlev@intel.com> - * Author: Mikhail Pershin <mike.pershin@intel.com> - */ - -#define DEBUG_SUBSYSTEM S_LOG - -#include "../include/obd.h" -#include "../include/obd_class.h" -#include "../include/lustre_fid.h" -#include "../include/dt_object.h" - -#include "llog_internal.h" -#include "local_storage.h" - -/* - * - multi-chunks or big-declaration approach - * - use unique sequence instead of llog sb tracking unique ids - * - re-use existing environment - * - named llog support (can be used for testing only at the present) - * - llog_origin_connect() work with OSD API - */ - -static int llog_osd_declare_new_object(const struct lu_env *env, - struct local_oid_storage *los, - struct dt_object *o, - struct thandle *th) -{ - struct llog_thread_info *lgi = llog_info(env); - - lgi->lgi_attr.la_valid = LA_MODE; - lgi->lgi_attr.la_mode = S_IFREG | S_IRUGO | S_IWUSR; - lgi->lgi_dof.dof_type = dt_mode_to_dft(S_IFREG); - - return local_object_declare_create(env, los, o, &lgi->lgi_attr, - &lgi->lgi_dof, th); -} - -static int llog_osd_create_new_object(const struct lu_env *env, - struct local_oid_storage *los, - struct dt_object *o, - struct thandle *th) -{ - struct llog_thread_info *lgi = llog_info(env); - - lgi->lgi_attr.la_valid = LA_MODE; - lgi->lgi_attr.la_mode = S_IFREG | S_IRUGO | S_IWUSR; - lgi->lgi_dof.dof_type = dt_mode_to_dft(S_IFREG); - - return local_object_create(env, los, o, &lgi->lgi_attr, - &lgi->lgi_dof, th); -} - -static int llog_osd_pad(const struct lu_env *env, struct dt_object *o, - loff_t *off, int len, int index, struct thandle *th) -{ - struct llog_thread_info *lgi = llog_info(env); - int rc; - - LASSERT(th); - LASSERT(off); - LASSERT(len >= LLOG_MIN_REC_SIZE && (len & 0x7) == 0); - - lgi->lgi_tail.lrt_len = lgi->lgi_lrh.lrh_len = len; - lgi->lgi_tail.lrt_index = lgi->lgi_lrh.lrh_index = index; - lgi->lgi_lrh.lrh_type = LLOG_PAD_MAGIC; - - lgi->lgi_buf.lb_buf = &lgi->lgi_lrh; - lgi->lgi_buf.lb_len = sizeof(lgi->lgi_lrh); - dt_write_lock(env, o, 0); - rc = dt_record_write(env, o, &lgi->lgi_buf, off, th); - if (rc) { - CERROR("%s: error writing padding record: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, rc); - GOTO(out, rc); - } - - lgi->lgi_buf.lb_buf = &lgi->lgi_tail; - lgi->lgi_buf.lb_len = sizeof(lgi->lgi_tail); - *off += len - sizeof(lgi->lgi_lrh) - sizeof(lgi->lgi_tail); - rc = dt_record_write(env, o, &lgi->lgi_buf, off, th); - if (rc) - CERROR("%s: error writing padding record: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, rc); -out: - dt_write_unlock(env, o); - return rc; -} - -static int llog_osd_write_blob(const struct lu_env *env, struct dt_object *o, - struct llog_rec_hdr *rec, void *buf, - loff_t *off, struct thandle *th) -{ - struct llog_thread_info *lgi = llog_info(env); - int buflen = rec->lrh_len; - int rc; - - LASSERT(env); - LASSERT(o); - - if (buflen == 0) - CWARN("0-length record\n"); - - CDEBUG(D_OTHER, "write blob with type %x, buf %p/%u at off %llu\n", - rec->lrh_type, buf, buflen, *off); - - lgi->lgi_attr.la_valid = LA_SIZE; - lgi->lgi_attr.la_size = *off; - - if (!buf) { - lgi->lgi_buf.lb_len = buflen; - lgi->lgi_buf.lb_buf = rec; - rc = dt_record_write(env, o, &lgi->lgi_buf, off, th); - if (rc) - CERROR("%s: error writing log record: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, rc); - GOTO(out, rc); - } - - /* the buf case */ - /* protect the following 3 writes from concurrent read */ - dt_write_lock(env, o, 0); - rec->lrh_len = sizeof(*rec) + buflen + sizeof(lgi->lgi_tail); - lgi->lgi_buf.lb_len = sizeof(*rec); - lgi->lgi_buf.lb_buf = rec; - rc = dt_record_write(env, o, &lgi->lgi_buf, off, th); - if (rc) { - CERROR("%s: error writing log hdr: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, rc); - GOTO(out_unlock, rc); - } - - lgi->lgi_buf.lb_len = buflen; - lgi->lgi_buf.lb_buf = buf; - rc = dt_record_write(env, o, &lgi->lgi_buf, off, th); - if (rc) { - CERROR("%s: error writing log buffer: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, rc); - GOTO(out_unlock, rc); - } - - lgi->lgi_tail.lrt_len = rec->lrh_len; - lgi->lgi_tail.lrt_index = rec->lrh_index; - lgi->lgi_buf.lb_len = sizeof(lgi->lgi_tail); - lgi->lgi_buf.lb_buf = &lgi->lgi_tail; - rc = dt_record_write(env, o, &lgi->lgi_buf, off, th); - if (rc) - CERROR("%s: error writing log tail: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, rc); - -out_unlock: - dt_write_unlock(env, o); - -out: - /* cleanup the content written above */ - if (rc) { - dt_punch(env, o, lgi->lgi_attr.la_size, OBD_OBJECT_EOF, th, - BYPASS_CAPA); - dt_attr_set(env, o, &lgi->lgi_attr, th, BYPASS_CAPA); - } - - return rc; -} - -static int llog_osd_read_header(const struct lu_env *env, - struct llog_handle *handle) -{ - struct llog_rec_hdr *llh_hdr; - struct dt_object *o; - struct llog_thread_info *lgi; - int rc; - - LASSERT(sizeof(*handle->lgh_hdr) == LLOG_CHUNK_SIZE); - - o = handle->lgh_obj; - LASSERT(o); - - lgi = llog_info(env); - - rc = dt_attr_get(env, o, &lgi->lgi_attr, NULL); - if (rc) - return rc; - - LASSERT(lgi->lgi_attr.la_valid & LA_SIZE); - - if (lgi->lgi_attr.la_size == 0) { - CDEBUG(D_HA, "not reading header from 0-byte log\n"); - return LLOG_EEMPTY; - } - - lgi->lgi_off = 0; - lgi->lgi_buf.lb_buf = handle->lgh_hdr; - lgi->lgi_buf.lb_len = LLOG_CHUNK_SIZE; - - rc = dt_record_read(env, o, &lgi->lgi_buf, &lgi->lgi_off); - if (rc) { - CERROR("%s: error reading log header from "DFID": rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, - PFID(lu_object_fid(&o->do_lu)), rc); - return rc; - } - - llh_hdr = &handle->lgh_hdr->llh_hdr; - if (LLOG_REC_HDR_NEEDS_SWABBING(llh_hdr)) - lustre_swab_llog_hdr(handle->lgh_hdr); - - if (llh_hdr->lrh_type != LLOG_HDR_MAGIC) { - CERROR("%s: bad log %s "DFID" header magic: %#x " - "(expected %#x)\n", o->do_lu.lo_dev->ld_obd->obd_name, - handle->lgh_name ? handle->lgh_name : "", - PFID(lu_object_fid(&o->do_lu)), - llh_hdr->lrh_type, LLOG_HDR_MAGIC); - return -EIO; - } else if (llh_hdr->lrh_len != LLOG_CHUNK_SIZE) { - CERROR("%s: incorrectly sized log %s "DFID" header: " - "%#x (expected %#x)\n" - "you may need to re-run lconf --write_conf.\n", - o->do_lu.lo_dev->ld_obd->obd_name, - handle->lgh_name ? handle->lgh_name : "", - PFID(lu_object_fid(&o->do_lu)), - llh_hdr->lrh_len, LLOG_CHUNK_SIZE); - return -EIO; - } - - handle->lgh_last_idx = handle->lgh_hdr->llh_tail.lrt_index; - - return 0; -} - -static int llog_osd_declare_write_rec(const struct lu_env *env, - struct llog_handle *loghandle, - struct llog_rec_hdr *rec, - int idx, struct thandle *th) -{ - struct llog_thread_info *lgi = llog_info(env); - struct dt_object *o; - int rc; - - LASSERT(env); - LASSERT(th); - LASSERT(loghandle); - - o = loghandle->lgh_obj; - LASSERT(o); - - /* each time we update header */ - rc = dt_declare_record_write(env, o, sizeof(struct llog_log_hdr), 0, - th); - if (rc || idx == 0) /* if error or just header */ - return rc; - - if (dt_object_exists(o)) { - rc = dt_attr_get(env, o, &lgi->lgi_attr, BYPASS_CAPA); - lgi->lgi_off = lgi->lgi_attr.la_size; - LASSERT(ergo(rc == 0, lgi->lgi_attr.la_valid & LA_SIZE)); - if (rc) - return rc; - - rc = dt_declare_punch(env, o, lgi->lgi_off, OBD_OBJECT_EOF, th); - if (rc) - return rc; - } else { - lgi->lgi_off = 0; - } - - /* XXX: implement declared window or multi-chunks approach */ - rc = dt_declare_record_write(env, o, 32 * 1024, lgi->lgi_off, th); - - return rc; -} - -/* returns negative in on error; 0 if success && reccookie == 0; 1 otherwise */ -/* appends if idx == -1, otherwise overwrites record idx. */ -static int llog_osd_write_rec(const struct lu_env *env, - struct llog_handle *loghandle, - struct llog_rec_hdr *rec, - struct llog_cookie *reccookie, int cookiecount, - void *buf, int idx, struct thandle *th) -{ - struct llog_thread_info *lgi = llog_info(env); - struct llog_log_hdr *llh; - int reclen = rec->lrh_len; - int index, rc, old_tail_idx; - struct llog_rec_tail *lrt; - struct dt_object *o; - size_t left; - - LASSERT(env); - llh = loghandle->lgh_hdr; - LASSERT(llh); - o = loghandle->lgh_obj; - LASSERT(o); - LASSERT(th); - - CDEBUG(D_OTHER, "new record %x to "DFID"\n", - rec->lrh_type, PFID(lu_object_fid(&o->do_lu))); - - /* record length should not bigger than LLOG_CHUNK_SIZE */ - if (buf) - rc = (reclen > LLOG_CHUNK_SIZE - sizeof(struct llog_rec_hdr) - - sizeof(struct llog_rec_tail)) ? -E2BIG : 0; - else - rc = (reclen > LLOG_CHUNK_SIZE) ? -E2BIG : 0; - if (rc) - return rc; - - rc = dt_attr_get(env, o, &lgi->lgi_attr, NULL); - if (rc) - return rc; - - if (buf) - /* write_blob adds header and tail to lrh_len. */ - reclen = sizeof(*rec) + rec->lrh_len + - sizeof(struct llog_rec_tail); - - if (idx != -1) { - /* no header: only allowed to insert record 1 */ - if (idx != 1 && lgi->lgi_attr.la_size == 0) - LBUG(); - - if (idx && llh->llh_size && llh->llh_size != rec->lrh_len) - return -EINVAL; - - if (!ext2_test_bit(idx, llh->llh_bitmap)) - CERROR("%s: modify unset record %u\n", - o->do_lu.lo_dev->ld_obd->obd_name, idx); - if (idx != rec->lrh_index) - CERROR("%s: index mismatch %d %u\n", - o->do_lu.lo_dev->ld_obd->obd_name, idx, - rec->lrh_index); - - lgi->lgi_off = 0; - rc = llog_osd_write_blob(env, o, &llh->llh_hdr, NULL, - &lgi->lgi_off, th); - /* we are done if we only write the header or on error */ - if (rc || idx == 0) - return rc; - - if (buf) { - /* We assume that caller has set lgh_cur_* */ - lgi->lgi_off = loghandle->lgh_cur_offset; - CDEBUG(D_OTHER, - "modify record "DOSTID": idx:%d/%u/%d, len:%u " - "offset %llu\n", - POSTID(&loghandle->lgh_id.lgl_oi), idx, - rec->lrh_index, - loghandle->lgh_cur_idx, rec->lrh_len, - (long long)(lgi->lgi_off - sizeof(*llh))); - if (rec->lrh_index != loghandle->lgh_cur_idx) { - CERROR("%s: modify idx mismatch %u/%d\n", - o->do_lu.lo_dev->ld_obd->obd_name, idx, - loghandle->lgh_cur_idx); - return -EFAULT; - } - } else { - /* Assumes constant lrh_len */ - lgi->lgi_off = sizeof(*llh) + (idx - 1) * reclen; - } - - rc = llog_osd_write_blob(env, o, rec, buf, &lgi->lgi_off, th); - if (rc == 0 && reccookie) { - reccookie->lgc_lgl = loghandle->lgh_id; - reccookie->lgc_index = idx; - rc = 1; - } - return rc; - } - - /* Make sure that records don't cross a chunk boundary, so we can - * process them page-at-a-time if needed. If it will cross a chunk - * boundary, write in a fake (but referenced) entry to pad the chunk. - * - * We know that llog_current_log() will return a loghandle that is - * big enough to hold reclen, so all we care about is padding here. - */ - LASSERT(lgi->lgi_attr.la_valid & LA_SIZE); - lgi->lgi_off = lgi->lgi_attr.la_size; - left = LLOG_CHUNK_SIZE - (lgi->lgi_off & (LLOG_CHUNK_SIZE - 1)); - /* NOTE: padding is a record, but no bit is set */ - if (left != 0 && left != reclen && - left < (reclen + LLOG_MIN_REC_SIZE)) { - index = loghandle->lgh_last_idx + 1; - rc = llog_osd_pad(env, o, &lgi->lgi_off, left, index, th); - if (rc) - return rc; - loghandle->lgh_last_idx++; /*for pad rec*/ - } - /* if it's the last idx in log file, then return -ENOSPC */ - if (loghandle->lgh_last_idx >= LLOG_BITMAP_SIZE(llh) - 1) - return -ENOSPC; - - loghandle->lgh_last_idx++; - index = loghandle->lgh_last_idx; - LASSERT(index < LLOG_BITMAP_SIZE(llh)); - rec->lrh_index = index; - if (buf == NULL) { - lrt = (struct llog_rec_tail *)((char *)rec + rec->lrh_len - - sizeof(*lrt)); - lrt->lrt_len = rec->lrh_len; - lrt->lrt_index = rec->lrh_index; - } - /* The caller should make sure only 1 process access the lgh_last_idx, - * Otherwise it might hit the assert.*/ - LASSERT(index < LLOG_BITMAP_SIZE(llh)); - spin_lock(&loghandle->lgh_hdr_lock); - if (ext2_set_bit(index, llh->llh_bitmap)) { - CERROR("%s: index %u already set in log bitmap\n", - o->do_lu.lo_dev->ld_obd->obd_name, index); - spin_unlock(&loghandle->lgh_hdr_lock); - LBUG(); /* should never happen */ - } - llh->llh_count++; - spin_unlock(&loghandle->lgh_hdr_lock); - old_tail_idx = llh->llh_tail.lrt_index; - llh->llh_tail.lrt_index = index; - - lgi->lgi_off = 0; - rc = llog_osd_write_blob(env, o, &llh->llh_hdr, NULL, &lgi->lgi_off, - th); - if (rc) - GOTO(out, rc); - - rc = dt_attr_get(env, o, &lgi->lgi_attr, NULL); - if (rc) - GOTO(out, rc); - - LASSERT(lgi->lgi_attr.la_valid & LA_SIZE); - lgi->lgi_off = lgi->lgi_attr.la_size; - - rc = llog_osd_write_blob(env, o, rec, buf, &lgi->lgi_off, th); - -out: - /* cleanup llog for error case */ - if (rc) { - spin_lock(&loghandle->lgh_hdr_lock); - ext2_clear_bit(index, llh->llh_bitmap); - llh->llh_count--; - spin_unlock(&loghandle->lgh_hdr_lock); - - /* restore the header */ - loghandle->lgh_last_idx--; - llh->llh_tail.lrt_index = old_tail_idx; - lgi->lgi_off = 0; - llog_osd_write_blob(env, o, &llh->llh_hdr, NULL, - &lgi->lgi_off, th); - } - - CDEBUG(D_RPCTRACE, "added record "DOSTID": idx: %u, %u\n", - POSTID(&loghandle->lgh_id.lgl_oi), index, rec->lrh_len); - if (rc == 0 && reccookie) { - reccookie->lgc_lgl = loghandle->lgh_id; - reccookie->lgc_index = index; - if ((rec->lrh_type == MDS_UNLINK_REC) || - (rec->lrh_type == MDS_SETATTR64_REC)) - reccookie->lgc_subsys = LLOG_MDS_OST_ORIG_CTXT; - else if (rec->lrh_type == OST_SZ_REC) - reccookie->lgc_subsys = LLOG_SIZE_ORIG_CTXT; - else - reccookie->lgc_subsys = -1; - rc = 1; - } - return rc; -} - -/* We can skip reading at least as many log blocks as the number of - * minimum sized log records we are skipping. If it turns out - * that we are not far enough along the log (because the - * actual records are larger than minimum size) we just skip - * some more records. - */ -static void llog_skip_over(__u64 *off, int curr, int goal) -{ - if (goal <= curr) - return; - *off = (*off + (goal - curr - 1) * LLOG_MIN_REC_SIZE) & - ~(LLOG_CHUNK_SIZE - 1); -} - -/* sets: - * - cur_offset to the furthest point read in the log file - * - cur_idx to the log index preceding cur_offset - * returns -EIO/-EINVAL on error - */ -static int llog_osd_next_block(const struct lu_env *env, - struct llog_handle *loghandle, int *cur_idx, - int next_idx, __u64 *cur_offset, void *buf, - int len) -{ - struct llog_thread_info *lgi = llog_info(env); - struct dt_object *o; - struct dt_device *dt; - int rc; - - LASSERT(env); - LASSERT(lgi); - - if (len == 0 || len & (LLOG_CHUNK_SIZE - 1)) - return -EINVAL; - - CDEBUG(D_OTHER, "looking for log index %u (cur idx %u off %llu)\n", - next_idx, *cur_idx, *cur_offset); - - LASSERT(loghandle); - LASSERT(loghandle->lgh_ctxt); - - o = loghandle->lgh_obj; - LASSERT(o); - LASSERT(dt_object_exists(o)); - dt = lu2dt_dev(o->do_lu.lo_dev); - LASSERT(dt); - - rc = dt_attr_get(env, o, &lgi->lgi_attr, BYPASS_CAPA); - if (rc) - GOTO(out, rc); - - while (*cur_offset < lgi->lgi_attr.la_size) { - struct llog_rec_hdr *rec, *last_rec; - struct llog_rec_tail *tail; - - llog_skip_over(cur_offset, *cur_idx, next_idx); - - /* read up to next LLOG_CHUNK_SIZE block */ - lgi->lgi_buf.lb_len = LLOG_CHUNK_SIZE - - (*cur_offset & (LLOG_CHUNK_SIZE - 1)); - lgi->lgi_buf.lb_buf = buf; - - /* Note: read lock is not needed around la_size get above at - * the time of dt_attr_get(). There are only two cases that - * matter. Either la_size == cur_offset, in which case the - * entire read is skipped, or la_size > cur_offset and the loop - * is entered and this thread is blocked at dt_read_lock() - * until the write is completed. When the write completes, then - * the dt_read() will be done with the full length, and will - * get the full data. - */ - dt_read_lock(env, o, 0); - rc = dt_read(env, o, &lgi->lgi_buf, cur_offset); - dt_read_unlock(env, o); - if (rc < 0) { - CERROR("%s: can't read llog block from log "DFID - " offset %llu: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, - PFID(lu_object_fid(&o->do_lu)), *cur_offset, - rc); - GOTO(out, rc); - } - - if (rc < len) { - /* signal the end of the valid buffer to - * llog_process */ - memset(buf + rc, 0, len - rc); - } - - if (rc == 0) /* end of file, nothing to do */ - GOTO(out, rc); - - if (rc < sizeof(*tail)) { - CERROR("%s: invalid llog block at log id "DOSTID"/%u " - "offset %llu\n", - o->do_lu.lo_dev->ld_obd->obd_name, - POSTID(&loghandle->lgh_id.lgl_oi), - loghandle->lgh_id.lgl_ogen, *cur_offset); - GOTO(out, rc = -EINVAL); - } - - rec = buf; - if (LLOG_REC_HDR_NEEDS_SWABBING(rec)) - lustre_swab_llog_rec(rec); - - tail = (struct llog_rec_tail *)((char *)buf + rc - - sizeof(struct llog_rec_tail)); - /* get the last record in block */ - last_rec = (struct llog_rec_hdr *)((char *)buf + rc - - le32_to_cpu(tail->lrt_len)); - - if (LLOG_REC_HDR_NEEDS_SWABBING(last_rec)) - lustre_swab_llog_rec(last_rec); - LASSERT(last_rec->lrh_index == tail->lrt_index); - - *cur_idx = tail->lrt_index; - - /* this shouldn't happen */ - if (tail->lrt_index == 0) { - CERROR("%s: invalid llog tail at log id "DOSTID"/%u " - "offset %llu\n", - o->do_lu.lo_dev->ld_obd->obd_name, - POSTID(&loghandle->lgh_id.lgl_oi), - loghandle->lgh_id.lgl_ogen, *cur_offset); - GOTO(out, rc = -EINVAL); - } - if (tail->lrt_index < next_idx) - continue; - - /* sanity check that the start of the new buffer is no farther - * than the record that we wanted. This shouldn't happen. */ - if (rec->lrh_index > next_idx) { - CERROR("%s: missed desired record? %u > %u\n", - o->do_lu.lo_dev->ld_obd->obd_name, - rec->lrh_index, next_idx); - GOTO(out, rc = -ENOENT); - } - GOTO(out, rc = 0); - } - GOTO(out, rc = -EIO); -out: - return rc; -} - -static int llog_osd_prev_block(const struct lu_env *env, - struct llog_handle *loghandle, - int prev_idx, void *buf, int len) -{ - struct llog_thread_info *lgi = llog_info(env); - struct dt_object *o; - struct dt_device *dt; - loff_t cur_offset; - int rc; - - if (len == 0 || len & (LLOG_CHUNK_SIZE - 1)) - return -EINVAL; - - CDEBUG(D_OTHER, "looking for log index %u\n", prev_idx); - - LASSERT(loghandle); - LASSERT(loghandle->lgh_ctxt); - - o = loghandle->lgh_obj; - LASSERT(o); - LASSERT(dt_object_exists(o)); - dt = lu2dt_dev(o->do_lu.lo_dev); - LASSERT(dt); - - cur_offset = LLOG_CHUNK_SIZE; - llog_skip_over(&cur_offset, 0, prev_idx); - - rc = dt_attr_get(env, o, &lgi->lgi_attr, BYPASS_CAPA); - if (rc) - GOTO(out, rc); - - while (cur_offset < lgi->lgi_attr.la_size) { - struct llog_rec_hdr *rec, *last_rec; - struct llog_rec_tail *tail; - - lgi->lgi_buf.lb_len = len; - lgi->lgi_buf.lb_buf = buf; - /* It is OK to have locking around dt_read() only, see - * comment in llog_osd_next_block for details - */ - dt_read_lock(env, o, 0); - rc = dt_read(env, o, &lgi->lgi_buf, &cur_offset); - dt_read_unlock(env, o); - if (rc < 0) { - CERROR("%s: can't read llog block from log "DFID - " offset %llu: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, - PFID(lu_object_fid(&o->do_lu)), cur_offset, rc); - GOTO(out, rc); - } - - if (rc == 0) /* end of file, nothing to do */ - GOTO(out, rc); - - if (rc < sizeof(*tail)) { - CERROR("%s: invalid llog block at log id "DOSTID"/%u " - "offset %llu\n", - o->do_lu.lo_dev->ld_obd->obd_name, - POSTID(&loghandle->lgh_id.lgl_oi), - loghandle->lgh_id.lgl_ogen, cur_offset); - GOTO(out, rc = -EINVAL); - } - - rec = buf; - if (LLOG_REC_HDR_NEEDS_SWABBING(rec)) - lustre_swab_llog_rec(rec); - - tail = (struct llog_rec_tail *)((char *)buf + rc - - sizeof(struct llog_rec_tail)); - /* get the last record in block */ - last_rec = (struct llog_rec_hdr *)((char *)buf + rc - - le32_to_cpu(tail->lrt_len)); - - if (LLOG_REC_HDR_NEEDS_SWABBING(last_rec)) - lustre_swab_llog_rec(last_rec); - LASSERT(last_rec->lrh_index == tail->lrt_index); - - /* this shouldn't happen */ - if (tail->lrt_index == 0) { - CERROR("%s: invalid llog tail at log id "DOSTID"/%u " - "offset %llu\n", - o->do_lu.lo_dev->ld_obd->obd_name, - POSTID(&loghandle->lgh_id.lgl_oi), - loghandle->lgh_id.lgl_ogen, cur_offset); - GOTO(out, rc = -EINVAL); - } - if (tail->lrt_index < prev_idx) - continue; - - /* sanity check that the start of the new buffer is no farther - * than the record that we wanted. This shouldn't happen. */ - if (rec->lrh_index > prev_idx) { - CERROR("%s: missed desired record? %u > %u\n", - o->do_lu.lo_dev->ld_obd->obd_name, - rec->lrh_index, prev_idx); - GOTO(out, rc = -ENOENT); - } - GOTO(out, rc = 0); - } - GOTO(out, rc = -EIO); -out: - return rc; -} - -struct dt_object *llog_osd_dir_get(const struct lu_env *env, - struct llog_ctxt *ctxt) -{ - struct dt_device *dt; - struct dt_thread_info *dti = dt_info(env); - struct dt_object *dir; - int rc; - - dt = ctxt->loc_exp->exp_obd->obd_lvfs_ctxt.dt; - if (ctxt->loc_dir == NULL) { - rc = dt_root_get(env, dt, &dti->dti_fid); - if (rc) - return ERR_PTR(rc); - dir = dt_locate(env, dt, &dti->dti_fid); - } else { - lu_object_get(&ctxt->loc_dir->do_lu); - dir = ctxt->loc_dir; - } - - return dir; -} - -static int llog_osd_open(const struct lu_env *env, struct llog_handle *handle, - struct llog_logid *logid, char *name, - enum llog_open_param open_param) -{ - struct llog_thread_info *lgi = llog_info(env); - struct llog_ctxt *ctxt = handle->lgh_ctxt; - struct dt_object *o; - struct dt_device *dt; - struct ls_device *ls; - struct local_oid_storage *los; - int rc = 0; - - LASSERT(env); - LASSERT(ctxt); - LASSERT(ctxt->loc_exp); - LASSERT(ctxt->loc_exp->exp_obd); - dt = ctxt->loc_exp->exp_obd->obd_lvfs_ctxt.dt; - LASSERT(dt); - - ls = ls_device_get(dt); - if (IS_ERR(ls)) - return PTR_ERR(ls); - - mutex_lock(&ls->ls_los_mutex); - los = dt_los_find(ls, name != NULL ? FID_SEQ_LLOG_NAME : FID_SEQ_LLOG); - mutex_unlock(&ls->ls_los_mutex); - LASSERT(los); - ls_device_put(env, ls); - - LASSERT(handle); - - if (logid != NULL) { - logid_to_fid(logid, &lgi->lgi_fid); - } else if (name) { - struct dt_object *llog_dir; - - llog_dir = llog_osd_dir_get(env, ctxt); - if (IS_ERR(llog_dir)) - GOTO(out, rc = PTR_ERR(llog_dir)); - dt_read_lock(env, llog_dir, 0); - rc = dt_lookup_dir(env, llog_dir, name, &lgi->lgi_fid); - dt_read_unlock(env, llog_dir); - lu_object_put(env, &llog_dir->do_lu); - if (rc == -ENOENT && open_param == LLOG_OPEN_NEW) { - /* generate fid for new llog */ - rc = local_object_fid_generate(env, los, - &lgi->lgi_fid); - } - if (rc < 0) - GOTO(out, rc); - OBD_ALLOC(handle->lgh_name, strlen(name) + 1); - if (handle->lgh_name) - strcpy(handle->lgh_name, name); - else - GOTO(out, rc = -ENOMEM); - } else { - LASSERTF(open_param & LLOG_OPEN_NEW, "%#x\n", open_param); - /* generate fid for new llog */ - rc = local_object_fid_generate(env, los, &lgi->lgi_fid); - if (rc < 0) - GOTO(out, rc); - } - - o = ls_locate(env, ls, &lgi->lgi_fid); - if (IS_ERR(o)) - GOTO(out_name, rc = PTR_ERR(o)); - - /* No new llog is expected but doesn't exist */ - if (open_param != LLOG_OPEN_NEW && !dt_object_exists(o)) - GOTO(out_put, rc = -ENOENT); - - fid_to_logid(&lgi->lgi_fid, &handle->lgh_id); - handle->lgh_obj = o; - handle->private_data = los; - LASSERT(handle->lgh_ctxt); - - return rc; - -out_put: - lu_object_put(env, &o->do_lu); -out_name: - if (handle->lgh_name != NULL) - OBD_FREE(handle->lgh_name, strlen(name) + 1); -out: - dt_los_put(los); - return rc; -} - -static int llog_osd_exist(struct llog_handle *handle) -{ - LASSERT(handle->lgh_obj); - return (dt_object_exists(handle->lgh_obj) && - !lu_object_is_dying(handle->lgh_obj->do_lu.lo_header)); -} - -static int llog_osd_declare_create(const struct lu_env *env, - struct llog_handle *res, struct thandle *th) -{ - struct llog_thread_info *lgi = llog_info(env); - struct local_oid_storage *los; - struct dt_object *o; - int rc; - - LASSERT(res->lgh_obj); - LASSERT(th); - - /* object can be created by another thread */ - o = res->lgh_obj; - if (dt_object_exists(o)) - return 0; - - los = res->private_data; - LASSERT(los); - - rc = llog_osd_declare_new_object(env, los, o, th); - if (rc) - return rc; - - rc = dt_declare_record_write(env, o, LLOG_CHUNK_SIZE, 0, th); - if (rc) - return rc; - - if (res->lgh_name) { - struct dt_object *llog_dir; - - llog_dir = llog_osd_dir_get(env, res->lgh_ctxt); - if (IS_ERR(llog_dir)) - return PTR_ERR(llog_dir); - logid_to_fid(&res->lgh_id, &lgi->lgi_fid); - rc = dt_declare_insert(env, llog_dir, - (struct dt_rec *)&lgi->lgi_fid, - (struct dt_key *)res->lgh_name, th); - lu_object_put(env, &llog_dir->do_lu); - if (rc) - CERROR("%s: can't declare named llog %s: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, - res->lgh_name, rc); - } - return rc; -} - -/* This is a callback from the llog_* functions. - * Assumes caller has already pushed us into the kernel context. */ -static int llog_osd_create(const struct lu_env *env, struct llog_handle *res, - struct thandle *th) -{ - struct llog_thread_info *lgi = llog_info(env); - struct local_oid_storage *los; - struct dt_object *o; - int rc = 0; - - LASSERT(env); - o = res->lgh_obj; - LASSERT(o); - - /* llog can be already created */ - if (dt_object_exists(o)) - return -EEXIST; - - los = res->private_data; - LASSERT(los); - - dt_write_lock(env, o, 0); - if (!dt_object_exists(o)) - rc = llog_osd_create_new_object(env, los, o, th); - else - rc = -EEXIST; - - dt_write_unlock(env, o); - if (rc) - return rc; - - if (res->lgh_name) { - struct dt_object *llog_dir; - - llog_dir = llog_osd_dir_get(env, res->lgh_ctxt); - if (IS_ERR(llog_dir)) - return PTR_ERR(llog_dir); - - logid_to_fid(&res->lgh_id, &lgi->lgi_fid); - dt_read_lock(env, llog_dir, 0); - rc = dt_insert(env, llog_dir, - (struct dt_rec *)&lgi->lgi_fid, - (struct dt_key *)res->lgh_name, - th, BYPASS_CAPA, 1); - dt_read_unlock(env, llog_dir); - lu_object_put(env, &llog_dir->do_lu); - if (rc) - CERROR("%s: can't create named llog %s: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, - res->lgh_name, rc); - } - return rc; -} - -static int llog_osd_close(const struct lu_env *env, struct llog_handle *handle) -{ - struct local_oid_storage *los; - int rc = 0; - - LASSERT(handle->lgh_obj); - - lu_object_put(env, &handle->lgh_obj->do_lu); - - los = handle->private_data; - LASSERT(los); - dt_los_put(los); - - if (handle->lgh_name) - OBD_FREE(handle->lgh_name, strlen(handle->lgh_name) + 1); - - return rc; -} - -static int llog_osd_destroy(const struct lu_env *env, - struct llog_handle *loghandle) -{ - struct llog_ctxt *ctxt; - struct dt_object *o, *llog_dir = NULL; - struct dt_device *d; - struct thandle *th; - char *name = NULL; - int rc; - - ctxt = loghandle->lgh_ctxt; - LASSERT(ctxt); - - o = loghandle->lgh_obj; - LASSERT(o); - - d = lu2dt_dev(o->do_lu.lo_dev); - LASSERT(d); - LASSERT(d == ctxt->loc_exp->exp_obd->obd_lvfs_ctxt.dt); - - th = dt_trans_create(env, d); - if (IS_ERR(th)) - return PTR_ERR(th); - - if (loghandle->lgh_name) { - llog_dir = llog_osd_dir_get(env, ctxt); - if (IS_ERR(llog_dir)) - GOTO(out_trans, rc = PTR_ERR(llog_dir)); - - name = loghandle->lgh_name; - rc = dt_declare_delete(env, llog_dir, - (struct dt_key *)name, th); - if (rc) - GOTO(out_trans, rc); - } - - dt_declare_ref_del(env, o, th); - - rc = dt_declare_destroy(env, o, th); - if (rc) - GOTO(out_trans, rc); - - rc = dt_trans_start_local(env, d, th); - if (rc) - GOTO(out_trans, rc); - - dt_write_lock(env, o, 0); - if (dt_object_exists(o)) { - if (name) { - dt_read_lock(env, llog_dir, 0); - rc = dt_delete(env, llog_dir, - (struct dt_key *) name, - th, BYPASS_CAPA); - dt_read_unlock(env, llog_dir); - if (rc) { - CERROR("%s: can't remove llog %s: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, - name, rc); - GOTO(out_unlock, rc); - } - } - dt_ref_del(env, o, th); - rc = dt_destroy(env, o, th); - if (rc) - GOTO(out_unlock, rc); - } -out_unlock: - dt_write_unlock(env, o); -out_trans: - dt_trans_stop(env, d, th); - if (llog_dir != NULL) - lu_object_put(env, &llog_dir->do_lu); - return rc; -} - -static int llog_osd_setup(const struct lu_env *env, struct obd_device *obd, - struct obd_llog_group *olg, int ctxt_idx, - struct obd_device *disk_obd) -{ - struct local_oid_storage *los; - struct llog_thread_info *lgi = llog_info(env); - struct llog_ctxt *ctxt; - int rc = 0; - - LASSERT(obd); - LASSERT(olg->olg_ctxts[ctxt_idx]); - - ctxt = llog_ctxt_get(olg->olg_ctxts[ctxt_idx]); - LASSERT(ctxt); - - /* initialize data allowing to generate new fids, - * literally we need a sequence */ - lgi->lgi_fid.f_seq = FID_SEQ_LLOG; - lgi->lgi_fid.f_oid = 1; - lgi->lgi_fid.f_ver = 0; - rc = local_oid_storage_init(env, disk_obd->obd_lvfs_ctxt.dt, - &lgi->lgi_fid, &los); - if (rc < 0) - return rc; - - lgi->lgi_fid.f_seq = FID_SEQ_LLOG_NAME; - lgi->lgi_fid.f_oid = 1; - lgi->lgi_fid.f_ver = 0; - rc = local_oid_storage_init(env, disk_obd->obd_lvfs_ctxt.dt, - &lgi->lgi_fid, &los); - llog_ctxt_put(ctxt); - return rc; -} - -static int llog_osd_cleanup(const struct lu_env *env, struct llog_ctxt *ctxt) -{ - struct dt_device *dt; - struct ls_device *ls; - struct local_oid_storage *los, *nlos; - - LASSERT(ctxt->loc_exp->exp_obd); - dt = ctxt->loc_exp->exp_obd->obd_lvfs_ctxt.dt; - ls = ls_device_get(dt); - if (IS_ERR(ls)) - return PTR_ERR(ls); - - mutex_lock(&ls->ls_los_mutex); - los = dt_los_find(ls, FID_SEQ_LLOG); - nlos = dt_los_find(ls, FID_SEQ_LLOG_NAME); - mutex_unlock(&ls->ls_los_mutex); - if (los != NULL) { - dt_los_put(los); - local_oid_storage_fini(env, los); - } - if (nlos != NULL) { - dt_los_put(nlos); - local_oid_storage_fini(env, nlos); - } - ls_device_put(env, ls); - return 0; -} - -struct llog_operations llog_osd_ops = { - .lop_next_block = llog_osd_next_block, - .lop_prev_block = llog_osd_prev_block, - .lop_read_header = llog_osd_read_header, - .lop_destroy = llog_osd_destroy, - .lop_setup = llog_osd_setup, - .lop_cleanup = llog_osd_cleanup, - .lop_open = llog_osd_open, - .lop_exist = llog_osd_exist, - .lop_declare_create = llog_osd_declare_create, - .lop_create = llog_osd_create, - .lop_declare_write_rec = llog_osd_declare_write_rec, - .lop_write_rec = llog_osd_write_rec, - .lop_close = llog_osd_close, -}; -EXPORT_SYMBOL(llog_osd_ops); - -/* reads the catalog list */ -int llog_osd_get_cat_list(const struct lu_env *env, struct dt_device *d, - int idx, int count, struct llog_catid *idarray) -{ - struct llog_thread_info *lgi = llog_info(env); - struct dt_object *o = NULL; - struct thandle *th; - int rc, size; - - LASSERT(d); - - size = sizeof(*idarray) * count; - lgi->lgi_off = idx * sizeof(*idarray); - - lu_local_obj_fid(&lgi->lgi_fid, LLOG_CATALOGS_OID); - - o = dt_locate(env, d, &lgi->lgi_fid); - if (IS_ERR(o)) - return PTR_ERR(o); - - if (!dt_object_exists(o)) { - th = dt_trans_create(env, d); - if (IS_ERR(th)) - GOTO(out, rc = PTR_ERR(th)); - - lgi->lgi_attr.la_valid = LA_MODE; - lgi->lgi_attr.la_mode = S_IFREG | S_IRUGO | S_IWUSR; - lgi->lgi_dof.dof_type = dt_mode_to_dft(S_IFREG); - - rc = dt_declare_create(env, o, &lgi->lgi_attr, NULL, - &lgi->lgi_dof, th); - if (rc) - GOTO(out_trans, rc); - - rc = dt_trans_start_local(env, d, th); - if (rc) - GOTO(out_trans, rc); - - dt_write_lock(env, o, 0); - if (!dt_object_exists(o)) - rc = dt_create(env, o, &lgi->lgi_attr, NULL, - &lgi->lgi_dof, th); - dt_write_unlock(env, o); -out_trans: - dt_trans_stop(env, d, th); - if (rc) - GOTO(out, rc); - } - - rc = dt_attr_get(env, o, &lgi->lgi_attr, BYPASS_CAPA); - if (rc) - GOTO(out, rc); - - if (!S_ISREG(lgi->lgi_attr.la_mode)) { - CERROR("%s: CATALOGS is not a regular file!: mode = %o\n", - o->do_lu.lo_dev->ld_obd->obd_name, - lgi->lgi_attr.la_mode); - GOTO(out, rc = -ENOENT); - } - - CDEBUG(D_CONFIG, "cat list: disk size=%d, read=%d\n", - (int)lgi->lgi_attr.la_size, size); - - /* return just number of llogs */ - if (idarray == NULL) { - rc = lgi->lgi_attr.la_size / sizeof(*idarray); - GOTO(out, rc); - } - - /* read for new ost index or for empty file */ - memset(idarray, 0, size); - if (lgi->lgi_attr.la_size < lgi->lgi_off + size) - GOTO(out, rc = 0); - if (lgi->lgi_attr.la_size < lgi->lgi_off + size) - size = lgi->lgi_attr.la_size - lgi->lgi_off; - - lgi->lgi_buf.lb_buf = idarray; - lgi->lgi_buf.lb_len = size; - rc = dt_record_read(env, o, &lgi->lgi_buf, &lgi->lgi_off); - if (rc) { - CERROR("%s: error reading CATALOGS: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, rc); - GOTO(out, rc); - } - -out: - lu_object_put(env, &o->do_lu); - return rc; -} -EXPORT_SYMBOL(llog_osd_get_cat_list); - -/* writes the cat list */ -int llog_osd_put_cat_list(const struct lu_env *env, struct dt_device *d, - int idx, int count, struct llog_catid *idarray) -{ - struct llog_thread_info *lgi = llog_info(env); - struct dt_object *o = NULL; - struct thandle *th; - int rc, size; - - if (!count) - return 0; - - LASSERT(d); - - size = sizeof(*idarray) * count; - lgi->lgi_off = idx * sizeof(*idarray); - - lu_local_obj_fid(&lgi->lgi_fid, LLOG_CATALOGS_OID); - - o = dt_locate(env, d, &lgi->lgi_fid); - if (IS_ERR(o)) - return PTR_ERR(o); - - if (!dt_object_exists(o)) - GOTO(out, rc = -ENOENT); - - rc = dt_attr_get(env, o, &lgi->lgi_attr, BYPASS_CAPA); - if (rc) - GOTO(out, rc); - - if (!S_ISREG(lgi->lgi_attr.la_mode)) { - CERROR("%s: CATALOGS is not a regular file!: mode = %o\n", - o->do_lu.lo_dev->ld_obd->obd_name, - lgi->lgi_attr.la_mode); - GOTO(out, rc = -ENOENT); - } - - th = dt_trans_create(env, d); - if (IS_ERR(th)) - GOTO(out, rc = PTR_ERR(th)); - - rc = dt_declare_record_write(env, o, size, lgi->lgi_off, th); - if (rc) - GOTO(out, rc); - - rc = dt_trans_start_local(env, d, th); - if (rc) - GOTO(out_trans, rc); - - lgi->lgi_buf.lb_buf = idarray; - lgi->lgi_buf.lb_len = size; - rc = dt_record_write(env, o, &lgi->lgi_buf, &lgi->lgi_off, th); - if (rc) - CDEBUG(D_INODE, "error writing CATALOGS: rc = %d\n", rc); -out_trans: - dt_trans_stop(env, d, th); -out: - lu_object_put(env, &o->do_lu); - return rc; -} -EXPORT_SYMBOL(llog_osd_put_cat_list); diff --git a/drivers/staging/lustre/lustre/obdclass/llog_swab.c b/drivers/staging/lustre/lustre/obdclass/llog_swab.c index b3247fb7a35a..bfac8387021e 100644 --- a/drivers/staging/lustre/lustre/obdclass/llog_swab.c +++ b/drivers/staging/lustre/lustre/obdclass/llog_swab.c @@ -61,9 +61,9 @@ static void print_llogd_body(struct llogd_body *d) void lustre_swab_lu_fid(struct lu_fid *fid) { - __swab64s (&fid->f_seq); - __swab32s (&fid->f_oid); - __swab32s (&fid->f_ver); + __swab64s(&fid->f_seq); + __swab32s(&fid->f_oid); + __swab32s(&fid->f_ver); } EXPORT_SYMBOL(lustre_swab_lu_fid); @@ -82,47 +82,47 @@ void lustre_swab_llog_id(struct llog_logid *log_id) { __swab64s(&log_id->lgl_oi.oi.oi_id); __swab64s(&log_id->lgl_oi.oi.oi_seq); - __swab32s(&log_id->lgl_ogen); + __swab32s(&log_id->lgl_ogen); } EXPORT_SYMBOL(lustre_swab_llog_id); -void lustre_swab_llogd_body (struct llogd_body *d) +void lustre_swab_llogd_body(struct llogd_body *d) { print_llogd_body(d); lustre_swab_llog_id(&d->lgd_logid); - __swab32s (&d->lgd_ctxt_idx); - __swab32s (&d->lgd_llh_flags); - __swab32s (&d->lgd_index); - __swab32s (&d->lgd_saved_index); - __swab32s (&d->lgd_len); - __swab64s (&d->lgd_cur_offset); + __swab32s(&d->lgd_ctxt_idx); + __swab32s(&d->lgd_llh_flags); + __swab32s(&d->lgd_index); + __swab32s(&d->lgd_saved_index); + __swab32s(&d->lgd_len); + __swab64s(&d->lgd_cur_offset); print_llogd_body(d); } EXPORT_SYMBOL(lustre_swab_llogd_body); -void lustre_swab_llogd_conn_body (struct llogd_conn_body *d) +void lustre_swab_llogd_conn_body(struct llogd_conn_body *d) { - __swab64s (&d->lgdc_gen.mnt_cnt); - __swab64s (&d->lgdc_gen.conn_cnt); + __swab64s(&d->lgdc_gen.mnt_cnt); + __swab64s(&d->lgdc_gen.conn_cnt); lustre_swab_llog_id(&d->lgdc_logid); - __swab32s (&d->lgdc_ctxt_idx); + __swab32s(&d->lgdc_ctxt_idx); } EXPORT_SYMBOL(lustre_swab_llogd_conn_body); void lustre_swab_ll_fid(struct ll_fid *fid) { - __swab64s (&fid->id); - __swab32s (&fid->generation); - __swab32s (&fid->f_type); + __swab64s(&fid->id); + __swab32s(&fid->generation); + __swab32s(&fid->f_type); } EXPORT_SYMBOL(lustre_swab_ll_fid); void lustre_swab_lu_seq_range(struct lu_seq_range *range) { - __swab64s (&range->lsr_start); - __swab64s (&range->lsr_end); - __swab32s (&range->lsr_index); - __swab32s (&range->lsr_flags); + __swab64s(&range->lsr_start); + __swab64s(&range->lsr_end); + __swab32s(&range->lsr_index); + __swab32s(&range->lsr_flags); } EXPORT_SYMBOL(lustre_swab_lu_seq_range); @@ -168,7 +168,7 @@ void lustre_swab_llog_rec(struct llog_rec_hdr *rec) } case CHANGELOG_REC: { - struct llog_changelog_rec *cr = (struct llog_changelog_rec*)rec; + struct llog_changelog_rec *cr = (struct llog_changelog_rec *)rec; __swab16s(&cr->cr.cr_namelen); __swab16s(&cr->cr.cr_flags); @@ -193,7 +193,7 @@ void lustre_swab_llog_rec(struct llog_rec_hdr *rec) case CHANGELOG_USER_REC: { struct llog_changelog_user_rec *cur = - (struct llog_changelog_user_rec*)rec; + (struct llog_changelog_user_rec *)rec; __swab32s(&cur->cur_id); __swab64s(&cur->cur_endrec); @@ -294,7 +294,7 @@ static void print_llog_hdr(struct llog_log_hdr *h) CDEBUG(D_OTHER, "\tllh_tail.lrt_len: %#x\n", h->llh_tail.lrt_len); } -void lustre_swab_llog_hdr (struct llog_log_hdr *h) +void lustre_swab_llog_hdr(struct llog_log_hdr *h) { print_llog_hdr(h); @@ -367,7 +367,7 @@ struct cfg_marker32 { void lustre_swab_cfg_marker(struct cfg_marker *marker, int swab, int size) { - struct cfg_marker32 *cm32 = (struct cfg_marker32*)marker; + struct cfg_marker32 *cm32 = (struct cfg_marker32 *)marker; if (swab) { __swab32s(&marker->cm_step); diff --git a/drivers/staging/lustre/lustre/obdclass/llog_test.c b/drivers/staging/lustre/lustre/obdclass/llog_test.c deleted file mode 100644 index ef008abd331c..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/llog_test.c +++ /dev/null @@ -1,1072 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2003, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/obdclass/llog_test.c - * - * Author: Phil Schwan <phil@clusterfs.com> - * Author: Mikhail Pershin <mike.pershin@intel.com> - */ - -#define DEBUG_SUBSYSTEM S_CLASS - -#include <linux/module.h> -#include <linux/init.h> - -#include "../include/obd_class.h" -#include "../include/lustre_fid.h" -#include "../include/lustre_log.h" - -/* This is slightly more than the number of records that can fit into a - * single llog file, because the llog_log_header takes up some of the - * space in the first block that cannot be used for the bitmap. */ -#define LLOG_TEST_RECNUM (LLOG_CHUNK_SIZE * 8) - -static int llog_test_rand; -static struct obd_uuid uuid = { .uuid = "test_uuid" }; -static struct llog_logid cat_logid; - -struct llog_mini_rec { - struct llog_rec_hdr lmr_hdr; - struct llog_rec_tail lmr_tail; -} __attribute__((packed)); - -static int verify_handle(char *test, struct llog_handle *llh, int num_recs) -{ - int i; - int last_idx = 0; - int active_recs = 0; - - for (i = 0; i < LLOG_BITMAP_BYTES * 8; i++) { - if (ext2_test_bit(i, llh->lgh_hdr->llh_bitmap)) { - last_idx = i; - active_recs++; - } - } - - if (active_recs != num_recs) { - CERROR("%s: expected %d active recs after write, found %d\n", - test, num_recs, active_recs); - return -ERANGE; - } - - if (llh->lgh_hdr->llh_count != num_recs) { - CERROR("%s: handle->count is %d, expected %d after write\n", - test, llh->lgh_hdr->llh_count, num_recs); - return -ERANGE; - } - - if (llh->lgh_last_idx < last_idx) { - CERROR("%s: handle->last_idx is %d, expected %d after write\n", - test, llh->lgh_last_idx, last_idx); - return -ERANGE; - } - - return 0; -} - -/* Test named-log create/open, close */ -static int llog_test_1(const struct lu_env *env, - struct obd_device *obd, char *name) -{ - struct llog_handle *llh; - struct llog_ctxt *ctxt; - int rc; - int rc2; - - CWARN("1a: create a log with name: %s\n", name); - ctxt = llog_get_context(obd, LLOG_TEST_ORIG_CTXT); - LASSERT(ctxt); - - rc = llog_open_create(env, ctxt, &llh, NULL, name); - if (rc) { - CERROR("1a: llog_create with name %s failed: %d\n", name, rc); - GOTO(out, rc); - } - rc = llog_init_handle(env, llh, LLOG_F_IS_PLAIN, &uuid); - if (rc) { - CERROR("1a: can't init llog handle: %d\n", rc); - GOTO(out_close, rc); - } - - rc = verify_handle("1", llh, 1); - - CWARN("1b: close newly-created log\n"); -out_close: - rc2 = llog_close(env, llh); - if (rc2) { - CERROR("1b: close log %s failed: %d\n", name, rc2); - if (rc == 0) - rc = rc2; - } -out: - llog_ctxt_put(ctxt); - return rc; -} - -/* Test named-log reopen; returns opened log on success */ -static int llog_test_2(const struct lu_env *env, struct obd_device *obd, - char *name, struct llog_handle **llh) -{ - struct llog_ctxt *ctxt; - struct llog_handle *loghandle; - struct llog_logid logid; - int rc; - - CWARN("2a: re-open a log with name: %s\n", name); - ctxt = llog_get_context(obd, LLOG_TEST_ORIG_CTXT); - LASSERT(ctxt); - - rc = llog_open(env, ctxt, llh, NULL, name, LLOG_OPEN_EXISTS); - if (rc) { - CERROR("2a: re-open log with name %s failed: %d\n", name, rc); - GOTO(out_put, rc); - } - - rc = llog_init_handle(env, *llh, LLOG_F_IS_PLAIN, &uuid); - if (rc) { - CERROR("2a: can't init llog handle: %d\n", rc); - GOTO(out_close_llh, rc); - } - - rc = verify_handle("2", *llh, 1); - if (rc) - GOTO(out_close_llh, rc); - - /* XXX: there is known issue with tests 2b, MGS is not able to create - * anonymous llog, exit now to allow following tests run. - * It is fixed in upcoming llog over OSD code */ - GOTO(out_put, rc); - - CWARN("2b: create a log without specified NAME & LOGID\n"); - rc = llog_open_create(env, ctxt, &loghandle, NULL, NULL); - if (rc) { - CERROR("2b: create log failed\n"); - GOTO(out_close_llh, rc); - } - rc = llog_init_handle(env, loghandle, LLOG_F_IS_PLAIN, &uuid); - if (rc) { - CERROR("2b: can't init llog handle: %d\n", rc); - GOTO(out_close, rc); - } - - logid = loghandle->lgh_id; - llog_close(env, loghandle); - - CWARN("2c: re-open the log by LOGID\n"); - rc = llog_open(env, ctxt, &loghandle, &logid, NULL, LLOG_OPEN_EXISTS); - if (rc) { - CERROR("2c: re-open log by LOGID failed\n"); - GOTO(out_close_llh, rc); - } - - rc = llog_init_handle(env, loghandle, LLOG_F_IS_PLAIN, &uuid); - if (rc) { - CERROR("2c: can't init llog handle: %d\n", rc); - GOTO(out_close, rc); - } - - CWARN("2b: destroy this log\n"); - rc = llog_destroy(env, loghandle); - if (rc) - CERROR("2d: destroy log failed\n"); -out_close: - llog_close(env, loghandle); -out_close_llh: - if (rc) - llog_close(env, *llh); -out_put: - llog_ctxt_put(ctxt); - - return rc; -} - -/* Test record writing, single and in bulk */ -static int llog_test_3(const struct lu_env *env, struct obd_device *obd, - struct llog_handle *llh) -{ - struct llog_gen_rec lgr; - int rc, i; - int num_recs = 1; /* 1 for the header */ - - lgr.lgr_hdr.lrh_len = lgr.lgr_tail.lrt_len = sizeof(lgr); - lgr.lgr_hdr.lrh_type = LLOG_GEN_REC; - - CWARN("3a: write one create_rec\n"); - rc = llog_write(env, llh, &lgr.lgr_hdr, NULL, 0, NULL, -1); - num_recs++; - if (rc < 0) { - CERROR("3a: write one log record failed: %d\n", rc); - return rc; - } - - rc = verify_handle("3a", llh, num_recs); - if (rc) - return rc; - - CWARN("3b: write 10 cfg log records with 8 bytes bufs\n"); - for (i = 0; i < 10; i++) { - struct llog_rec_hdr hdr; - char buf[8]; - - hdr.lrh_len = 8; - hdr.lrh_type = OBD_CFG_REC; - memset(buf, 0, sizeof(buf)); - rc = llog_write(env, llh, &hdr, NULL, 0, buf, -1); - if (rc < 0) { - CERROR("3b: write 10 records failed at #%d: %d\n", - i + 1, rc); - return rc; - } - num_recs++; - } - - rc = verify_handle("3b", llh, num_recs); - if (rc) - return rc; - - CWARN("3c: write 1000 more log records\n"); - for (i = 0; i < 1000; i++) { - rc = llog_write(env, llh, &lgr.lgr_hdr, NULL, 0, NULL, -1); - if (rc < 0) { - CERROR("3c: write 1000 records failed at #%d: %d\n", - i + 1, rc); - return rc; - } - num_recs++; - } - - rc = verify_handle("3c", llh, num_recs); - if (rc) - return rc; - - CWARN("3d: write log more than BITMAP_SIZE, return -ENOSPC\n"); - for (i = 0; i < LLOG_BITMAP_SIZE(llh->lgh_hdr) + 1; i++) { - struct llog_rec_hdr hdr; - char buf_even[24]; - char buf_odd[32]; - - memset(buf_odd, 0, sizeof(buf_odd)); - memset(buf_even, 0, sizeof(buf_even)); - if ((i % 2) == 0) { - hdr.lrh_len = 24; - hdr.lrh_type = OBD_CFG_REC; - rc = llog_write(env, llh, &hdr, NULL, 0, buf_even, -1); - } else { - hdr.lrh_len = 32; - hdr.lrh_type = OBD_CFG_REC; - rc = llog_write(env, llh, &hdr, NULL, 0, buf_odd, -1); - } - if (rc == -ENOSPC) { - break; - } else if (rc < 0) { - CERROR("3d: write recs failed at #%d: %d\n", - i + 1, rc); - return rc; - } - num_recs++; - } - if (rc != -ENOSPC) { - CWARN("3d: write record more than BITMAP size!\n"); - return -EINVAL; - } - CWARN("3d: wrote %d more records before end of llog is reached\n", - num_recs); - - rc = verify_handle("3d", llh, num_recs); - - return rc; -} - -/* Test catalogue additions */ -static int llog_test_4(const struct lu_env *env, struct obd_device *obd) -{ - struct llog_handle *cath; - char name[10]; - int rc, rc2, i, buflen; - struct llog_mini_rec lmr; - struct llog_cookie cookie; - struct llog_ctxt *ctxt; - int num_recs = 0; - char *buf; - struct llog_rec_hdr rec; - - ctxt = llog_get_context(obd, LLOG_TEST_ORIG_CTXT); - LASSERT(ctxt); - - lmr.lmr_hdr.lrh_len = lmr.lmr_tail.lrt_len = LLOG_MIN_REC_SIZE; - lmr.lmr_hdr.lrh_type = 0xf00f00; - - sprintf(name, "%x", llog_test_rand + 1); - CWARN("4a: create a catalog log with name: %s\n", name); - rc = llog_open_create(env, ctxt, &cath, NULL, name); - if (rc) { - CERROR("4a: llog_create with name %s failed: %d\n", name, rc); - GOTO(ctxt_release, rc); - } - rc = llog_init_handle(env, cath, LLOG_F_IS_CAT, &uuid); - if (rc) { - CERROR("4a: can't init llog handle: %d\n", rc); - GOTO(out, rc); - } - - num_recs++; - cat_logid = cath->lgh_id; - - CWARN("4b: write 1 record into the catalog\n"); - rc = llog_cat_add(env, cath, &lmr.lmr_hdr, &cookie, NULL); - if (rc != 1) { - CERROR("4b: write 1 catalog record failed at: %d\n", rc); - GOTO(out, rc); - } - num_recs++; - rc = verify_handle("4b", cath, 2); - if (rc) - GOTO(out, rc); - - rc = verify_handle("4b", cath->u.chd.chd_current_log, num_recs); - if (rc) - GOTO(out, rc); - - CWARN("4c: cancel 1 log record\n"); - rc = llog_cat_cancel_records(env, cath, 1, &cookie); - if (rc) { - CERROR("4c: cancel 1 catalog based record failed: %d\n", rc); - GOTO(out, rc); - } - num_recs--; - - rc = verify_handle("4c", cath->u.chd.chd_current_log, num_recs); - if (rc) - GOTO(out, rc); - - CWARN("4d: write %d more log records\n", LLOG_TEST_RECNUM); - for (i = 0; i < LLOG_TEST_RECNUM; i++) { - rc = llog_cat_add(env, cath, &lmr.lmr_hdr, NULL, NULL); - if (rc) { - CERROR("4d: write %d records failed at #%d: %d\n", - LLOG_TEST_RECNUM, i + 1, rc); - GOTO(out, rc); - } - num_recs++; - } - - /* make sure new plain llog appears */ - rc = verify_handle("4d", cath, 3); - if (rc) - GOTO(out, rc); - - CWARN("4e: add 5 large records, one record per block\n"); - buflen = LLOG_CHUNK_SIZE - sizeof(struct llog_rec_hdr) - - sizeof(struct llog_rec_tail); - OBD_ALLOC(buf, buflen); - if (buf == NULL) - GOTO(out, rc = -ENOMEM); - for (i = 0; i < 5; i++) { - rec.lrh_len = buflen; - rec.lrh_type = OBD_CFG_REC; - rc = llog_cat_add(env, cath, &rec, NULL, buf); - if (rc) { - CERROR("4e: write 5 records failed at #%d: %d\n", - i + 1, rc); - GOTO(out_free, rc); - } - num_recs++; - } -out_free: - OBD_FREE(buf, buflen); -out: - CWARN("4f: put newly-created catalog\n"); - rc2 = llog_cat_close(env, cath); - if (rc2) { - CERROR("4: close log %s failed: %d\n", name, rc2); - if (rc == 0) - rc = rc2; - } -ctxt_release: - llog_ctxt_put(ctxt); - return rc; -} - -static int cat_counter; - -static int cat_print_cb(const struct lu_env *env, struct llog_handle *llh, - struct llog_rec_hdr *rec, void *data) -{ - struct llog_logid_rec *lir = (struct llog_logid_rec *)rec; - struct lu_fid fid = {0}; - - if (rec->lrh_type != LLOG_LOGID_MAGIC) { - CERROR("invalid record in catalog\n"); - return -EINVAL; - } - - logid_to_fid(&lir->lid_id, &fid); - - CWARN("seeing record at index %d - "DFID" in log "DFID"\n", - rec->lrh_index, PFID(&fid), - PFID(lu_object_fid(&llh->lgh_obj->do_lu))); - - cat_counter++; - - return 0; -} - -static int plain_counter; - -static int plain_print_cb(const struct lu_env *env, struct llog_handle *llh, - struct llog_rec_hdr *rec, void *data) -{ - struct lu_fid fid = {0}; - - if (!(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN)) { - CERROR("log is not plain\n"); - return -EINVAL; - } - - logid_to_fid(&llh->lgh_id, &fid); - - CDEBUG(D_INFO, "seeing record at index %d in log "DFID"\n", - rec->lrh_index, PFID(&fid)); - - plain_counter++; - - return 0; -} - -static int cancel_count; - -static int llog_cancel_rec_cb(const struct lu_env *env, - struct llog_handle *llh, - struct llog_rec_hdr *rec, void *data) -{ - struct llog_cookie cookie; - - if (!(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN)) { - CERROR("log is not plain\n"); - return -EINVAL; - } - - cookie.lgc_lgl = llh->lgh_id; - cookie.lgc_index = rec->lrh_index; - - llog_cat_cancel_records(env, llh->u.phd.phd_cat_handle, 1, &cookie); - cancel_count++; - if (cancel_count == LLOG_TEST_RECNUM) - return -LLOG_EEMPTY; - return 0; -} - -/* Test log and catalogue processing */ -static int llog_test_5(const struct lu_env *env, struct obd_device *obd) -{ - struct llog_handle *llh = NULL; - char name[10]; - int rc, rc2; - struct llog_mini_rec lmr; - struct llog_ctxt *ctxt; - - ctxt = llog_get_context(obd, LLOG_TEST_ORIG_CTXT); - LASSERT(ctxt); - - lmr.lmr_hdr.lrh_len = lmr.lmr_tail.lrt_len = LLOG_MIN_REC_SIZE; - lmr.lmr_hdr.lrh_type = 0xf00f00; - - CWARN("5a: re-open catalog by id\n"); - rc = llog_open(env, ctxt, &llh, &cat_logid, NULL, LLOG_OPEN_EXISTS); - if (rc) { - CERROR("5a: llog_create with logid failed: %d\n", rc); - GOTO(out_put, rc); - } - - rc = llog_init_handle(env, llh, LLOG_F_IS_CAT, &uuid); - if (rc) { - CERROR("5a: can't init llog handle: %d\n", rc); - GOTO(out, rc); - } - - CWARN("5b: print the catalog entries.. we expect 2\n"); - cat_counter = 0; - rc = llog_process(env, llh, cat_print_cb, "test 5", NULL); - if (rc) { - CERROR("5b: process with cat_print_cb failed: %d\n", rc); - GOTO(out, rc); - } - if (cat_counter != 2) { - CERROR("5b: %d entries in catalog\n", cat_counter); - GOTO(out, rc = -EINVAL); - } - - CWARN("5c: Cancel %d records, see one log zapped\n", LLOG_TEST_RECNUM); - cancel_count = 0; - rc = llog_cat_process(env, llh, llog_cancel_rec_cb, "foobar", 0, 0); - if (rc != -LLOG_EEMPTY) { - CERROR("5c: process with cat_cancel_cb failed: %d\n", rc); - GOTO(out, rc); - } - - CWARN("5c: print the catalog entries.. we expect 1\n"); - cat_counter = 0; - rc = llog_process(env, llh, cat_print_cb, "test 5", NULL); - if (rc) { - CERROR("5c: process with cat_print_cb failed: %d\n", rc); - GOTO(out, rc); - } - if (cat_counter != 1) { - CERROR("5c: %d entries in catalog\n", cat_counter); - GOTO(out, rc = -EINVAL); - } - - CWARN("5d: add 1 record to the log with many canceled empty pages\n"); - rc = llog_cat_add(env, llh, &lmr.lmr_hdr, NULL, NULL); - if (rc) { - CERROR("5d: add record to the log with many canceled empty " - "pages failed\n"); - GOTO(out, rc); - } - - CWARN("5e: print plain log entries.. expect 6\n"); - plain_counter = 0; - rc = llog_cat_process(env, llh, plain_print_cb, "foobar", 0, 0); - if (rc) { - CERROR("5e: process with plain_print_cb failed: %d\n", rc); - GOTO(out, rc); - } - if (plain_counter != 6) { - CERROR("5e: found %d records\n", plain_counter); - GOTO(out, rc = -EINVAL); - } - - CWARN("5f: print plain log entries reversely.. expect 6\n"); - plain_counter = 0; - rc = llog_cat_reverse_process(env, llh, plain_print_cb, "foobar"); - if (rc) { - CERROR("5f: reversely process with plain_print_cb failed:" - "%d\n", rc); - GOTO(out, rc); - } - if (plain_counter != 6) { - CERROR("5f: found %d records\n", plain_counter); - GOTO(out, rc = -EINVAL); - } - -out: - CWARN("5g: close re-opened catalog\n"); - rc2 = llog_cat_close(env, llh); - if (rc2) { - CERROR("5g: close log %s failed: %d\n", name, rc2); - if (rc == 0) - rc = rc2; - } -out_put: - llog_ctxt_put(ctxt); - - return rc; -} - -/* Test client api; open log by name and process */ -static int llog_test_6(const struct lu_env *env, struct obd_device *obd, - char *name) -{ - struct obd_device *mgc_obd; - struct llog_ctxt *ctxt; - struct obd_uuid *mgs_uuid; - struct obd_export *exp; - struct obd_uuid uuid = { "LLOG_TEST6_UUID" }; - struct llog_handle *llh = NULL; - struct llog_ctxt *nctxt; - int rc, rc2; - - ctxt = llog_get_context(obd, LLOG_TEST_ORIG_CTXT); - LASSERT(ctxt); - mgs_uuid = &ctxt->loc_exp->exp_obd->obd_uuid; - - CWARN("6a: re-open log %s using client API\n", name); - mgc_obd = class_find_client_obd(mgs_uuid, LUSTRE_MGC_NAME, NULL); - if (mgc_obd == NULL) { - CERROR("6a: no MGC devices connected to %s found.\n", - mgs_uuid->uuid); - GOTO(ctxt_release, rc = -ENOENT); - } - - rc = obd_connect(NULL, &exp, mgc_obd, &uuid, - NULL /* obd_connect_data */, NULL); - if (rc != -EALREADY) { - CERROR("6a: connect on connected MGC (%s) failed to return" - " -EALREADY", mgc_obd->obd_name); - if (rc == 0) - obd_disconnect(exp); - GOTO(ctxt_release, rc = -EINVAL); - } - - nctxt = llog_get_context(mgc_obd, LLOG_CONFIG_REPL_CTXT); - rc = llog_open(env, nctxt, &llh, NULL, name, LLOG_OPEN_EXISTS); - if (rc) { - CERROR("6a: llog_open failed %d\n", rc); - GOTO(nctxt_put, rc); - } - - rc = llog_init_handle(env, llh, LLOG_F_IS_PLAIN, NULL); - if (rc) { - CERROR("6a: llog_init_handle failed %d\n", rc); - GOTO(parse_out, rc); - } - - plain_counter = 1; /* llog header is first record */ - CWARN("6b: process log %s using client API\n", name); - rc = llog_process(env, llh, plain_print_cb, NULL, NULL); - if (rc) - CERROR("6b: llog_process failed %d\n", rc); - CWARN("6b: processed %d records\n", plain_counter); - - rc = verify_handle("6b", llh, plain_counter); - if (rc) - GOTO(parse_out, rc); - - plain_counter = 1; /* llog header is first record */ - CWARN("6c: process log %s reversely using client API\n", name); - rc = llog_reverse_process(env, llh, plain_print_cb, NULL, NULL); - if (rc) - CERROR("6c: llog_reverse_process failed %d\n", rc); - CWARN("6c: processed %d records\n", plain_counter); - - rc = verify_handle("6c", llh, plain_counter); - if (rc) - GOTO(parse_out, rc); - -parse_out: - rc2 = llog_close(env, llh); - if (rc2) { - CERROR("6: llog_close failed: rc = %d\n", rc2); - if (rc == 0) - rc = rc2; - } -nctxt_put: - llog_ctxt_put(nctxt); -ctxt_release: - llog_ctxt_put(ctxt); - return rc; -} - -static union { - struct llog_rec_hdr lrh; /* common header */ - struct llog_logid_rec llr; /* LLOG_LOGID_MAGIC */ - struct llog_unlink64_rec lur; /* MDS_UNLINK64_REC */ - struct llog_setattr64_rec lsr64; /* MDS_SETATTR64_REC */ - struct llog_size_change_rec lscr; /* OST_SZ_REC */ - struct llog_changelog_rec lcr; /* CHANGELOG_REC */ - struct llog_changelog_user_rec lcur; /* CHANGELOG_USER_REC */ - struct llog_gen_rec lgr; /* LLOG_GEN_REC */ -} llog_records; - -static int test_7_print_cb(const struct lu_env *env, struct llog_handle *llh, - struct llog_rec_hdr *rec, void *data) -{ - struct lu_fid fid = {0}; - - logid_to_fid(&llh->lgh_id, &fid); - - CDEBUG(D_OTHER, "record type %#x at index %d in log "DFID"\n", - rec->lrh_type, rec->lrh_index, PFID(&fid)); - - plain_counter++; - return 0; -} - -static int test_7_cancel_cb(const struct lu_env *env, struct llog_handle *llh, - struct llog_rec_hdr *rec, void *data) -{ - plain_counter++; - /* test LLOG_DEL_RECORD is working */ - return LLOG_DEL_RECORD; -} - -static int llog_test_7_sub(const struct lu_env *env, struct llog_ctxt *ctxt) -{ - struct llog_handle *llh; - int rc = 0, i, process_count; - int num_recs = 0; - - rc = llog_open_create(env, ctxt, &llh, NULL, NULL); - if (rc) { - CERROR("7_sub: create log failed\n"); - return rc; - } - - rc = llog_init_handle(env, llh, - LLOG_F_IS_PLAIN | LLOG_F_ZAP_WHEN_EMPTY, - &uuid); - if (rc) { - CERROR("7_sub: can't init llog handle: %d\n", rc); - GOTO(out_close, rc); - } - for (i = 0; i < LLOG_BITMAP_SIZE(llh->lgh_hdr); i++) { - rc = llog_write(env, llh, &llog_records.lrh, NULL, 0, - NULL, -1); - if (rc == -ENOSPC) { - break; - } else if (rc < 0) { - CERROR("7_sub: write recs failed at #%d: %d\n", - i + 1, rc); - GOTO(out_close, rc); - } - num_recs++; - } - if (rc != -ENOSPC) { - CWARN("7_sub: write record more than BITMAP size!\n"); - GOTO(out_close, rc = -EINVAL); - } - - rc = verify_handle("7_sub", llh, num_recs + 1); - if (rc) { - CERROR("7_sub: verify handle failed: %d\n", rc); - GOTO(out_close, rc); - } - if (num_recs < LLOG_BITMAP_SIZE(llh->lgh_hdr) - 1) - CWARN("7_sub: records are not aligned, written %d from %u\n", - num_recs, LLOG_BITMAP_SIZE(llh->lgh_hdr) - 1); - - plain_counter = 0; - rc = llog_process(env, llh, test_7_print_cb, "test 7", NULL); - if (rc) { - CERROR("7_sub: llog process failed: %d\n", rc); - GOTO(out_close, rc); - } - process_count = plain_counter; - if (process_count != num_recs) { - CERROR("7_sub: processed %d records from %d total\n", - process_count, num_recs); - GOTO(out_close, rc = -EINVAL); - } - - plain_counter = 0; - rc = llog_reverse_process(env, llh, test_7_cancel_cb, "test 7", NULL); - if (rc) { - CERROR("7_sub: reverse llog process failed: %d\n", rc); - GOTO(out_close, rc); - } - if (process_count != plain_counter) { - CERROR("7_sub: Reverse/direct processing found different" - "number of records: %d/%d\n", - plain_counter, process_count); - GOTO(out_close, rc = -EINVAL); - } - if (llog_exist(llh)) { - CERROR("7_sub: llog exists but should be zapped\n"); - GOTO(out_close, rc = -EEXIST); - } - - rc = verify_handle("7_sub", llh, 1); -out_close: - if (rc) - llog_destroy(env, llh); - llog_close(env, llh); - return rc; -} - -/* Test all llog records writing and processing */ -static int llog_test_7(const struct lu_env *env, struct obd_device *obd) -{ - struct llog_ctxt *ctxt; - int rc; - - ctxt = llog_get_context(obd, LLOG_TEST_ORIG_CTXT); - - CWARN("7a: test llog_logid_rec\n"); - llog_records.llr.lid_hdr.lrh_len = sizeof(llog_records.llr); - llog_records.llr.lid_tail.lrt_len = sizeof(llog_records.llr); - llog_records.llr.lid_hdr.lrh_type = LLOG_LOGID_MAGIC; - - rc = llog_test_7_sub(env, ctxt); - if (rc) { - CERROR("7a: llog_logid_rec test failed\n"); - GOTO(out, rc); - } - - CWARN("7b: test llog_unlink64_rec\n"); - llog_records.lur.lur_hdr.lrh_len = sizeof(llog_records.lur); - llog_records.lur.lur_tail.lrt_len = sizeof(llog_records.lur); - llog_records.lur.lur_hdr.lrh_type = MDS_UNLINK64_REC; - - rc = llog_test_7_sub(env, ctxt); - if (rc) { - CERROR("7b: llog_unlink_rec test failed\n"); - GOTO(out, rc); - } - - CWARN("7c: test llog_setattr64_rec\n"); - llog_records.lsr64.lsr_hdr.lrh_len = sizeof(llog_records.lsr64); - llog_records.lsr64.lsr_tail.lrt_len = sizeof(llog_records.lsr64); - llog_records.lsr64.lsr_hdr.lrh_type = MDS_SETATTR64_REC; - - rc = llog_test_7_sub(env, ctxt); - if (rc) { - CERROR("7c: llog_setattr64_rec test failed\n"); - GOTO(out, rc); - } - - CWARN("7d: test llog_size_change_rec\n"); - llog_records.lscr.lsc_hdr.lrh_len = sizeof(llog_records.lscr); - llog_records.lscr.lsc_tail.lrt_len = sizeof(llog_records.lscr); - llog_records.lscr.lsc_hdr.lrh_type = OST_SZ_REC; - - rc = llog_test_7_sub(env, ctxt); - if (rc) { - CERROR("7d: llog_size_change_rec test failed\n"); - GOTO(out, rc); - } - - CWARN("7e: test llog_changelog_rec\n"); - llog_records.lcr.cr_hdr.lrh_len = sizeof(llog_records.lcr); - llog_records.lcr.cr_tail.lrt_len = sizeof(llog_records.lcr); - llog_records.lcr.cr_hdr.lrh_type = CHANGELOG_REC; - - rc = llog_test_7_sub(env, ctxt); - if (rc) { - CERROR("7e: llog_changelog_rec test failed\n"); - GOTO(out, rc); - } - - CWARN("7f: test llog_changelog_user_rec\n"); - llog_records.lcur.cur_hdr.lrh_len = sizeof(llog_records.lcur); - llog_records.lcur.cur_tail.lrt_len = sizeof(llog_records.lcur); - llog_records.lcur.cur_hdr.lrh_type = CHANGELOG_USER_REC; - - rc = llog_test_7_sub(env, ctxt); - if (rc) { - CERROR("7f: llog_changelog_user_rec test failed\n"); - GOTO(out, rc); - } - - CWARN("7g: test llog_gen_rec\n"); - llog_records.lgr.lgr_hdr.lrh_len = sizeof(llog_records.lgr); - llog_records.lgr.lgr_tail.lrt_len = sizeof(llog_records.lgr); - llog_records.lgr.lgr_hdr.lrh_type = LLOG_GEN_REC; - - rc = llog_test_7_sub(env, ctxt); - if (rc) { - CERROR("7g: llog_size_change_rec test failed\n"); - GOTO(out, rc); - } -out: - llog_ctxt_put(ctxt); - return rc; -} - -/* ------------------------------------------------------------------------- - * Tests above, boring obd functions below - * ------------------------------------------------------------------------- */ -static int llog_run_tests(const struct lu_env *env, struct obd_device *obd) -{ - struct llog_handle *llh = NULL; - struct llog_ctxt *ctxt; - int rc, err; - char name[10]; - - ctxt = llog_get_context(obd, LLOG_TEST_ORIG_CTXT); - LASSERT(ctxt); - - sprintf(name, "%x", llog_test_rand); - - rc = llog_test_1(env, obd, name); - if (rc) - GOTO(cleanup_ctxt, rc); - - rc = llog_test_2(env, obd, name, &llh); - if (rc) - GOTO(cleanup_ctxt, rc); - - rc = llog_test_3(env, obd, llh); - if (rc) - GOTO(cleanup, rc); - - rc = llog_test_4(env, obd); - if (rc) - GOTO(cleanup, rc); - - rc = llog_test_5(env, obd); - if (rc) - GOTO(cleanup, rc); - - rc = llog_test_6(env, obd, name); - if (rc) - GOTO(cleanup, rc); - - rc = llog_test_7(env, obd); - if (rc) - GOTO(cleanup, rc); - -cleanup: - err = llog_destroy(env, llh); - if (err) - CERROR("cleanup: llog_destroy failed: %d\n", err); - llog_close(env, llh); - if (rc == 0) - rc = err; -cleanup_ctxt: - llog_ctxt_put(ctxt); - return rc; -} - -#if defined (CONFIG_PROC_FS) -static struct lprocfs_vars lprocfs_llog_test_obd_vars[] = { { NULL } }; -static struct lprocfs_vars lprocfs_llog_test_module_vars[] = { { NULL } }; -static void lprocfs_llog_test_init_vars(struct lprocfs_static_vars *lvars) -{ - lvars->module_vars = lprocfs_llog_test_module_vars; - lvars->obd_vars = lprocfs_llog_test_obd_vars; -} -#else -static void lprocfs_llog_test_init_vars(struct lprocfs_static_vars *lvars) -{ -} -#endif - -static int llog_test_cleanup(struct obd_device *obd) -{ - struct obd_device *tgt; - struct lu_env env; - int rc; - - rc = lu_env_init(&env, LCT_LOCAL | LCT_MG_THREAD); - if (rc) - return rc; - - tgt = obd->obd_lvfs_ctxt.dt->dd_lu_dev.ld_obd; - rc = llog_cleanup(&env, llog_get_context(tgt, LLOG_TEST_ORIG_CTXT)); - if (rc) - CERROR("failed to llog_test_llog_finish: %d\n", rc); - lu_env_fini(&env); - return rc; -} - -static int llog_test_setup(struct obd_device *obd, struct lustre_cfg *lcfg) -{ - struct obd_device *tgt; - struct llog_ctxt *ctxt; - struct dt_object *o; - struct lu_env env; - struct lu_context test_session; - int rc; - - if (lcfg->lcfg_bufcount < 2) { - CERROR("requires a TARGET OBD name\n"); - return -EINVAL; - } - - if (lcfg->lcfg_buflens[1] < 1) { - CERROR("requires a TARGET OBD name\n"); - return -EINVAL; - } - - /* disk obd */ - tgt = class_name2obd(lustre_cfg_string(lcfg, 1)); - if (!tgt || !tgt->obd_attached || !tgt->obd_set_up) { - CERROR("target device not attached or not set up (%s)\n", - lustre_cfg_string(lcfg, 1)); - return -EINVAL; - } - - rc = lu_env_init(&env, LCT_LOCAL | LCT_MG_THREAD); - if (rc) - return rc; - - rc = lu_context_init(&test_session, LCT_SESSION); - if (rc) - GOTO(cleanup_env, rc); - test_session.lc_thread = (struct ptlrpc_thread *)current; - lu_context_enter(&test_session); - env.le_ses = &test_session; - - CWARN("Setup llog-test device over %s device\n", - lustre_cfg_string(lcfg, 1)); - - OBD_SET_CTXT_MAGIC(&obd->obd_lvfs_ctxt); - obd->obd_lvfs_ctxt.dt = lu2dt_dev(tgt->obd_lu_dev); - - rc = llog_setup(&env, tgt, &tgt->obd_olg, LLOG_TEST_ORIG_CTXT, tgt, - &llog_osd_ops); - if (rc) - GOTO(cleanup_session, rc); - - /* use MGS llog dir for tests */ - ctxt = llog_get_context(tgt, LLOG_CONFIG_ORIG_CTXT); - LASSERT(ctxt); - o = ctxt->loc_dir; - llog_ctxt_put(ctxt); - - ctxt = llog_get_context(tgt, LLOG_TEST_ORIG_CTXT); - LASSERT(ctxt); - ctxt->loc_dir = o; - llog_ctxt_put(ctxt); - - llog_test_rand = cfs_rand(); - - rc = llog_run_tests(&env, tgt); - if (rc) - llog_test_cleanup(obd); -cleanup_session: - lu_context_exit(&test_session); - lu_context_fini(&test_session); -cleanup_env: - lu_env_fini(&env); - return rc; -} - -static struct obd_ops llog_obd_ops = { - .o_owner = THIS_MODULE, - .o_setup = llog_test_setup, - .o_cleanup = llog_test_cleanup, -}; - -static int __init llog_test_init(void) -{ - struct lprocfs_static_vars uninitialized_var(lvars); - - lprocfs_llog_test_init_vars(&lvars); - return class_register_type(&llog_obd_ops, NULL, - lvars.module_vars, "llog_test", NULL); -} - -static void __exit llog_test_exit(void) -{ - class_unregister_type("llog_test"); -} - -MODULE_AUTHOR("Sun Microsystems, Inc. <http://www.lustre.org/>"); -MODULE_DESCRIPTION("llog test module"); -MODULE_LICENSE("GPL"); - -module_init(llog_test_init); -module_exit(llog_test_exit); diff --git a/drivers/staging/lustre/lustre/obdclass/local_storage.c b/drivers/staging/lustre/lustre/obdclass/local_storage.c deleted file mode 100644 index 78190225ac7a..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/local_storage.c +++ /dev/null @@ -1,894 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - - * 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 COPYING file that accompanied this code. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * GPL HEADER END - */ -/* - * Copyright (c) 2012, Intel Corporation. - */ -/* - * lustre/obdclass/local_storage.c - * - * Local storage for file/objects with fid generation. Works on top of OSD. - * - * Author: Mikhail Pershin <mike.pershin@intel.com> - */ - -#define DEBUG_SUBSYSTEM S_CLASS - -#include "local_storage.h" - -/* all initialized local storages on this node are linked on this */ -static LIST_HEAD(ls_list_head); -static DEFINE_MUTEX(ls_list_mutex); - -static int ls_object_init(const struct lu_env *env, struct lu_object *o, - const struct lu_object_conf *unused) -{ - struct ls_device *ls; - struct lu_object *below; - struct lu_device *under; - - ls = container_of0(o->lo_dev, struct ls_device, ls_top_dev.dd_lu_dev); - under = &ls->ls_osd->dd_lu_dev; - below = under->ld_ops->ldo_object_alloc(env, o->lo_header, under); - if (below == NULL) - return -ENOMEM; - - lu_object_add(o, below); - - return 0; -} - -static void ls_object_free(const struct lu_env *env, struct lu_object *o) -{ - struct ls_object *obj = lu2ls_obj(o); - struct lu_object_header *h = o->lo_header; - - dt_object_fini(&obj->ls_obj); - lu_object_header_fini(h); - OBD_FREE_PTR(obj); -} - -struct lu_object_operations ls_lu_obj_ops = { - .loo_object_init = ls_object_init, - .loo_object_free = ls_object_free, -}; - -struct lu_object *ls_object_alloc(const struct lu_env *env, - const struct lu_object_header *_h, - struct lu_device *d) -{ - struct lu_object_header *h; - struct ls_object *o; - struct lu_object *l; - - LASSERT(_h == NULL); - - OBD_ALLOC_PTR(o); - if (o != NULL) { - l = &o->ls_obj.do_lu; - h = &o->ls_header; - - lu_object_header_init(h); - dt_object_init(&o->ls_obj, h, d); - lu_object_add_top(h, l); - - l->lo_ops = &ls_lu_obj_ops; - - return l; - } else { - return NULL; - } -} - -static struct lu_device_operations ls_lu_dev_ops = { - .ldo_object_alloc = ls_object_alloc -}; - -static struct ls_device *__ls_find_dev(struct dt_device *dev) -{ - struct ls_device *ls, *ret = NULL; - - list_for_each_entry(ls, &ls_list_head, ls_linkage) { - if (ls->ls_osd == dev) { - atomic_inc(&ls->ls_refcount); - ret = ls; - break; - } - } - return ret; -} - -struct ls_device *ls_find_dev(struct dt_device *dev) -{ - struct ls_device *ls; - - mutex_lock(&ls_list_mutex); - ls = __ls_find_dev(dev); - mutex_unlock(&ls_list_mutex); - - return ls; -} - -static struct lu_device_type_operations ls_device_type_ops = { - .ldto_start = NULL, - .ldto_stop = NULL, -}; - -static struct lu_device_type ls_lu_type = { - .ldt_name = "local_storage", - .ldt_ops = &ls_device_type_ops, -}; - -struct ls_device *ls_device_get(struct dt_device *dev) -{ - struct ls_device *ls; - - mutex_lock(&ls_list_mutex); - ls = __ls_find_dev(dev); - if (ls) - GOTO(out_ls, ls); - - /* not found, then create */ - OBD_ALLOC_PTR(ls); - if (ls == NULL) - GOTO(out_ls, ls = ERR_PTR(-ENOMEM)); - - atomic_set(&ls->ls_refcount, 1); - INIT_LIST_HEAD(&ls->ls_los_list); - mutex_init(&ls->ls_los_mutex); - - ls->ls_osd = dev; - - LASSERT(dev->dd_lu_dev.ld_site); - lu_device_init(&ls->ls_top_dev.dd_lu_dev, &ls_lu_type); - ls->ls_top_dev.dd_lu_dev.ld_ops = &ls_lu_dev_ops; - ls->ls_top_dev.dd_lu_dev.ld_site = dev->dd_lu_dev.ld_site; - - /* finally add ls to the list */ - list_add(&ls->ls_linkage, &ls_list_head); -out_ls: - mutex_unlock(&ls_list_mutex); - return ls; -} - -void ls_device_put(const struct lu_env *env, struct ls_device *ls) -{ - LASSERT(env); - if (!atomic_dec_and_test(&ls->ls_refcount)) - return; - - mutex_lock(&ls_list_mutex); - if (atomic_read(&ls->ls_refcount) == 0) { - LASSERT(list_empty(&ls->ls_los_list)); - list_del(&ls->ls_linkage); - lu_site_purge(env, ls->ls_top_dev.dd_lu_dev.ld_site, ~0); - lu_device_fini(&ls->ls_top_dev.dd_lu_dev); - OBD_FREE_PTR(ls); - } - mutex_unlock(&ls_list_mutex); -} - -/** - * local file fid generation - */ -int local_object_fid_generate(const struct lu_env *env, - struct local_oid_storage *los, - struct lu_fid *fid) -{ - LASSERT(los->los_dev); - LASSERT(los->los_obj); - - /* take next OID */ - - /* to make it unique after reboot we store - * the latest generated fid atomically with - * object creation see local_object_create() */ - - mutex_lock(&los->los_id_lock); - fid->f_seq = los->los_seq; - fid->f_oid = ++los->los_last_oid; - fid->f_ver = 0; - mutex_unlock(&los->los_id_lock); - - return 0; -} - -int local_object_declare_create(const struct lu_env *env, - struct local_oid_storage *los, - struct dt_object *o, struct lu_attr *attr, - struct dt_object_format *dof, - struct thandle *th) -{ - struct dt_thread_info *dti = dt_info(env); - int rc; - - /* update fid generation file */ - if (los != NULL) { - LASSERT(dt_object_exists(los->los_obj)); - rc = dt_declare_record_write(env, los->los_obj, - sizeof(struct los_ondisk), 0, th); - if (rc) - return rc; - } - - rc = dt_declare_create(env, o, attr, NULL, dof, th); - if (rc) - return rc; - - dti->dti_lb.lb_buf = NULL; - dti->dti_lb.lb_len = sizeof(dti->dti_lma); - rc = dt_declare_xattr_set(env, o, &dti->dti_lb, XATTR_NAME_LMA, 0, th); - - return rc; -} - -int local_object_create(const struct lu_env *env, - struct local_oid_storage *los, - struct dt_object *o, struct lu_attr *attr, - struct dt_object_format *dof, struct thandle *th) -{ - struct dt_thread_info *dti = dt_info(env); - __le64 lastid; - int rc; - - rc = dt_create(env, o, attr, NULL, dof, th); - if (rc) - return rc; - - if (los == NULL) - return rc; - - LASSERT(los->los_obj); - LASSERT(dt_object_exists(los->los_obj)); - - /* many threads can be updated this, serialize - * them here to avoid the race where one thread - * takes the value first, but writes it last */ - mutex_lock(&los->los_id_lock); - - /* update local oid number on disk so that - * we know the last one used after reboot */ - lastid = cpu_to_le64(los->los_last_oid); - - dti->dti_off = 0; - dti->dti_lb.lb_buf = &lastid; - dti->dti_lb.lb_len = sizeof(lastid); - rc = dt_record_write(env, los->los_obj, &dti->dti_lb, &dti->dti_off, - th); - mutex_unlock(&los->los_id_lock); - - return rc; -} - -/* - * Create local named object (file, directory or index) in parent directory. - */ -struct dt_object *__local_file_create(const struct lu_env *env, - const struct lu_fid *fid, - struct local_oid_storage *los, - struct ls_device *ls, - struct dt_object *parent, - const char *name, struct lu_attr *attr, - struct dt_object_format *dof) -{ - struct dt_thread_info *dti = dt_info(env); - struct dt_object *dto; - struct thandle *th; - int rc; - - dto = ls_locate(env, ls, fid); - if (unlikely(IS_ERR(dto))) - return dto; - - LASSERT(dto != NULL); - if (dt_object_exists(dto)) - GOTO(out, rc = -EEXIST); - - th = dt_trans_create(env, ls->ls_osd); - if (IS_ERR(th)) - GOTO(out, rc = PTR_ERR(th)); - - rc = local_object_declare_create(env, los, dto, attr, dof, th); - if (rc) - GOTO(trans_stop, rc); - - if (dti->dti_dof.dof_type == DFT_DIR) { - dt_declare_ref_add(env, dto, th); - dt_declare_ref_add(env, parent, th); - } - - rc = dt_declare_insert(env, parent, (void *)fid, (void *)name, th); - if (rc) - GOTO(trans_stop, rc); - - rc = dt_trans_start_local(env, ls->ls_osd, th); - if (rc) - GOTO(trans_stop, rc); - - dt_write_lock(env, dto, 0); - if (dt_object_exists(dto)) - GOTO(unlock, rc = 0); - - CDEBUG(D_OTHER, "create new object "DFID"\n", - PFID(lu_object_fid(&dto->do_lu))); - rc = local_object_create(env, los, dto, attr, dof, th); - if (rc) - GOTO(unlock, rc); - LASSERT(dt_object_exists(dto)); - - if (dti->dti_dof.dof_type == DFT_DIR) { - if (!dt_try_as_dir(env, dto)) - GOTO(destroy, rc = -ENOTDIR); - /* Add "." and ".." for newly created dir */ - rc = dt_insert(env, dto, (void *)fid, (void *)".", th, - BYPASS_CAPA, 1); - if (rc) - GOTO(destroy, rc); - dt_ref_add(env, dto, th); - rc = dt_insert(env, dto, (void *)lu_object_fid(&parent->do_lu), - (void *)"..", th, BYPASS_CAPA, 1); - if (rc) - GOTO(destroy, rc); - } - - dt_write_lock(env, parent, 0); - rc = dt_insert(env, parent, (const struct dt_rec *)fid, - (const struct dt_key *)name, th, BYPASS_CAPA, 1); - if (dti->dti_dof.dof_type == DFT_DIR) - dt_ref_add(env, parent, th); - dt_write_unlock(env, parent); - if (rc) - GOTO(destroy, rc); -destroy: - if (rc) - dt_destroy(env, dto, th); -unlock: - dt_write_unlock(env, dto); -trans_stop: - dt_trans_stop(env, ls->ls_osd, th); -out: - if (rc) { - lu_object_put_nocache(env, &dto->do_lu); - dto = ERR_PTR(rc); - } - return dto; -} - -/* - * Look up and create (if it does not exist) a local named file or directory in - * parent directory. - */ -struct dt_object *local_file_find_or_create(const struct lu_env *env, - struct local_oid_storage *los, - struct dt_object *parent, - const char *name, __u32 mode) -{ - struct dt_thread_info *dti = dt_info(env); - struct dt_object *dto; - int rc; - - LASSERT(parent); - - rc = dt_lookup_dir(env, parent, name, &dti->dti_fid); - if (rc == 0) - /* name is found, get the object */ - dto = ls_locate(env, dt2ls_dev(los->los_dev), &dti->dti_fid); - else if (rc != -ENOENT) - dto = ERR_PTR(rc); - else { - rc = local_object_fid_generate(env, los, &dti->dti_fid); - if (rc < 0) { - dto = ERR_PTR(rc); - } else { - /* create the object */ - dti->dti_attr.la_valid = LA_MODE; - dti->dti_attr.la_mode = mode; - dti->dti_dof.dof_type = dt_mode_to_dft(mode & S_IFMT); - dto = __local_file_create(env, &dti->dti_fid, los, - dt2ls_dev(los->los_dev), - parent, name, &dti->dti_attr, - &dti->dti_dof); - } - } - return dto; -} -EXPORT_SYMBOL(local_file_find_or_create); - -struct dt_object *local_file_find_or_create_with_fid(const struct lu_env *env, - struct dt_device *dt, - const struct lu_fid *fid, - struct dt_object *parent, - const char *name, - __u32 mode) -{ - struct dt_thread_info *dti = dt_info(env); - struct dt_object *dto; - int rc; - - LASSERT(parent); - - rc = dt_lookup_dir(env, parent, name, &dti->dti_fid); - if (rc == 0) { - dto = dt_locate(env, dt, &dti->dti_fid); - } else if (rc != -ENOENT) { - dto = ERR_PTR(rc); - } else { - struct ls_device *ls; - - ls = ls_device_get(dt); - if (IS_ERR(ls)) { - dto = ERR_CAST(ls); - } else { - /* create the object */ - dti->dti_attr.la_valid = LA_MODE; - dti->dti_attr.la_mode = mode; - dti->dti_dof.dof_type = dt_mode_to_dft(mode & S_IFMT); - dto = __local_file_create(env, fid, NULL, ls, parent, - name, &dti->dti_attr, - &dti->dti_dof); - /* ls_device_put() will finalize the ls device, we - * have to open the object in other device stack */ - if (!IS_ERR(dto)) { - dti->dti_fid = dto->do_lu.lo_header->loh_fid; - lu_object_put_nocache(env, &dto->do_lu); - dto = dt_locate(env, dt, &dti->dti_fid); - } - ls_device_put(env, ls); - } - } - return dto; -} -EXPORT_SYMBOL(local_file_find_or_create_with_fid); - -/* - * Look up and create (if it does not exist) a local named index file in parent - * directory. - */ -struct dt_object *local_index_find_or_create(const struct lu_env *env, - struct local_oid_storage *los, - struct dt_object *parent, - const char *name, __u32 mode, - const struct dt_index_features *ft) -{ - struct dt_thread_info *dti = dt_info(env); - struct dt_object *dto; - int rc; - - LASSERT(parent); - - rc = dt_lookup_dir(env, parent, name, &dti->dti_fid); - if (rc == 0) { - /* name is found, get the object */ - dto = ls_locate(env, dt2ls_dev(los->los_dev), &dti->dti_fid); - } else if (rc != -ENOENT) { - dto = ERR_PTR(rc); - } else { - rc = local_object_fid_generate(env, los, &dti->dti_fid); - if (rc < 0) { - dto = ERR_PTR(rc); - } else { - /* create the object */ - dti->dti_attr.la_valid = LA_MODE; - dti->dti_attr.la_mode = mode; - dti->dti_dof.dof_type = DFT_INDEX; - dti->dti_dof.u.dof_idx.di_feat = ft; - dto = __local_file_create(env, &dti->dti_fid, los, - dt2ls_dev(los->los_dev), - parent, name, &dti->dti_attr, - &dti->dti_dof); - } - } - return dto; - -} -EXPORT_SYMBOL(local_index_find_or_create); - -struct dt_object * -local_index_find_or_create_with_fid(const struct lu_env *env, - struct dt_device *dt, - const struct lu_fid *fid, - struct dt_object *parent, - const char *name, __u32 mode, - const struct dt_index_features *ft) -{ - struct dt_thread_info *dti = dt_info(env); - struct dt_object *dto; - int rc; - - LASSERT(parent); - - rc = dt_lookup_dir(env, parent, name, &dti->dti_fid); - if (rc == 0) { - /* name is found, get the object */ - if (!lu_fid_eq(fid, &dti->dti_fid)) - dto = ERR_PTR(-EINVAL); - else - dto = dt_locate(env, dt, fid); - } else if (rc != -ENOENT) { - dto = ERR_PTR(rc); - } else { - struct ls_device *ls; - - ls = ls_device_get(dt); - if (IS_ERR(ls)) { - dto = ERR_CAST(ls); - } else { - /* create the object */ - dti->dti_attr.la_valid = LA_MODE; - dti->dti_attr.la_mode = mode; - dti->dti_dof.dof_type = DFT_INDEX; - dti->dti_dof.u.dof_idx.di_feat = ft; - dto = __local_file_create(env, fid, NULL, ls, parent, - name, &dti->dti_attr, - &dti->dti_dof); - /* ls_device_put() will finalize the ls device, we - * have to open the object in other device stack */ - if (!IS_ERR(dto)) { - dti->dti_fid = dto->do_lu.lo_header->loh_fid; - lu_object_put_nocache(env, &dto->do_lu); - dto = dt_locate(env, dt, &dti->dti_fid); - } - ls_device_put(env, ls); - } - } - return dto; -} -EXPORT_SYMBOL(local_index_find_or_create_with_fid); - -static int local_object_declare_unlink(const struct lu_env *env, - struct dt_device *dt, - struct dt_object *p, - struct dt_object *c, const char *name, - struct thandle *th) -{ - int rc; - - rc = dt_declare_delete(env, p, (const struct dt_key *)name, th); - if (rc < 0) - return rc; - - rc = dt_declare_ref_del(env, c, th); - if (rc < 0) - return rc; - - return dt_declare_destroy(env, c, th); -} - -int local_object_unlink(const struct lu_env *env, struct dt_device *dt, - struct dt_object *parent, const char *name) -{ - struct dt_thread_info *dti = dt_info(env); - struct dt_object *dto; - struct thandle *th; - int rc; - - rc = dt_lookup_dir(env, parent, name, &dti->dti_fid); - if (rc == -ENOENT) - return 0; - else if (rc < 0) - return rc; - - dto = dt_locate(env, dt, &dti->dti_fid); - if (unlikely(IS_ERR(dto))) - return PTR_ERR(dto); - - th = dt_trans_create(env, dt); - if (IS_ERR(th)) - GOTO(out, rc = PTR_ERR(th)); - - rc = local_object_declare_unlink(env, dt, parent, dto, name, th); - if (rc < 0) - GOTO(stop, rc); - - rc = dt_trans_start_local(env, dt, th); - if (rc < 0) - GOTO(stop, rc); - - dt_write_lock(env, dto, 0); - rc = dt_delete(env, parent, (struct dt_key *)name, th, BYPASS_CAPA); - if (rc < 0) - GOTO(unlock, rc); - - rc = dt_ref_del(env, dto, th); - if (rc < 0) { - rc = dt_insert(env, parent, - (const struct dt_rec *)&dti->dti_fid, - (const struct dt_key *)name, th, BYPASS_CAPA, 1); - GOTO(unlock, rc); - } - - rc = dt_destroy(env, dto, th); -unlock: - dt_write_unlock(env, dto); -stop: - dt_trans_stop(env, dt, th); -out: - lu_object_put_nocache(env, &dto->do_lu); - return rc; -} -EXPORT_SYMBOL(local_object_unlink); - -struct local_oid_storage *dt_los_find(struct ls_device *ls, __u64 seq) -{ - struct local_oid_storage *los, *ret = NULL; - - list_for_each_entry(los, &ls->ls_los_list, los_list) { - if (los->los_seq == seq) { - atomic_inc(&los->los_refcount); - ret = los; - break; - } - } - return ret; -} - -void dt_los_put(struct local_oid_storage *los) -{ - if (atomic_dec_and_test(&los->los_refcount)) - /* should never happen, only local_oid_storage_fini should - * drop refcount to zero */ - LBUG(); - return; -} - -/* after Lustre 2.3 release there may be old file to store last generated FID - * If such file exists then we have to read its content - */ -int lastid_compat_check(const struct lu_env *env, struct dt_device *dev, - __u64 lastid_seq, __u32 *first_oid, struct ls_device *ls) -{ - struct dt_thread_info *dti = dt_info(env); - struct dt_object *root = NULL; - struct los_ondisk losd; - struct dt_object *o = NULL; - int rc = 0; - - rc = dt_root_get(env, dev, &dti->dti_fid); - if (rc) - return rc; - - root = ls_locate(env, ls, &dti->dti_fid); - if (IS_ERR(root)) - return PTR_ERR(root); - - /* find old last_id file */ - snprintf(dti->dti_buf, sizeof(dti->dti_buf), "seq-%#llx-lastid", - lastid_seq); - rc = dt_lookup_dir(env, root, dti->dti_buf, &dti->dti_fid); - lu_object_put_nocache(env, &root->do_lu); - if (rc == -ENOENT) { - /* old llog lastid accessed by FID only */ - if (lastid_seq != FID_SEQ_LLOG) - return 0; - dti->dti_fid.f_seq = FID_SEQ_LLOG; - dti->dti_fid.f_oid = 1; - dti->dti_fid.f_ver = 0; - o = ls_locate(env, ls, &dti->dti_fid); - if (IS_ERR(o)) - return PTR_ERR(o); - - if (!dt_object_exists(o)) { - lu_object_put_nocache(env, &o->do_lu); - return 0; - } - CDEBUG(D_INFO, "Found old llog lastid file\n"); - } else if (rc < 0) { - return rc; - } else { - CDEBUG(D_INFO, "Found old lastid file for sequence %#llx\n", - lastid_seq); - o = ls_locate(env, ls, &dti->dti_fid); - if (IS_ERR(o)) - return PTR_ERR(o); - } - /* let's read seq-NNNNNN-lastid file value */ - LASSERT(dt_object_exists(o)); - dti->dti_off = 0; - dti->dti_lb.lb_buf = &losd; - dti->dti_lb.lb_len = sizeof(losd); - dt_read_lock(env, o, 0); - rc = dt_record_read(env, o, &dti->dti_lb, &dti->dti_off); - dt_read_unlock(env, o); - lu_object_put_nocache(env, &o->do_lu); - if (rc == 0 && le32_to_cpu(losd.lso_magic) != LOS_MAGIC) { - CERROR("%s: wrong content of seq-%#llx-lastid file, magic %x\n", - o->do_lu.lo_dev->ld_obd->obd_name, lastid_seq, - le32_to_cpu(losd.lso_magic)); - return -EINVAL; - } else if (rc < 0) { - CERROR("%s: failed to read seq-%#llx-lastid: rc = %d\n", - o->do_lu.lo_dev->ld_obd->obd_name, lastid_seq, rc); - return rc; - } - *first_oid = le32_to_cpu(losd.lso_next_oid); - return rc; -} - -/** - * Initialize local OID storage for required sequence. - * That may be needed for services that uses local files and requires - * dynamic OID allocation for them. - * - * Per each sequence we have an object with 'first_fid' identificator - * containing the counter for OIDs of locally created files with that - * sequence. - * - * It is used now by llog subsystem and MGS for NID tables - * - * Function gets first_fid to create counter object. - * All dynamic fids will be generated with the same sequence and incremented - * OIDs - * - * Returned local_oid_storage is in-memory representation of OID storage - */ -int local_oid_storage_init(const struct lu_env *env, struct dt_device *dev, - const struct lu_fid *first_fid, - struct local_oid_storage **los) -{ - struct dt_thread_info *dti = dt_info(env); - struct ls_device *ls; - obd_id lastid; - struct dt_object *o = NULL; - struct thandle *th; - __u32 first_oid = fid_oid(first_fid); - int rc = 0; - - ls = ls_device_get(dev); - if (IS_ERR(ls)) - return PTR_ERR(ls); - - mutex_lock(&ls->ls_los_mutex); - *los = dt_los_find(ls, fid_seq(first_fid)); - if (*los != NULL) - GOTO(out, rc = 0); - - /* not found, then create */ - OBD_ALLOC_PTR(*los); - if (*los == NULL) - GOTO(out, rc = -ENOMEM); - - atomic_set(&(*los)->los_refcount, 1); - mutex_init(&(*los)->los_id_lock); - (*los)->los_dev = &ls->ls_top_dev; - atomic_inc(&ls->ls_refcount); - list_add(&(*los)->los_list, &ls->ls_los_list); - - /* Use {seq, 0, 0} to create the LAST_ID file for every - * sequence. OIDs start at LUSTRE_FID_INIT_OID. - */ - dti->dti_fid.f_seq = fid_seq(first_fid); - dti->dti_fid.f_oid = LUSTRE_FID_LASTID_OID; - dti->dti_fid.f_ver = 0; - o = ls_locate(env, ls, &dti->dti_fid); - if (IS_ERR(o)) - GOTO(out_los, rc = PTR_ERR(o)); - - if (!dt_object_exists(o)) { - rc = lastid_compat_check(env, dev, fid_seq(first_fid), - &first_oid, ls); - if (rc < 0) - GOTO(out_los, rc); - - th = dt_trans_create(env, dev); - if (IS_ERR(th)) - GOTO(out_los, rc = PTR_ERR(th)); - - dti->dti_attr.la_valid = LA_MODE | LA_TYPE; - dti->dti_attr.la_mode = S_IFREG | S_IRUGO | S_IWUSR; - dti->dti_dof.dof_type = dt_mode_to_dft(S_IFREG); - - rc = dt_declare_create(env, o, &dti->dti_attr, NULL, - &dti->dti_dof, th); - if (rc) - GOTO(out_trans, rc); - - rc = dt_declare_record_write(env, o, sizeof(lastid), 0, th); - if (rc) - GOTO(out_trans, rc); - - rc = dt_trans_start_local(env, dev, th); - if (rc) - GOTO(out_trans, rc); - - dt_write_lock(env, o, 0); - if (dt_object_exists(o)) - GOTO(out_lock, rc = 0); - - rc = dt_create(env, o, &dti->dti_attr, NULL, &dti->dti_dof, - th); - if (rc) - GOTO(out_lock, rc); - - lastid = cpu_to_le64(first_oid); - - dti->dti_off = 0; - dti->dti_lb.lb_buf = &lastid; - dti->dti_lb.lb_len = sizeof(lastid); - rc = dt_record_write(env, o, &dti->dti_lb, &dti->dti_off, th); - if (rc) - GOTO(out_lock, rc); -out_lock: - dt_write_unlock(env, o); -out_trans: - dt_trans_stop(env, dev, th); - } else { - dti->dti_off = 0; - dti->dti_lb.lb_buf = &lastid; - dti->dti_lb.lb_len = sizeof(lastid); - dt_read_lock(env, o, 0); - rc = dt_record_read(env, o, &dti->dti_lb, &dti->dti_off); - dt_read_unlock(env, o); - if (rc == 0 && le64_to_cpu(lastid) > OBIF_MAX_OID) { - CERROR("%s: bad oid %llu is read from LAST_ID\n", - o->do_lu.lo_dev->ld_obd->obd_name, - le64_to_cpu(lastid)); - rc = -EINVAL; - } - } -out_los: - if (rc != 0) { - list_del(&(*los)->los_list); - atomic_dec(&ls->ls_refcount); - OBD_FREE_PTR(*los); - *los = NULL; - if (o != NULL && !IS_ERR(o)) - lu_object_put_nocache(env, &o->do_lu); - } else { - (*los)->los_seq = fid_seq(first_fid); - (*los)->los_last_oid = le64_to_cpu(lastid); - (*los)->los_obj = o; - /* Read value should not be less than initial one - * but possible after upgrade from older fs. - * In this case just switch to the first_oid in memory and - * it will be updated on disk with first object generated */ - if ((*los)->los_last_oid < first_oid) - (*los)->los_last_oid = first_oid; - } -out: - mutex_unlock(&ls->ls_los_mutex); - ls_device_put(env, ls); - return rc; -} -EXPORT_SYMBOL(local_oid_storage_init); - -void local_oid_storage_fini(const struct lu_env *env, - struct local_oid_storage *los) -{ - struct ls_device *ls; - - if (!atomic_dec_and_test(&los->los_refcount)) - return; - - LASSERT(env); - LASSERT(los->los_dev); - ls = dt2ls_dev(los->los_dev); - - mutex_lock(&ls->ls_los_mutex); - if (atomic_read(&los->los_refcount) == 0) { - if (los->los_obj) - lu_object_put_nocache(env, &los->los_obj->do_lu); - list_del(&los->los_list); - OBD_FREE_PTR(los); - } - mutex_unlock(&ls->ls_los_mutex); - ls_device_put(env, ls); -} -EXPORT_SYMBOL(local_oid_storage_fini); diff --git a/drivers/staging/lustre/lustre/obdclass/local_storage.h b/drivers/staging/lustre/lustre/obdclass/local_storage.h deleted file mode 100644 index 0b9ad33d1152..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/local_storage.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - - * 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 COPYING file that accompanied this code. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * GPL HEADER END - */ -/* - * Copyright (c) 2012, Intel Corporation. - */ -/* - * lustre/obdclass/local_storage.c - * - * Local storage for file/objects with fid generation. Works on top of OSD. - * - * Author: Mikhail Pershin <mike.pershin@intel.com> - */ -#ifndef __LOCAL_STORAGE_H -#define __LOCAL_STORAGE_H - -#include "../include/dt_object.h" -#include "../include/obd.h" -#include "../include/lustre_fid.h" -#include "../include/lustre_disk.h" - -struct ls_device { - struct dt_device ls_top_dev; - /* all initialized ls_devices on this node linked by this */ - struct list_head ls_linkage; - /* how many handle's reference this local storage */ - atomic_t ls_refcount; - /* underlaying OSD device */ - struct dt_device *ls_osd; - /* list of all local OID storages */ - struct list_head ls_los_list; - struct mutex ls_los_mutex; -}; - -static inline struct ls_device *dt2ls_dev(struct dt_device *d) -{ - return container_of0(d, struct ls_device, ls_top_dev); -} - -struct ls_object { - struct lu_object_header ls_header; - struct dt_object ls_obj; -}; - -static inline struct ls_object *lu2ls_obj(struct lu_object *o) -{ - return container_of0(o, struct ls_object, ls_obj.do_lu); -} - -static inline struct dt_object *ls_locate(const struct lu_env *env, - struct ls_device *ls, - const struct lu_fid *fid) -{ - return dt_locate_at(env, ls->ls_osd, fid, &ls->ls_top_dev.dd_lu_dev); -} - -struct ls_device *ls_device_get(struct dt_device *dev); -void ls_device_put(const struct lu_env *env, struct ls_device *ls); -struct local_oid_storage *dt_los_find(struct ls_device *ls, __u64 seq); -void dt_los_put(struct local_oid_storage *los); - -/* Lustre 2.3 on-disk structure describing local object OIDs storage - * the structure to be used with any sequence managed by - * local object library. - * Obsoleted since 2.4 but is kept for compatibility reasons, - * see lastid_compat_check() in obdclass/local_storage.c */ -struct los_ondisk { - __u32 lso_magic; - __u32 lso_next_oid; -}; - -#define LOS_MAGIC 0xdecafbee -#endif diff --git a/drivers/staging/lustre/lustre/lvfs/lvfs_lib.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_counters.c index cfc4f896b127..c49dfe541925 100644 --- a/drivers/staging/lustre/lustre/lvfs/lvfs_lib.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_counters.c @@ -15,11 +15,8 @@ * * 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. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,21 +24,25 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2012, 2013, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ * Lustre is a trademark of Sun Microsystems, Inc. * - * lustre/lvfs/lvfs_lib.c + * lustre/obdclass/lprocfs_counters.c * - * Lustre filesystem abstraction routines + * Lustre lprocfs counter routines * - * Author: Andreas Dilger <adilger@clusterfs.com> + * Author: Andreas Dilger <andreas.dilger@intel.com> */ + #include <linux/module.h> -#include "../include/lustre_lib.h" #include "../include/lprocfs_status.h" +#include "../include/obd_support.h" + +struct lprocfs_stats *obd_memory = NULL; +EXPORT_SYMBOL(obd_memory); void lprocfs_counter_add(struct lprocfs_stats *stats, int idx, long amount) { @@ -53,6 +54,9 @@ void lprocfs_counter_add(struct lprocfs_stats *stats, int idx, long amount) if (stats == NULL) return; + LASSERTF(0 <= idx && idx < stats->ls_num, + "idx %d, ls_num %hu\n", idx, stats->ls_num); + /* With per-client stats, statistics are allocated only for * single CPU area, so the smp_id should be 0 always. */ smp_id = lprocfs_stats_lock(stats, LPROCFS_GET_SMP_ID, &flags); @@ -101,6 +105,9 @@ void lprocfs_counter_sub(struct lprocfs_stats *stats, int idx, long amount) if (stats == NULL) return; + LASSERTF(0 <= idx && idx < stats->ls_num, + "idx %d, ls_num %hu\n", idx, stats->ls_num); + /* With per-client stats, statistics are allocated only for * single CPU area, so the smp_id should be 0 always. */ smp_id = lprocfs_stats_lock(stats, LPROCFS_GET_SMP_ID, &flags); @@ -130,41 +137,3 @@ void lprocfs_counter_sub(struct lprocfs_stats *stats, int idx, long amount) lprocfs_stats_unlock(stats, LPROCFS_GET_SMP_ID, &flags); } EXPORT_SYMBOL(lprocfs_counter_sub); - -int lprocfs_stats_alloc_one(struct lprocfs_stats *stats, unsigned int cpuid) -{ - struct lprocfs_counter *cntr; - unsigned int percpusize; - int rc = -ENOMEM; - unsigned long flags = 0; - int i; - - LASSERT(stats->ls_percpu[cpuid] == NULL); - LASSERT((stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU) == 0); - - percpusize = lprocfs_stats_counter_size(stats); - LIBCFS_ALLOC_ATOMIC(stats->ls_percpu[cpuid], percpusize); - if (stats->ls_percpu[cpuid] != NULL) { - rc = 0; - if (unlikely(stats->ls_biggest_alloc_num <= cpuid)) { - if (stats->ls_flags & LPROCFS_STATS_FLAG_IRQ_SAFE) - spin_lock_irqsave(&stats->ls_lock, flags); - else - spin_lock(&stats->ls_lock); - if (stats->ls_biggest_alloc_num <= cpuid) - stats->ls_biggest_alloc_num = cpuid + 1; - if (stats->ls_flags & LPROCFS_STATS_FLAG_IRQ_SAFE) - spin_unlock_irqrestore(&stats->ls_lock, flags); - else - spin_unlock(&stats->ls_lock); - } - /* initialize the ls_percpu[cpuid] non-zero counter */ - for (i = 0; i < stats->ls_num; ++i) { - cntr = lprocfs_stats_counter_get(stats, cpuid, i); - cntr->lc_min = LC_MIN_INIT; - } - } - - return rc; -} -EXPORT_SYMBOL(lprocfs_stats_alloc_one); diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c index 8309d4ce6d60..61e04af2464f 100644 --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c @@ -356,8 +356,10 @@ struct proc_dir_entry *lprocfs_register(const char *name, struct proc_dir_entry *entry; entry = proc_mkdir(name, parent); - if (entry == NULL) - GOTO(out, entry = ERR_PTR(-ENOMEM)); + if (entry == NULL) { + entry = ERR_PTR(-ENOMEM); + goto out; + } if (list != NULL) { int rc = lprocfs_add_vars(entry, list, data); @@ -751,7 +753,7 @@ int lprocfs_rd_import(struct seq_file *m, void *data) ret.lc_sum, header->lc_units); k = 0; - for(j = 0; j < IMP_AT_MAX_PORTALS; j++) { + for (j = 0; j < IMP_AT_MAX_PORTALS; j++) { if (imp->imp_at.iat_portal[j] == 0) break; k = max_t(unsigned int, k, @@ -883,7 +885,7 @@ int lprocfs_rd_timeouts(struct seq_file *m, void *data) "network", cur, worst, worstt, DHMS_VARS(&ts)); lprocfs_at_hist_helper(m, &imp->imp_at.iat_net_latency); - for(i = 0; i < IMP_AT_MAX_PORTALS; i++) { + for (i = 0; i < IMP_AT_MAX_PORTALS; i++) { if (imp->imp_at.iat_portal[i] == 0) break; cur = at_get(&imp->imp_at.iat_service_estimate[i]); @@ -927,7 +929,7 @@ EXPORT_SYMBOL(lprocfs_rd_num_exports); int lprocfs_rd_numrefs(struct seq_file *m, void *data) { - struct obd_type *class = (struct obd_type*) data; + struct obd_type *class = (struct obd_type *) data; LASSERT(class != NULL); return seq_printf(m, "%d\n", class->typ_refcnt); @@ -947,7 +949,8 @@ int lprocfs_obd_setup(struct obd_device *obd, struct lprocfs_vars *list) list, obd); if (IS_ERR(obd->obd_proc_entry)) { rc = PTR_ERR(obd->obd_proc_entry); - CERROR("error %d setting up lprocfs for %s\n",rc,obd->obd_name); + CERROR("error %d setting up lprocfs for %s\n", + rc, obd->obd_name); obd->obd_proc_entry = NULL; } return rc; @@ -1011,6 +1014,43 @@ void lprocfs_free_per_client_stats(struct obd_device *obd) } EXPORT_SYMBOL(lprocfs_free_per_client_stats); +int lprocfs_stats_alloc_one(struct lprocfs_stats *stats, unsigned int cpuid) +{ + struct lprocfs_counter *cntr; + unsigned int percpusize; + int rc = -ENOMEM; + unsigned long flags = 0; + int i; + + LASSERT(stats->ls_percpu[cpuid] == NULL); + LASSERT((stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU) == 0); + + percpusize = lprocfs_stats_counter_size(stats); + LIBCFS_ALLOC_ATOMIC(stats->ls_percpu[cpuid], percpusize); + if (stats->ls_percpu[cpuid] != NULL) { + rc = 0; + if (unlikely(stats->ls_biggest_alloc_num <= cpuid)) { + if (stats->ls_flags & LPROCFS_STATS_FLAG_IRQ_SAFE) + spin_lock_irqsave(&stats->ls_lock, flags); + else + spin_lock(&stats->ls_lock); + if (stats->ls_biggest_alloc_num <= cpuid) + stats->ls_biggest_alloc_num = cpuid + 1; + if (stats->ls_flags & LPROCFS_STATS_FLAG_IRQ_SAFE) + spin_unlock_irqrestore(&stats->ls_lock, flags); + else + spin_unlock(&stats->ls_lock); + } + /* initialize the ls_percpu[cpuid] non-zero counter */ + for (i = 0; i < stats->ls_num; ++i) { + cntr = lprocfs_stats_counter_get(stats, cpuid, i); + cntr->lc_min = LC_MIN_INIT; + } + } + return rc; +} +EXPORT_SYMBOL(lprocfs_stats_alloc_one); + struct lprocfs_stats *lprocfs_alloc_stats(unsigned int num, enum lprocfs_stats_flags flags) { @@ -1308,44 +1348,24 @@ void lprocfs_init_ops_stats(int num_private_stats, struct lprocfs_stats *stats) LPROCFS_OBD_OP_INIT(num_private_stats, stats, packmd); LPROCFS_OBD_OP_INIT(num_private_stats, stats, unpackmd); LPROCFS_OBD_OP_INIT(num_private_stats, stats, preallocate); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, precreate); LPROCFS_OBD_OP_INIT(num_private_stats, stats, create); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, create_async); LPROCFS_OBD_OP_INIT(num_private_stats, stats, destroy); LPROCFS_OBD_OP_INIT(num_private_stats, stats, setattr); LPROCFS_OBD_OP_INIT(num_private_stats, stats, setattr_async); LPROCFS_OBD_OP_INIT(num_private_stats, stats, getattr); LPROCFS_OBD_OP_INIT(num_private_stats, stats, getattr_async); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, brw); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, merge_lvb); LPROCFS_OBD_OP_INIT(num_private_stats, stats, adjust_kms); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, punch); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, sync); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, migrate); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, copy); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, iterate); LPROCFS_OBD_OP_INIT(num_private_stats, stats, preprw); LPROCFS_OBD_OP_INIT(num_private_stats, stats, commitrw); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, enqueue); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, change_cbdata); LPROCFS_OBD_OP_INIT(num_private_stats, stats, find_cbdata); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, cancel); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, cancel_unused); LPROCFS_OBD_OP_INIT(num_private_stats, stats, init_export); LPROCFS_OBD_OP_INIT(num_private_stats, stats, destroy_export); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, extent_calc); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, llog_init); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, llog_connect); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, llog_finish); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, pin); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, unpin); LPROCFS_OBD_OP_INIT(num_private_stats, stats, import_event); LPROCFS_OBD_OP_INIT(num_private_stats, stats, notify); LPROCFS_OBD_OP_INIT(num_private_stats, stats, health_check); LPROCFS_OBD_OP_INIT(num_private_stats, stats, get_uuid); LPROCFS_OBD_OP_INIT(num_private_stats, stats, quotacheck); LPROCFS_OBD_OP_INIT(num_private_stats, stats, quotactl); - LPROCFS_OBD_OP_INIT(num_private_stats, stats, ping); LPROCFS_OBD_OP_INIT(num_private_stats, stats, pool_new); LPROCFS_OBD_OP_INIT(num_private_stats, stats, pool_rem); LPROCFS_OBD_OP_INIT(num_private_stats, stats, pool_add); @@ -1572,7 +1592,10 @@ lproc_exp_hash_seq_show(struct seq_file *m, void *unused) { struct nid_stat *stats = (struct nid_stat *)m->private; struct obd_device *obd = stats->nid_obd; - struct exp_hash_cb_data cb_data = {m, true}; + struct exp_hash_cb_data cb_data = { + .m = m, + .first = true + }; cfs_hash_for_each_key(obd->obd_nid_hash, &stats->nid, lprocfs_exp_print_hash, &cb_data); @@ -1593,7 +1616,7 @@ static int lprocfs_nid_stats_clear_write_cb(void *obj, void *data) { struct nid_stat *stat = obj; - CDEBUG(D_INFO,"refcnt %d\n", atomic_read(&stat->nid_exp_ref_count)); + CDEBUG(D_INFO, "refcnt %d\n", atomic_read(&stat->nid_exp_ref_count)); if (atomic_read(&stat->nid_exp_ref_count) == 1) { /* object has only hash references. */ spin_lock(&stat->nid_obd->obd_nid_lock); @@ -1679,12 +1702,15 @@ int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid) * entry already has been created */ if (old_stat != new_stat) { exp->exp_nid_stats = old_stat; - GOTO(destroy_new, rc = -EALREADY); + rc = -EALREADY; + goto destroy_new; } /* not found - create */ OBD_ALLOC(buffer, LNET_NIDSTR_SIZE); - if (buffer == NULL) - GOTO(destroy_new, rc = -ENOMEM); + if (buffer == NULL) { + rc = -ENOMEM; + goto destroy_new; + } memcpy(buffer, libcfs_nid2str(*nid), LNET_NIDSTR_SIZE); new_stat->nid_proc = lprocfs_register(buffer, @@ -1697,7 +1723,7 @@ int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid) libcfs_nid2str(*nid)); rc = PTR_ERR(new_stat->nid_proc); new_stat->nid_proc = NULL; - GOTO(destroy_new_ns, rc); + goto destroy_new_ns; } entry = lprocfs_add_simple(new_stat->nid_proc, "uuid", @@ -1705,7 +1731,7 @@ int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid) if (IS_ERR(entry)) { CWARN("Error adding the NID stats file\n"); rc = PTR_ERR(entry); - GOTO(destroy_new_ns, rc); + goto destroy_new_ns; } entry = lprocfs_add_simple(new_stat->nid_proc, "hash", @@ -1713,7 +1739,7 @@ int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid) if (IS_ERR(entry)) { CWARN("Error adding the hash file\n"); rc = PTR_ERR(entry); - GOTO(destroy_new_ns, rc); + goto destroy_new_ns; } exp->exp_nid_stats = new_stat; @@ -1741,7 +1767,7 @@ int lprocfs_exp_cleanup(struct obd_export *exp) { struct nid_stat *stat = exp->exp_nid_stats; - if(!stat || !exp->exp_obd) + if (!stat || !exp->exp_obd) return 0; nidstat_putref(exp->exp_nid_stats); @@ -1751,6 +1777,48 @@ int lprocfs_exp_cleanup(struct obd_export *exp) } EXPORT_SYMBOL(lprocfs_exp_cleanup); +__s64 lprocfs_read_helper(struct lprocfs_counter *lc, + struct lprocfs_counter_header *header, + enum lprocfs_stats_flags flags, + enum lprocfs_fields_flags field) +{ + __s64 ret = 0; + + if (lc == NULL || header == NULL) + return 0; + + switch (field) { + case LPROCFS_FIELDS_FLAGS_CONFIG: + ret = header->lc_config; + break; + case LPROCFS_FIELDS_FLAGS_SUM: + ret = lc->lc_sum; + if ((flags & LPROCFS_STATS_FLAG_IRQ_SAFE) != 0) + ret += lc->lc_sum_irq; + break; + case LPROCFS_FIELDS_FLAGS_MIN: + ret = lc->lc_min; + break; + case LPROCFS_FIELDS_FLAGS_MAX: + ret = lc->lc_max; + break; + case LPROCFS_FIELDS_FLAGS_AVG: + ret = (lc->lc_max - lc->lc_min) / 2; + break; + case LPROCFS_FIELDS_FLAGS_SUMSQUARE: + ret = lc->lc_sumsquare; + break; + case LPROCFS_FIELDS_FLAGS_COUNT: + ret = lc->lc_count; + break; + default: + break; + } + + return 0; +} +EXPORT_SYMBOL(lprocfs_read_helper); + int lprocfs_write_helper(const char *buffer, unsigned long count, int *val) { @@ -1783,7 +1851,8 @@ int lprocfs_seq_read_frac_helper(struct seq_file *m, long val, int mult) } EXPORT_SYMBOL(lprocfs_seq_read_frac_helper); -int lprocfs_write_u64_helper(const char *buffer, unsigned long count,__u64 *val) +int lprocfs_write_u64_helper(const char *buffer, unsigned long count, + __u64 *val) { return lprocfs_write_frac_u64_helper(buffer, count, val, 1); } @@ -1828,7 +1897,7 @@ int lprocfs_write_frac_u64_helper(const char *buffer, unsigned long count, } units = 1; - switch(*end) { + switch (*end) { case 'p': case 'P': units <<= 10; case 't': case 'T': @@ -1922,8 +1991,8 @@ int lprocfs_obd_seq_create(struct obd_device *dev, const struct file_operations *seq_fops, void *data) { - return (lprocfs_seq_create(dev->obd_proc_entry, name, - mode, seq_fops, data)); + return lprocfs_seq_create(dev->obd_proc_entry, name, + mode, seq_fops, data); } EXPORT_SYMBOL(lprocfs_obd_seq_create); diff --git a/drivers/staging/lustre/lustre/obdclass/lu_ucred.c b/drivers/staging/lustre/lustre/obdclass/lu_ucred.c deleted file mode 100644 index 3676563ab330..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/lu_ucred.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2011, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/obdclass/lu_ucred.c - * - * Lustre user credentials context infrastructure. - * - * Author: Nikita Danilov <nikita.danilov@sun.com> - * Author: Fan Yong <fan.yong@intel.com> - * Author: Vitaly Fertman <vitaly_fertman@xyratex.com> - */ - -#define DEBUG_SUBSYSTEM S_CLASS - -#include "../../include/linux/libcfs/libcfs.h" -#include "../include/obd_support.h" -#include "../include/lu_object.h" -#include "../include/md_object.h" - -/* context key constructor/destructor: lu_ucred_key_init, lu_ucred_key_fini */ -LU_KEY_INIT_FINI(lu_ucred, struct lu_ucred); - -static struct lu_context_key lu_ucred_key = { - .lct_tags = LCT_SESSION, - .lct_init = lu_ucred_key_init, - .lct_fini = lu_ucred_key_fini -}; - -/** - * Get ucred key if session exists and ucred key is allocated on it. - * Return NULL otherwise. - */ -struct lu_ucred *lu_ucred(const struct lu_env *env) -{ - if (!env->le_ses) - return NULL; - return lu_context_key_get(env->le_ses, &lu_ucred_key); -} -EXPORT_SYMBOL(lu_ucred); - -/** - * Get ucred key and check if it is properly initialized. - * Return NULL otherwise. - */ -struct lu_ucred *lu_ucred_check(const struct lu_env *env) -{ - struct lu_ucred *uc = lu_ucred(env); - if (uc && uc->uc_valid != UCRED_OLD && uc->uc_valid != UCRED_NEW) - return NULL; - return uc; -} -EXPORT_SYMBOL(lu_ucred_check); - -/** - * Get ucred key, which must exist and must be properly initialized. - * Assert otherwise. - */ -struct lu_ucred *lu_ucred_assert(const struct lu_env *env) -{ - struct lu_ucred *uc = lu_ucred_check(env); - LASSERT(uc != NULL); - return uc; -} -EXPORT_SYMBOL(lu_ucred_assert); - -int lu_ucred_global_init(void) -{ - LU_CONTEXT_KEY_INIT(&lu_ucred_key); - return lu_context_key_register(&lu_ucred_key); -} - -void lu_ucred_global_fini(void) -{ - lu_context_key_degister(&lu_ucred_key); -} diff --git a/drivers/staging/lustre/lustre/obdclass/lustre_handles.c b/drivers/staging/lustre/lustre/obdclass/lustre_handles.c index 2010463429b1..f720e3183295 100644 --- a/drivers/staging/lustre/lustre/obdclass/lustre_handles.c +++ b/drivers/staging/lustre/lustre/obdclass/lustre_handles.c @@ -178,7 +178,7 @@ void *class_handle2object(__u64 cookie) } EXPORT_SYMBOL(class_handle2object); -void class_handle_free_cb(cfs_rcu_head_t *rcu) +void class_handle_free_cb(struct rcu_head *rcu) { struct portals_handle *h = RCU2HANDLE(rcu); void *ptr = (void *)(unsigned long)h->h_cookie; diff --git a/drivers/staging/lustre/lustre/obdclass/md_attrs.c b/drivers/staging/lustre/lustre/obdclass/md_attrs.c deleted file mode 100644 index d9e6348de4fa..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/md_attrs.c +++ /dev/null @@ -1,199 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * version 2 along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 021110-1307, USA - * - * GPL HEADER END - */ -/* - * Copyright (c) 2012, Intel Corporation. - * Use is subject to license terms. - * - * Author: Johann Lombardi <johann.lombardi@intel.com> - */ - -#include "../include/lustre/lustre_idl.h" -#include "../include/obd.h" -#include "../include/md_object.h" - -/** - * Initialize new \a lma. Only fid is stored. - * - * \param lma - is the new LMA structure to be initialized - * \param fid - is the FID of the object this LMA belongs to - * \param incompat - features that MDS must understand to access object - */ -void lustre_lma_init(struct lustre_mdt_attrs *lma, const struct lu_fid *fid, - __u32 incompat) -{ - lma->lma_compat = 0; - lma->lma_incompat = incompat; - lma->lma_self_fid = *fid; - - /* If a field is added in struct lustre_mdt_attrs, zero it explicitly - * and change the test below. */ - LASSERT(sizeof(*lma) == - (offsetof(struct lustre_mdt_attrs, lma_self_fid) + - sizeof(lma->lma_self_fid))); -}; -EXPORT_SYMBOL(lustre_lma_init); - -/** - * Swab, if needed, LMA structure which is stored on-disk in little-endian order. - * - * \param lma - is a pointer to the LMA structure to be swabbed. - */ -void lustre_lma_swab(struct lustre_mdt_attrs *lma) -{ - /* Use LUSTRE_MSG_MAGIC to detect local endianness. */ - if (LUSTRE_MSG_MAGIC != cpu_to_le32(LUSTRE_MSG_MAGIC)) { - __swab32s(&lma->lma_compat); - __swab32s(&lma->lma_incompat); - lustre_swab_lu_fid(&lma->lma_self_fid); - } -}; -EXPORT_SYMBOL(lustre_lma_swab); - -/** - * Swab, if needed, SOM structure which is stored on-disk in little-endian - * order. - * - * \param attrs - is a pointer to the SOM structure to be swabbed. - */ -void lustre_som_swab(struct som_attrs *attrs) -{ - /* Use LUSTRE_MSG_MAGIC to detect local endianness. */ - if (LUSTRE_MSG_MAGIC != cpu_to_le32(LUSTRE_MSG_MAGIC)) { - __swab32s(&attrs->som_compat); - __swab32s(&attrs->som_incompat); - __swab64s(&attrs->som_ioepoch); - __swab64s(&attrs->som_size); - __swab64s(&attrs->som_blocks); - __swab64s(&attrs->som_mountid); - } -}; -EXPORT_SYMBOL(lustre_som_swab); - -/* - * Swab and extract SOM attributes from on-disk xattr. - * - * \param buf - is a buffer containing the on-disk SOM extended attribute. - * \param rc - is the SOM xattr stored in \a buf - * \param msd - is the md_som_data structure where to extract SOM attributes. - */ -int lustre_buf2som(void *buf, int rc, struct md_som_data *msd) -{ - struct som_attrs *attrs = (struct som_attrs *)buf; - - if (rc == 0 || rc == -ENODATA) - /* no SOM attributes */ - return -ENODATA; - - if (rc < 0) - /* error hit while fetching xattr */ - return rc; - - /* check SOM compatibility */ - if (attrs->som_incompat & ~cpu_to_le32(SOM_INCOMPAT_SUPP)) - return -ENODATA; - - /* unpack SOM attributes */ - lustre_som_swab(attrs); - - /* fill in-memory msd structure */ - msd->msd_compat = attrs->som_compat; - msd->msd_incompat = attrs->som_incompat; - msd->msd_ioepoch = attrs->som_ioepoch; - msd->msd_size = attrs->som_size; - msd->msd_blocks = attrs->som_blocks; - msd->msd_mountid = attrs->som_mountid; - - return 0; -} -EXPORT_SYMBOL(lustre_buf2som); - -/** - * Swab, if needed, HSM structure which is stored on-disk in little-endian - * order. - * - * \param attrs - is a pointer to the HSM structure to be swabbed. - */ -void lustre_hsm_swab(struct hsm_attrs *attrs) -{ - /* Use LUSTRE_MSG_MAGIC to detect local endianness. */ - if (LUSTRE_MSG_MAGIC != cpu_to_le32(LUSTRE_MSG_MAGIC)) { - __swab32s(&attrs->hsm_compat); - __swab32s(&attrs->hsm_flags); - __swab64s(&attrs->hsm_arch_id); - __swab64s(&attrs->hsm_arch_ver); - } -}; -EXPORT_SYMBOL(lustre_hsm_swab); - -/* - * Swab and extract HSM attributes from on-disk xattr. - * - * \param buf - is a buffer containing the on-disk HSM extended attribute. - * \param rc - is the HSM xattr stored in \a buf - * \param mh - is the md_hsm structure where to extract HSM attributes. - */ -int lustre_buf2hsm(void *buf, int rc, struct md_hsm *mh) -{ - struct hsm_attrs *attrs = (struct hsm_attrs *)buf; - - if (rc == 0 || rc == -ENODATA) - /* no HSM attributes */ - return -ENODATA; - - if (rc < 0) - /* error hit while fetching xattr */ - return rc; - - /* unpack HSM attributes */ - lustre_hsm_swab(attrs); - - /* fill md_hsm structure */ - mh->mh_compat = attrs->hsm_compat; - mh->mh_flags = attrs->hsm_flags; - mh->mh_arch_id = attrs->hsm_arch_id; - mh->mh_arch_ver = attrs->hsm_arch_ver; - - return 0; -} -EXPORT_SYMBOL(lustre_buf2hsm); - -/* - * Pack HSM attributes. - * - * \param buf - is the output buffer where to pack the on-disk HSM xattr. - * \param mh - is the md_hsm structure to pack. - */ -void lustre_hsm2buf(void *buf, struct md_hsm *mh) -{ - struct hsm_attrs *attrs = (struct hsm_attrs *)buf; - - /* copy HSM attributes */ - attrs->hsm_compat = mh->mh_compat; - attrs->hsm_flags = mh->mh_flags; - attrs->hsm_arch_id = mh->mh_arch_id; - attrs->hsm_arch_ver = mh->mh_arch_ver; - - /* pack xattr */ - lustre_hsm_swab(attrs); -} -EXPORT_SYMBOL(lustre_hsm2buf); diff --git a/drivers/staging/lustre/lustre/obdclass/mea.c b/drivers/staging/lustre/lustre/obdclass/mea.c deleted file mode 100644 index d6ce084da902..000000000000 --- a/drivers/staging/lustre/lustre/obdclass/mea.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2004, 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. - */ - -#define DEBUG_SUBSYSTEM S_CLASS -#include "../include/obd_class.h" -#include <linux/kmod.h> /* for request_module() */ -#include <linux/module.h> -#include <linux/slab.h> -#include <linux/pagemap.h> -#include "../include/lprocfs_status.h" -#include "../include/lustre/lustre_idl.h" - -static int mea_last_char_hash(int count, char *name, int namelen) -{ - unsigned int c; - - c = name[namelen - 1]; - if (c == 0) - CWARN("looks like wrong len is passed\n"); - c = c % count; - return c; -} - -static int mea_all_chars_hash(int count, char *name, int namelen) -{ - unsigned int c = 0; - - while (--namelen >= 0) - c += name[namelen]; - c = c % count; - return c; -} - -int raw_name2idx(int hashtype, int count, const char *name, int namelen) -{ - unsigned int c = 0; - int idx; - - LASSERT(namelen > 0); - - if (filename_is_volatile(name, namelen, &idx)) { - if ((idx >= 0) && (idx < count)) - return idx; - goto hashchoice; - } - - if (count <= 1) - return 0; - -hashchoice: - switch (hashtype) { - case MEA_MAGIC_LAST_CHAR: - c = mea_last_char_hash(count, (char *)name, namelen); - break; - case MEA_MAGIC_ALL_CHARS: - c = mea_all_chars_hash(count, (char *)name, namelen); - break; - case MEA_MAGIC_HASH_SEGMENT: - CERROR("Unsupported hash type MEA_MAGIC_HASH_SEGMENT\n"); - break; - default: - CERROR("Unknown hash type 0x%x\n", hashtype); - } - - LASSERT(c < count); - return c; -} -EXPORT_SYMBOL(raw_name2idx); - -int mea_name2idx(struct lmv_stripe_md *mea, const char *name, int namelen) -{ - unsigned int c; - - LASSERT(mea && mea->mea_count); - - c = raw_name2idx(mea->mea_magic, mea->mea_count, name, namelen); - - LASSERT(c < mea->mea_count); - return c; -} -EXPORT_SYMBOL(mea_name2idx); diff --git a/drivers/staging/lustre/lustre/obdclass/obd_config.c b/drivers/staging/lustre/lustre/obdclass/obd_config.c index 0d81d3232f31..5e7b3d7cc984 100644 --- a/drivers/staging/lustre/lustre/obdclass/obd_config.c +++ b/drivers/staging/lustre/lustre/obdclass/obd_config.c @@ -365,7 +365,7 @@ int class_attach(struct lustre_cfg *lcfg) obd = NULL; CERROR("Cannot create device %s of type %s : %d\n", name, typename, rc); - GOTO(out, rc); + goto out; } LASSERTF(obd != NULL, "Cannot get obd device %s of type %s\n", name, typename); @@ -412,15 +412,18 @@ int class_attach(struct lustre_cfg *lcfg) if (len >= sizeof(obd->obd_uuid)) { CERROR("uuid must be < %d bytes long\n", (int)sizeof(obd->obd_uuid)); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } memcpy(obd->obd_uuid.uuid, uuid, len); /* do the attach */ if (OBP(obd, attach)) { rc = OBP(obd, attach)(obd, sizeof(*lcfg), lcfg); - if (rc) - GOTO(out, rc = -EINVAL); + if (rc) { + rc = -EINVAL; + goto out; + } } /* Detach drops this */ @@ -494,8 +497,10 @@ int class_setup(struct obd_device *obd, struct lustre_cfg *lcfg) CFS_HASH_MIN_THETA, CFS_HASH_MAX_THETA, &uuid_hash_ops, CFS_HASH_DEFAULT); - if (!obd->obd_uuid_hash) - GOTO(err_hash, err = -ENOMEM); + if (!obd->obd_uuid_hash) { + err = -ENOMEM; + goto err_hash; + } /* create a nid-export lustre hash */ obd->obd_nid_hash = cfs_hash_create("NID_HASH", @@ -505,8 +510,10 @@ int class_setup(struct obd_device *obd, struct lustre_cfg *lcfg) CFS_HASH_MIN_THETA, CFS_HASH_MAX_THETA, &nid_hash_ops, CFS_HASH_DEFAULT); - if (!obd->obd_nid_hash) - GOTO(err_hash, err = -ENOMEM); + if (!obd->obd_nid_hash) { + err = -ENOMEM; + goto err_hash; + } /* create a nid-stats lustre hash */ obd->obd_nid_stats_hash = cfs_hash_create("NID_STATS", @@ -516,12 +523,16 @@ int class_setup(struct obd_device *obd, struct lustre_cfg *lcfg) CFS_HASH_MIN_THETA, CFS_HASH_MAX_THETA, &nid_stat_hash_ops, CFS_HASH_DEFAULT); - if (!obd->obd_nid_stats_hash) - GOTO(err_hash, err = -ENOMEM); + if (!obd->obd_nid_stats_hash) { + err = -ENOMEM; + goto err_hash; + } exp = class_new_export(obd, &obd->obd_uuid); - if (IS_ERR(exp)) - GOTO(err_hash, err = PTR_ERR(exp)); + if (IS_ERR(exp)) { + err = PTR_ERR(exp); + goto err_hash; + } obd->obd_self_export = exp; list_del_init(&exp->exp_obd_chain_timed); @@ -529,7 +540,7 @@ int class_setup(struct obd_device *obd, struct lustre_cfg *lcfg) err = obd_setup(obd, lcfg); if (err) - GOTO(err_exp, err); + goto err_exp; obd->obd_set_up = 1; @@ -856,21 +867,27 @@ int class_add_profile(int proflen, char *prof, int osclen, char *osc, LASSERT(proflen == (strlen(prof) + 1)); OBD_ALLOC(lprof->lp_profile, proflen); - if (lprof->lp_profile == NULL) - GOTO(out, err = -ENOMEM); + if (lprof->lp_profile == NULL) { + err = -ENOMEM; + goto out; + } memcpy(lprof->lp_profile, prof, proflen); LASSERT(osclen == (strlen(osc) + 1)); OBD_ALLOC(lprof->lp_dt, osclen); - if (lprof->lp_dt == NULL) - GOTO(out, err = -ENOMEM); + if (lprof->lp_dt == NULL) { + err = -ENOMEM; + goto out; + } memcpy(lprof->lp_dt, osc, osclen); if (mdclen > 0) { LASSERT(mdclen == (strlen(mdc) + 1)); OBD_ALLOC(lprof->lp_md, mdclen); - if (lprof->lp_md == NULL) - GOTO(out, err = -ENOMEM); + if (lprof->lp_md == NULL) { + err = -ENOMEM; + goto out; + } memcpy(lprof->lp_md, mdc, mdclen); } @@ -1050,7 +1067,7 @@ static int process_param2_config(struct lustre_cfg *lcfg) } do_gettimeofday(&start); - rc = USERMODEHELPER(argv[0], argv, NULL); + rc = call_usermodehelper(argv[0], argv, NULL, 1); do_gettimeofday(&end); if (rc < 0) { @@ -1087,10 +1104,10 @@ int class_process_config(struct lustre_cfg *lcfg) CDEBUG(D_IOCTL, "processing cmd: %x\n", lcfg->lcfg_command); /* Commands that don't need a device */ - switch(lcfg->lcfg_command) { + switch (lcfg->lcfg_command) { case LCFG_ATTACH: { err = class_attach(lcfg); - GOTO(out, err); + goto out; } case LCFG_ADD_UUID: { CDEBUG(D_IOCTL, "adding mapping from uuid %s to nid %#llx (%s)\n", @@ -1098,7 +1115,7 @@ int class_process_config(struct lustre_cfg *lcfg) libcfs_nid2str(lcfg->lcfg_nid)); err = class_add_uuid(lustre_cfg_string(lcfg, 1), lcfg->lcfg_nid); - GOTO(out, err); + goto out; } case LCFG_DEL_UUID: { CDEBUG(D_IOCTL, "removing mappings for uuid %s\n", @@ -1106,7 +1123,7 @@ int class_process_config(struct lustre_cfg *lcfg) ? "<all uuids>" : lustre_cfg_string(lcfg, 1)); err = class_del_uuid(lustre_cfg_string(lcfg, 1)); - GOTO(out, err); + goto out; } case LCFG_MOUNTOPT: { CDEBUG(D_IOCTL, "mountopt: profile %s osc %s mdc %s\n", @@ -1121,20 +1138,22 @@ int class_process_config(struct lustre_cfg *lcfg) lustre_cfg_string(lcfg, 2), LUSTRE_CFG_BUFLEN(lcfg, 3), lustre_cfg_string(lcfg, 3)); - GOTO(out, err); + goto out; } case LCFG_DEL_MOUNTOPT: { CDEBUG(D_IOCTL, "mountopt: profile %s\n", lustre_cfg_string(lcfg, 1)); class_del_profile(lustre_cfg_string(lcfg, 1)); - GOTO(out, err = 0); + err = 0; + goto out; } case LCFG_SET_TIMEOUT: { CDEBUG(D_IOCTL, "changing lustre timeout from %d to %d\n", obd_timeout, lcfg->lcfg_num); obd_timeout = max(lcfg->lcfg_num, 1U); obd_timeout_set = 1; - GOTO(out, err = 0); + err = 0; + goto out; } case LCFG_SET_LDLM_TIMEOUT: { CDEBUG(D_IOCTL, "changing lustre ldlm_timeout from %d to %d\n", @@ -1143,19 +1162,22 @@ int class_process_config(struct lustre_cfg *lcfg) if (ldlm_timeout >= obd_timeout) ldlm_timeout = max(obd_timeout / 3, 1U); ldlm_timeout_set = 1; - GOTO(out, err = 0); + err = 0; + goto out; } case LCFG_SET_UPCALL: { LCONSOLE_ERROR_MSG(0x15a, "recovery upcall is deprecated\n"); /* COMPAT_146 Don't fail on old configs */ - GOTO(out, err = 0); + err = 0; + goto out; } case LCFG_MARKER: { struct cfg_marker *marker; marker = lustre_cfg_buf(lcfg, 1); CDEBUG(D_IOCTL, "marker %d (%#x) %.16s %s\n", marker->cm_step, marker->cm_flags, marker->cm_tgtname, marker->cm_comment); - GOTO(out, err = 0); + err = 0; + goto out; } case LCFG_PARAM: { char *tmp; @@ -1164,7 +1186,7 @@ int class_process_config(struct lustre_cfg *lcfg) PARAM_LLITE, NULL) == 0) && client_process_config) { err = (*client_process_config)(lcfg); - GOTO(out, err); + goto out; } else if ((class_match_param(lustre_cfg_string(lcfg, 1), PARAM_SYS, &tmp) == 0)) { /* Global param settings */ @@ -1176,19 +1198,20 @@ int class_process_config(struct lustre_cfg *lcfg) if (err != 0) CWARN("Ignoring unknown param %s\n", tmp); - GOTO(out, err = 0); + err = 0; + goto out; } else if ((class_match_param(lustre_cfg_string(lcfg, 1), PARAM_QUOTA, &tmp) == 0) && quota_process_config) { err = (*quota_process_config)(lcfg); - GOTO(out, err); + goto out; } break; } case LCFG_SET_PARAM: { err = process_param2_config(lcfg); - GOTO(out, 0); + goto out; } } /* Commands that require a device */ @@ -1200,55 +1223,60 @@ int class_process_config(struct lustre_cfg *lcfg) CERROR("no device for: %s\n", lustre_cfg_string(lcfg, 0)); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } - switch(lcfg->lcfg_command) { + switch (lcfg->lcfg_command) { case LCFG_SETUP: { err = class_setup(obd, lcfg); - GOTO(out, err); + goto out; } case LCFG_DETACH: { err = class_detach(obd, lcfg); - GOTO(out, err = 0); + err = 0; + goto out; } case LCFG_CLEANUP: { err = class_cleanup(obd, lcfg); - GOTO(out, err = 0); + err = 0; + goto out; } case LCFG_ADD_CONN: { err = class_add_conn(obd, lcfg); - GOTO(out, err = 0); + err = 0; + goto out; } case LCFG_DEL_CONN: { err = class_del_conn(obd, lcfg); - GOTO(out, err = 0); + err = 0; + goto out; } case LCFG_POOL_NEW: { err = obd_pool_new(obd, lustre_cfg_string(lcfg, 2)); - GOTO(out, err = 0); - break; + err = 0; + goto out; } case LCFG_POOL_ADD: { err = obd_pool_add(obd, lustre_cfg_string(lcfg, 2), lustre_cfg_string(lcfg, 3)); - GOTO(out, err = 0); - break; + err = 0; + goto out; } case LCFG_POOL_REM: { err = obd_pool_rem(obd, lustre_cfg_string(lcfg, 2), lustre_cfg_string(lcfg, 3)); - GOTO(out, err = 0); - break; + err = 0; + goto out; } case LCFG_POOL_DEL: { err = obd_pool_del(obd, lustre_cfg_string(lcfg, 2)); - GOTO(out, err = 0); - break; + err = 0; + goto out; } default: { err = obd_process_config(obd, sizeof(*lcfg), lcfg); - GOTO(out, err); + goto out; } } @@ -1361,7 +1389,7 @@ int class_config_llog_handler(const struct lu_env *env, { struct config_llog_instance *clli = data; int cfg_len = rec->lrh_len; - char *cfg_buf = (char*) (rec + 1); + char *cfg_buf = (char *) (rec + 1); int rc = 0; //class_config_dump_handler(handle, rec, data); @@ -1382,7 +1410,7 @@ int class_config_llog_handler(const struct lu_env *env, rc = lustre_cfg_sanity_check(cfg_buf, cfg_len); if (rc) - GOTO(out, rc); + goto out; /* Figure out config state info */ if (lcfg->lcfg_command == LCFG_MARKER) { @@ -1469,8 +1497,10 @@ int class_config_llog_handler(const struct lu_env *env, inst_len = LUSTRE_CFG_BUFLEN(lcfg, 0) + sizeof(clli->cfg_instance) * 2 + 4; OBD_ALLOC(inst_name, inst_len); - if (inst_name == NULL) - GOTO(out, rc = -ENOMEM); + if (inst_name == NULL) { + rc = -ENOMEM; + goto out; + } sprintf(inst_name, "%s-%p", lustre_cfg_string(lcfg, 0), clli->cfg_instance); @@ -1562,7 +1592,7 @@ int class_config_parse_llog(const struct lu_env *env, struct llog_ctxt *ctxt, rc = llog_init_handle(env, llh, LLOG_F_IS_PLAIN, NULL); if (rc) - GOTO(parse_out, rc); + goto parse_out; /* continue processing from where we last stopped to end-of-log */ if (cfg) { @@ -1674,7 +1704,7 @@ int class_config_dump_llog(const struct lu_env *env, struct llog_ctxt *ctxt, rc = llog_init_handle(env, llh, LLOG_F_IS_PLAIN, NULL); if (rc) - GOTO(parse_out, rc); + goto parse_out; rc = llog_process(env, llh, class_config_dump_handler, cfg, NULL); parse_out: @@ -1717,7 +1747,7 @@ int class_manual_cleanup(struct obd_device *obd) rc = class_process_config(lcfg); if (rc) { CERROR("cleanup failed %d: %s\n", rc, obd->obd_name); - GOTO(out, rc); + goto out; } /* the lcfg is almost the same for both ops */ diff --git a/drivers/staging/lustre/lustre/obdclass/obd_mount.c b/drivers/staging/lustre/lustre/obdclass/obd_mount.c index d972f71c9d97..1260c8713bc6 100644 --- a/drivers/staging/lustre/lustre/obdclass/obd_mount.c +++ b/drivers/staging/lustre/lustre/obdclass/obd_mount.c @@ -46,7 +46,7 @@ #define PRINT_CMD CDEBUG #include "../include/obd.h" -#include "../include/lvfs.h" +#include "../include/linux/lustre_compat25.h" #include "../include/obd_class.h" #include "../include/lustre/lustre_user.h" #include "../include/lustre_log.h" @@ -174,7 +174,7 @@ int do_lcfg(char *cfgname, lnet_nid_t nid, int cmd, lcfg->lcfg_nid = nid; rc = class_process_config(lcfg); lustre_cfg_free(lcfg); - return(rc); + return rc; } EXPORT_SYMBOL(do_lcfg); @@ -256,15 +256,19 @@ int lustre_start_mgc(struct super_block *sb) len = strlen(LUSTRE_MGC_OBDNAME) + strlen(libcfs_nid2str(nid)) + 1; OBD_ALLOC(mgcname, len); OBD_ALLOC(niduuid, len + 2); - if (!mgcname || !niduuid) - GOTO(out_free, rc = -ENOMEM); + if (!mgcname || !niduuid) { + rc = -ENOMEM; + goto out_free; + } sprintf(mgcname, "%s%s", LUSTRE_MGC_OBDNAME, libcfs_nid2str(nid)); mgssec = lsi->lsi_lmd->lmd_mgssec ? lsi->lsi_lmd->lmd_mgssec : ""; OBD_ALLOC_PTR(data); - if (data == NULL) - GOTO(out_free, rc = -ENOMEM); + if (data == NULL) { + rc = -ENOMEM; + goto out_free; + } obd = class_name2obd(mgcname); if (obd && !obd->obd_stopping) { @@ -274,7 +278,7 @@ int lustre_start_mgc(struct super_block *sb) strlen(KEY_MGSSEC), KEY_MGSSEC, strlen(mgssec), mgssec, NULL); if (rc) - GOTO(out_free, rc); + goto out_free; /* Re-using an existing MGC */ atomic_inc(&obd->u.cli.cl_mgc_refcount); @@ -318,12 +322,14 @@ int lustre_start_mgc(struct super_block *sb) (using its local copy of the log), but we do want to connect if at all possible. */ recov_bk++; - CDEBUG(D_MOUNT, "%s: Set MGC reconnect %d\n", mgcname,recov_bk); + CDEBUG(D_MOUNT, "%s: Set MGC reconnect %d\n", mgcname, + recov_bk); rc = obd_set_info_async(NULL, obd->obd_self_export, sizeof(KEY_INIT_RECOV_BACKUP), KEY_INIT_RECOV_BACKUP, sizeof(recov_bk), &recov_bk, NULL); - GOTO(out, rc = 0); + rc = 0; + goto out; } CDEBUG(D_MOUNT, "Start MGC '%s'\n", mgcname); @@ -349,7 +355,8 @@ int lustre_start_mgc(struct super_block *sb) } else if (class_find_param(ptr, PARAM_MGSNODE, &ptr) != 0) { CERROR("No MGS nids given.\n"); - GOTO(out_free, rc = -EINVAL); + rc = -EINVAL; + goto out_free; } while (class_parse_nid(ptr, &nid, &ptr) == 0) { rc = do_lcfg(mgcname, nid, @@ -372,7 +379,8 @@ int lustre_start_mgc(struct super_block *sb) } if (i == 0) { CERROR("No valid MGS nids found.\n"); - GOTO(out_free, rc = -EINVAL); + rc = -EINVAL; + goto out_free; } lsi->lsi_lmd->lmd_mgs_failnodes = 1; @@ -387,7 +395,7 @@ int lustre_start_mgc(struct super_block *sb) niduuid, NULL, NULL); OBD_FREE_PTR(uuid); if (rc) - GOTO(out_free, rc); + goto out_free; /* Add any failover MGS nids */ i = 1; @@ -417,14 +425,15 @@ int lustre_start_mgc(struct super_block *sb) obd = class_name2obd(mgcname); if (!obd) { CERROR("Can't find mgcobd %s\n", mgcname); - GOTO(out_free, rc = -ENOTCONN); + rc = -ENOTCONN; + goto out_free; } rc = obd_set_info_async(NULL, obd->obd_self_export, strlen(KEY_MGSSEC), KEY_MGSSEC, strlen(mgssec), mgssec, NULL); if (rc) - GOTO(out_free, rc); + goto out_free; /* Keep a refcount of servers/clients who started with "mount", so we know when we can get rid of the mgc. */ @@ -448,7 +457,7 @@ int lustre_start_mgc(struct super_block *sb) rc = obd_connect(NULL, &exp, obd, &(obd->obd_uuid), data, NULL); if (rc) { CERROR("connect failed %d\n", rc); - GOTO(out, rc); + goto out; } obd->u.cli.cl_mgc_mgsexp = exp; @@ -490,7 +499,8 @@ static int lustre_stop_mgc(struct super_block *sb) will call in here. */ CDEBUG(D_MOUNT, "mgc still has %d references.\n", atomic_read(&obd->u.cli.cl_mgc_refcount)); - GOTO(out, rc = -EBUSY); + rc = -EBUSY; + goto out; } /* The MGC has no recoverable data in any case. @@ -516,11 +526,13 @@ static int lustre_stop_mgc(struct super_block *sb) rc = class_manual_cleanup(obd); if (rc) - GOTO(out, rc); + goto out; /* Clean the nid uuids */ - if (!niduuid) - GOTO(out, rc = -ENOMEM); + if (!niduuid) { + rc = -ENOMEM; + goto out; + } for (i = 0; i < lsi->lsi_lmd->lmd_mgs_failnodes; i++) { sprintf(ptr, "_%x", i); @@ -817,7 +829,7 @@ int lustre_check_exclusion(struct super_block *sb, char *svname) CDEBUG(D_MOUNT, "Check exclusion %s (%d) in %d of %s\n", svname, index, lmd->lmd_exclude_count, lmd->lmd_dev); - for(i = 0; i < lmd->lmd_exclude_count; i++) { + for (i = 0; i < lmd->lmd_exclude_count; i++) { if (index == lmd->lmd_exclude[i]) { CWARN("Excluding %s (on exclusion list)\n", svname); return 1; @@ -1211,7 +1223,8 @@ int lustre_fill_super(struct super_block *sb, void *data, int silent) /* Figure out the lmd from the mount options */ if (lmd_parse((char *)(lmd2->lmd2_data), lmd)) { lustre_put_lsi(sb); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } if (lmd_is_client(lmd)) { @@ -1228,7 +1241,7 @@ int lustre_fill_super(struct super_block *sb, void *data, int silent) rc = lustre_start_mgc(sb); if (rc) { lustre_put_lsi(sb); - GOTO(out, rc); + goto out; } /* Connect and start */ /* (should always be ll_fill_super) */ @@ -1243,7 +1256,7 @@ int lustre_fill_super(struct super_block *sb, void *data, int silent) /* If error happens in fill_super() call, @lsi will be killed there. * This is why we do not put it here. */ - GOTO(out, rc); + goto out; out: if (rc) { CERROR("Unable to mount %s (%d)\n", @@ -1276,7 +1289,10 @@ EXPORT_SYMBOL(lustre_register_kill_super_cb); struct dentry *lustre_mount(struct file_system_type *fs_type, int flags, const char *devname, void *data) { - struct lustre_mount_data2 lmd2 = { data, NULL }; + struct lustre_mount_data2 lmd2 = { + .lmd2_data = data, + .lmd2_mnt = NULL + }; return mount_nodev(fs_type, flags, &lmd2, lustre_fill_super); } diff --git a/drivers/staging/lustre/lustre/obdclass/obdo.c b/drivers/staging/lustre/lustre/obdclass/obdo.c index c9fa36b17919..307ffe347186 100644 --- a/drivers/staging/lustre/lustre/obdclass/obdo.c +++ b/drivers/staging/lustre/lustre/obdclass/obdo.c @@ -56,9 +56,9 @@ EXPORT_SYMBOL(obdo_set_parent_fid); /* WARNING: the file systems must take care not to tinker with attributes they don't manage (such as blocks). */ -void obdo_from_inode(struct obdo *dst, struct inode *src, obd_flag valid) +void obdo_from_inode(struct obdo *dst, struct inode *src, u32 valid) { - obd_flag newvalid = 0; + u32 newvalid = 0; if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, "valid %x, new time %lu/%lu\n", @@ -86,7 +86,7 @@ void obdo_from_inode(struct obdo *dst, struct inode *src, obd_flag valid) newvalid |= OBD_MD_FLBLOCKS; } if (valid & OBD_MD_FLBLKSZ) { /* optimal block size */ - dst->o_blksize = ll_inode_blksize(src); + dst->o_blksize = 1 << src->i_blkbits; newvalid |= OBD_MD_FLBLKSZ; } if (valid & OBD_MD_FLTYPE) { @@ -108,14 +108,14 @@ void obdo_from_inode(struct obdo *dst, struct inode *src, obd_flag valid) newvalid |= OBD_MD_FLGID; } if (valid & OBD_MD_FLFLAGS) { - dst->o_flags = ll_inode_flags(src); + dst->o_flags = src->i_flags; newvalid |= OBD_MD_FLFLAGS; } dst->o_valid |= newvalid; } EXPORT_SYMBOL(obdo_from_inode); -void obdo_cpy_md(struct obdo *dst, struct obdo *src, obd_flag valid) +void obdo_cpy_md(struct obdo *dst, struct obdo *src, u32 valid) { CDEBUG(D_INODE, "src obdo "DOSTID" valid %#llx, dst obdo "DOSTID"\n", POSTID(&src->o_oi), src->o_valid, POSTID(&dst->o_oi)); @@ -157,43 +157,43 @@ void obdo_cpy_md(struct obdo *dst, struct obdo *src, obd_flag valid) EXPORT_SYMBOL(obdo_cpy_md); /* returns FALSE if comparison (by flags) is same, TRUE if changed */ -int obdo_cmp_md(struct obdo *dst, struct obdo *src, obd_flag compare) +int obdo_cmp_md(struct obdo *dst, struct obdo *src, u32 compare) { int res = 0; - if ( compare & OBD_MD_FLATIME ) - res = (res || (dst->o_atime != src->o_atime)); - if ( compare & OBD_MD_FLMTIME ) - res = (res || (dst->o_mtime != src->o_mtime)); - if ( compare & OBD_MD_FLCTIME ) - res = (res || (dst->o_ctime != src->o_ctime)); - if ( compare & OBD_MD_FLSIZE ) - res = (res || (dst->o_size != src->o_size)); - if ( compare & OBD_MD_FLBLOCKS ) /* allocation of space */ - res = (res || (dst->o_blocks != src->o_blocks)); - if ( compare & OBD_MD_FLBLKSZ ) - res = (res || (dst->o_blksize != src->o_blksize)); - if ( compare & OBD_MD_FLTYPE ) - res = (res || (((dst->o_mode ^ src->o_mode) & S_IFMT) != 0)); - if ( compare & OBD_MD_FLMODE ) - res = (res || (((dst->o_mode ^ src->o_mode) & ~S_IFMT) != 0)); - if ( compare & OBD_MD_FLUID ) - res = (res || (dst->o_uid != src->o_uid)); - if ( compare & OBD_MD_FLGID ) - res = (res || (dst->o_gid != src->o_gid)); - if ( compare & OBD_MD_FLFLAGS ) - res = (res || (dst->o_flags != src->o_flags)); - if ( compare & OBD_MD_FLNLINK ) - res = (res || (dst->o_nlink != src->o_nlink)); - if ( compare & OBD_MD_FLFID ) { - res = (res || (dst->o_parent_seq != src->o_parent_seq)); - res = (res || (dst->o_parent_ver != src->o_parent_ver)); - } - if ( compare & OBD_MD_FLGENER ) - res = (res || (dst->o_parent_oid != src->o_parent_oid)); + if (compare & OBD_MD_FLATIME) + res |= dst->o_atime != src->o_atime; + if (compare & OBD_MD_FLMTIME) + res |= dst->o_mtime != src->o_mtime; + if (compare & OBD_MD_FLCTIME) + res |= dst->o_ctime != src->o_ctime; + if (compare & OBD_MD_FLSIZE) + res |= dst->o_size != src->o_size; + if (compare & OBD_MD_FLBLOCKS) /* allocation of space */ + res |= dst->o_blocks != src->o_blocks; + if (compare & OBD_MD_FLBLKSZ) + res |= dst->o_blksize != src->o_blksize; + if (compare & OBD_MD_FLTYPE) + res |= ((dst->o_mode ^ src->o_mode) & S_IFMT) != 0; + if (compare & OBD_MD_FLMODE) + res |= ((dst->o_mode ^ src->o_mode) & ~S_IFMT) != 0; + if (compare & OBD_MD_FLUID) + res |= dst->o_uid != src->o_uid; + if (compare & OBD_MD_FLGID) + res |= dst->o_gid != src->o_gid; + if (compare & OBD_MD_FLFLAGS) + res |= dst->o_flags != src->o_flags; + if (compare & OBD_MD_FLNLINK) + res |= dst->o_nlink != src->o_nlink; + if (compare & OBD_MD_FLFID) { + res |= dst->o_parent_seq != src->o_parent_seq; + res |= dst->o_parent_ver != src->o_parent_ver; + } + if (compare & OBD_MD_FLGENER) + res |= dst->o_parent_oid != src->o_parent_oid; /* XXX Don't know if these should be included here - wasn't previously if ( compare & OBD_MD_FLINLINE ) - res = (res || memcmp(dst->o_inline, src->o_inline)); + res |= memcmp(dst->o_inline, src->o_inline); */ return res; } @@ -247,7 +247,7 @@ void obdo_from_iattr(struct obdo *oa, struct iattr *attr, unsigned int ia_valid) } EXPORT_SYMBOL(obdo_from_iattr); -void iattr_from_obdo(struct iattr *attr, struct obdo *oa, obd_flag valid) +void iattr_from_obdo(struct iattr *attr, struct obdo *oa, u32 valid) { valid &= oa->o_valid; @@ -296,7 +296,7 @@ void iattr_from_obdo(struct iattr *attr, struct obdo *oa, obd_flag valid) } EXPORT_SYMBOL(iattr_from_obdo); -void md_from_obdo(struct md_op_data *op_data, struct obdo *oa, obd_flag valid) +void md_from_obdo(struct md_op_data *op_data, struct obdo *oa, u32 valid) { iattr_from_obdo(&op_data->op_attr, oa, valid); if (valid & OBD_MD_FLBLOCKS) { diff --git a/drivers/staging/lustre/lustre/obdclass/statfs_pack.c b/drivers/staging/lustre/lustre/obdclass/statfs_pack.c index 33b1a83f4014..cc785ab3f29a 100644 --- a/drivers/staging/lustre/lustre/obdclass/statfs_pack.c +++ b/drivers/staging/lustre/lustre/obdclass/statfs_pack.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_CLASS - +#include <linux/statfs.h> #include "../include/lustre_export.h" #include "../include/lustre_net.h" #include "../include/obd_support.h" diff --git a/drivers/staging/lustre/lustre/obdecho/echo.c b/drivers/staging/lustre/lustre/obdecho/echo.c deleted file mode 100644 index dae1599af384..000000000000 --- a/drivers/staging/lustre/lustre/obdecho/echo.c +++ /dev/null @@ -1,671 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - * - * 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 - * 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) 2002, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2010, 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * lustre/obdecho/echo.c - * - * Author: Peter Braam <braam@clusterfs.com> - * Author: Andreas Dilger <adilger@clusterfs.com> - */ - -#define DEBUG_SUBSYSTEM S_ECHO - -#include "../include/obd_support.h" -#include "../include/obd_class.h" -#include "../include/lustre_debug.h" -#include "../include/lustre_dlm.h" -#include "../include/lprocfs_status.h" - -#include "echo_internal.h" - -/* The echo objid needs to be below 2^32, because regular FID numbers are - * limited to 2^32 objects in f_oid for the FID_SEQ_ECHO range. b=23335 */ -#define ECHO_INIT_OID 0x10000000ULL -#define ECHO_HANDLE_MAGIC 0xabcd0123fedc9876ULL - -#define ECHO_PERSISTENT_PAGES (ECHO_PERSISTENT_SIZE >> PAGE_CACHE_SHIFT) -static struct page *echo_persistent_pages[ECHO_PERSISTENT_PAGES]; - -enum { - LPROC_ECHO_READ_BYTES = 1, - LPROC_ECHO_WRITE_BYTES = 2, - LPROC_ECHO_LAST = LPROC_ECHO_WRITE_BYTES +1 -}; - -static int echo_connect(const struct lu_env *env, - struct obd_export **exp, struct obd_device *obd, - struct obd_uuid *cluuid, struct obd_connect_data *data, - void *localdata) -{ - struct lustre_handle conn = { 0 }; - int rc; - - data->ocd_connect_flags &= ECHO_CONNECT_SUPPORTED; - rc = class_connect(&conn, obd, cluuid); - if (rc) { - CERROR("can't connect %d\n", rc); - return rc; - } - *exp = class_conn2export(&conn); - - return 0; -} - -static int echo_disconnect(struct obd_export *exp) -{ - LASSERT (exp != NULL); - - return server_disconnect_export(exp); -} - -static int echo_init_export(struct obd_export *exp) -{ - return ldlm_init_export(exp); -} - -static int echo_destroy_export(struct obd_export *exp) -{ - target_destroy_export(exp); - ldlm_destroy_export(exp); - - return 0; -} - - static __u64 echo_next_id(struct obd_device *obddev) -{ - obd_id id; - - spin_lock(&obddev->u.echo.eo_lock); - id = ++obddev->u.echo.eo_lastino; - spin_unlock(&obddev->u.echo.eo_lock); - - return id; -} - -static int echo_create(const struct lu_env *env, struct obd_export *exp, - struct obdo *oa, struct lov_stripe_md **ea, - struct obd_trans_info *oti) -{ - struct obd_device *obd = class_exp2obd(exp); - - if (!obd) { - CERROR("invalid client cookie %#llx\n", - exp->exp_handle.h_cookie); - return -EINVAL; - } - - if (!(oa->o_mode & S_IFMT)) { - CERROR("echo obd: no type!\n"); - return -ENOENT; - } - - if (!(oa->o_valid & OBD_MD_FLTYPE)) { - CERROR("invalid o_valid %#llx\n", oa->o_valid); - return -EINVAL; - } - - ostid_set_seq_echo(&oa->o_oi); - ostid_set_id(&oa->o_oi, echo_next_id(obd)); - oa->o_valid = OBD_MD_FLID; - - return 0; -} - -static int echo_destroy(const struct lu_env *env, struct obd_export *exp, - struct obdo *oa, struct lov_stripe_md *ea, - struct obd_trans_info *oti, struct obd_export *md_exp, - void *capa) -{ - struct obd_device *obd = class_exp2obd(exp); - - if (!obd) { - CERROR("invalid client cookie %#llx\n", - exp->exp_handle.h_cookie); - return -EINVAL; - } - - if (!(oa->o_valid & OBD_MD_FLID)) { - CERROR("obdo missing FLID valid flag: %#llx\n", oa->o_valid); - return -EINVAL; - } - - if (ostid_id(&oa->o_oi) > obd->u.echo.eo_lastino || - ostid_id(&oa->o_oi) < ECHO_INIT_OID) { - CERROR("bad destroy objid: "DOSTID"\n", POSTID(&oa->o_oi)); - return -EINVAL; - } - - return 0; -} - -static int echo_getattr(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo) -{ - struct obd_device *obd = class_exp2obd(exp); - obd_id id = ostid_id(&oinfo->oi_oa->o_oi); - - if (!obd) { - CERROR("invalid client cookie %#llx\n", - exp->exp_handle.h_cookie); - return -EINVAL; - } - - if (!(oinfo->oi_oa->o_valid & OBD_MD_FLID)) { - CERROR("obdo missing FLID valid flag: %#llx\n", - oinfo->oi_oa->o_valid); - return -EINVAL; - } - - obdo_cpy_md(oinfo->oi_oa, &obd->u.echo.eo_oa, oinfo->oi_oa->o_valid); - ostid_set_seq_echo(&oinfo->oi_oa->o_oi); - ostid_set_id(&oinfo->oi_oa->o_oi, id); - - return 0; -} - -static int echo_setattr(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo, struct obd_trans_info *oti) -{ - struct obd_device *obd = class_exp2obd(exp); - - if (!obd) { - CERROR("invalid client cookie %#llx\n", - exp->exp_handle.h_cookie); - return -EINVAL; - } - - if (!(oinfo->oi_oa->o_valid & OBD_MD_FLID)) { - CERROR("obdo missing FLID valid flag: %#llx\n", - oinfo->oi_oa->o_valid); - return -EINVAL; - } - - memcpy(&obd->u.echo.eo_oa, oinfo->oi_oa, sizeof(*oinfo->oi_oa)); - - if (ostid_id(&oinfo->oi_oa->o_oi) & 4) { - /* Save lock to force ACKed reply */ - ldlm_lock_addref (&obd->u.echo.eo_nl_lock, LCK_NL); - oti->oti_ack_locks[0].mode = LCK_NL; - oti->oti_ack_locks[0].lock = obd->u.echo.eo_nl_lock; - } - - return 0; -} - -static void -echo_page_debug_setup(struct page *page, int rw, obd_id id, - __u64 offset, int len) -{ - int page_offset = offset & ~CFS_PAGE_MASK; - char *addr = ((char *)kmap(page)) + page_offset; - - if (len % OBD_ECHO_BLOCK_SIZE != 0) - CERROR("Unexpected block size %d\n", len); - - while (len > 0) { - if (rw & OBD_BRW_READ) - block_debug_setup(addr, OBD_ECHO_BLOCK_SIZE, - offset, id); - else - block_debug_setup(addr, OBD_ECHO_BLOCK_SIZE, - 0xecc0ecc0ecc0ecc0ULL, - 0xecc0ecc0ecc0ecc0ULL); - - addr += OBD_ECHO_BLOCK_SIZE; - offset += OBD_ECHO_BLOCK_SIZE; - len -= OBD_ECHO_BLOCK_SIZE; - } - - kunmap(page); -} - -static int -echo_page_debug_check(struct page *page, obd_id id, - __u64 offset, int len) -{ - int page_offset = offset & ~CFS_PAGE_MASK; - char *addr = ((char *)kmap(page)) + page_offset; - int rc = 0; - int rc2; - - if (len % OBD_ECHO_BLOCK_SIZE != 0) - CERROR("Unexpected block size %d\n", len); - - while (len > 0) { - rc2 = block_debug_check("echo", addr, OBD_ECHO_BLOCK_SIZE, - offset, id); - - if (rc2 != 0 && rc == 0) - rc = rc2; - - addr += OBD_ECHO_BLOCK_SIZE; - offset += OBD_ECHO_BLOCK_SIZE; - len -= OBD_ECHO_BLOCK_SIZE; - } - - kunmap(page); - - return (rc); -} - -/* This allows us to verify that desc_private is passed unmolested */ -#define DESC_PRIV 0x10293847 - -static int echo_map_nb_to_lb(struct obdo *oa, struct obd_ioobj *obj, - struct niobuf_remote *nb, int *pages, - struct niobuf_local *lb, int cmd, int *left) -{ - int gfp_mask = (ostid_id(&obj->ioo_oid) & 1) ? - GFP_HIGHUSER : GFP_IOFS; - int ispersistent = ostid_id(&obj->ioo_oid) == ECHO_PERSISTENT_OBJID; - int debug_setup = (!ispersistent && - (oa->o_valid & OBD_MD_FLFLAGS) != 0 && - (oa->o_flags & OBD_FL_DEBUG_CHECK) != 0); - struct niobuf_local *res = lb; - obd_off offset = nb->offset; - int len = nb->len; - - while (len > 0) { - int plen = PAGE_CACHE_SIZE - (offset & (PAGE_CACHE_SIZE-1)); - if (len < plen) - plen = len; - - /* check for local buf overflow */ - if (*left == 0) - return -EINVAL; - - res->lnb_file_offset = offset; - res->len = plen; - LASSERT((res->lnb_file_offset & ~CFS_PAGE_MASK) + res->len <= - PAGE_CACHE_SIZE); - - if (ispersistent && - ((res->lnb_file_offset >> PAGE_CACHE_SHIFT) < - ECHO_PERSISTENT_PAGES)) { - res->page = - echo_persistent_pages[res->lnb_file_offset >> - PAGE_CACHE_SHIFT]; - /* Take extra ref so __free_pages() can be called OK */ - get_page (res->page); - } else { - OBD_PAGE_ALLOC(res->page, gfp_mask); - if (res->page == NULL) { - CERROR("can't get page for id " DOSTID"\n", - POSTID(&obj->ioo_oid)); - return -ENOMEM; - } - } - - CDEBUG(D_PAGE, "$$$$ get page %p @ %llu for %d\n", - res->page, res->lnb_file_offset, res->len); - - if (cmd & OBD_BRW_READ) - res->rc = res->len; - - if (debug_setup) - echo_page_debug_setup(res->page, cmd, - ostid_id(&obj->ioo_oid), - res->lnb_file_offset, res->len); - - offset += plen; - len -= plen; - res++; - - (*left)--; - (*pages)++; - } - - return 0; -} - -static int echo_finalize_lb(struct obdo *oa, struct obd_ioobj *obj, - struct niobuf_remote *rb, int *pgs, - struct niobuf_local *lb, int verify) -{ - struct niobuf_local *res = lb; - obd_off start = rb->offset >> PAGE_CACHE_SHIFT; - obd_off end = (rb->offset + rb->len + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; - int count = (int)(end - start); - int rc = 0; - int i; - - for (i = 0; i < count; i++, (*pgs) ++, res++) { - struct page *page = res->page; - void *addr; - - if (page == NULL) { - CERROR("null page objid %llu:%p, buf %d/%d\n", - ostid_id(&obj->ioo_oid), page, i, - obj->ioo_bufcnt); - return -EFAULT; - } - - addr = kmap(page); - - CDEBUG(D_PAGE, "$$$$ use page %p, addr %p@%llu\n", - res->page, addr, res->lnb_file_offset); - - if (verify) { - int vrc = echo_page_debug_check(page, - ostid_id(&obj->ioo_oid), - res->lnb_file_offset, - res->len); - /* check all the pages always */ - if (vrc != 0 && rc == 0) - rc = vrc; - } - - kunmap(page); - /* NB see comment above regarding persistent pages */ - OBD_PAGE_FREE(page); - } - - return rc; -} - -static int echo_preprw(const struct lu_env *env, int cmd, - struct obd_export *export, struct obdo *oa, - int objcount, struct obd_ioobj *obj, - struct niobuf_remote *nb, int *pages, - struct niobuf_local *res, struct obd_trans_info *oti, - struct lustre_capa *unused) -{ - struct obd_device *obd; - int tot_bytes = 0; - int rc = 0; - int i, left; - - obd = export->exp_obd; - if (obd == NULL) - return -EINVAL; - - /* Temp fix to stop falling foul of osc_announce_cached() */ - oa->o_valid &= ~(OBD_MD_FLBLOCKS | OBD_MD_FLGRANT); - - memset(res, 0, sizeof(*res) * *pages); - - CDEBUG(D_PAGE, "%s %d obdos with %d IOs\n", - cmd == OBD_BRW_READ ? "reading" : "writing", objcount, *pages); - - if (oti) - oti->oti_handle = (void *)DESC_PRIV; - - left = *pages; - *pages = 0; - - for (i = 0; i < objcount; i++, obj++) { - int j; - - for (j = 0 ; j < obj->ioo_bufcnt ; j++, nb++) { - - rc = echo_map_nb_to_lb(oa, obj, nb, pages, - res + *pages, cmd, &left); - if (rc) - GOTO(preprw_cleanup, rc); - - tot_bytes += nb->len; - } - } - - atomic_add(*pages, &obd->u.echo.eo_prep); - - if (cmd & OBD_BRW_READ) - lprocfs_counter_add(obd->obd_stats, LPROC_ECHO_READ_BYTES, - tot_bytes); - else - lprocfs_counter_add(obd->obd_stats, LPROC_ECHO_WRITE_BYTES, - tot_bytes); - - CDEBUG(D_PAGE, "%d pages allocated after prep\n", - atomic_read(&obd->u.echo.eo_prep)); - - return 0; - -preprw_cleanup: - /* It is possible that we would rather handle errors by allow - * any already-set-up pages to complete, rather than tearing them - * all down again. I believe that this is what the in-kernel - * prep/commit operations do. - */ - CERROR("cleaning up %u pages (%d obdos)\n", *pages, objcount); - for (i = 0; i < *pages; i++) { - kunmap(res[i].page); - /* NB if this is a persistent page, __free_pages will just - * lose the extra ref gained above */ - OBD_PAGE_FREE(res[i].page); - res[i].page = NULL; - atomic_dec(&obd->u.echo.eo_prep); - } - - return rc; -} - -static int echo_commitrw(const struct lu_env *env, int cmd, - struct obd_export *export, struct obdo *oa, - int objcount, struct obd_ioobj *obj, - struct niobuf_remote *rb, int niocount, - struct niobuf_local *res, struct obd_trans_info *oti, - int rc) -{ - struct obd_device *obd; - int pgs = 0; - int i; - - obd = export->exp_obd; - if (obd == NULL) - return -EINVAL; - - if (rc) - GOTO(commitrw_cleanup, rc); - - if ((cmd & OBD_BRW_RWMASK) == OBD_BRW_READ) { - CDEBUG(D_PAGE, "reading %d obdos with %d IOs\n", - objcount, niocount); - } else { - CDEBUG(D_PAGE, "writing %d obdos with %d IOs\n", - objcount, niocount); - } - - if (niocount && res == NULL) { - CERROR("NULL res niobuf with niocount %d\n", niocount); - return -EINVAL; - } - - LASSERT(oti == NULL || oti->oti_handle == (void *)DESC_PRIV); - - for (i = 0; i < objcount; i++, obj++) { - int verify = (rc == 0 && - ostid_id(&obj->ioo_oid) != ECHO_PERSISTENT_OBJID && - (oa->o_valid & OBD_MD_FLFLAGS) != 0 && - (oa->o_flags & OBD_FL_DEBUG_CHECK) != 0); - int j; - - for (j = 0 ; j < obj->ioo_bufcnt ; j++, rb++) { - int vrc = echo_finalize_lb(oa, obj, rb, &pgs, &res[pgs], - verify); - if (vrc == 0) - continue; - - if (vrc == -EFAULT) - GOTO(commitrw_cleanup, rc = vrc); - - if (rc == 0) - rc = vrc; - } - - } - - atomic_sub(pgs, &obd->u.echo.eo_prep); - - CDEBUG(D_PAGE, "%d pages remain after commit\n", - atomic_read(&obd->u.echo.eo_prep)); - return rc; - -commitrw_cleanup: - atomic_sub(pgs, &obd->u.echo.eo_prep); - - CERROR("cleaning up %d pages (%d obdos)\n", - niocount - pgs - 1, objcount); - - while (pgs < niocount) { - struct page *page = res[pgs++].page; - - if (page == NULL) - continue; - - /* NB see comment above regarding persistent pages */ - OBD_PAGE_FREE(page); - atomic_dec(&obd->u.echo.eo_prep); - } - return rc; -} - -static int echo_setup(struct obd_device *obd, struct lustre_cfg *lcfg) -{ - struct lprocfs_static_vars lvars; - int rc; - __u64 lock_flags = 0; - struct ldlm_res_id res_id = {.name = {1}}; - char ns_name[48]; - - obd->u.echo.eo_obt.obt_magic = OBT_MAGIC; - spin_lock_init(&obd->u.echo.eo_lock); - obd->u.echo.eo_lastino = ECHO_INIT_OID; - - sprintf(ns_name, "echotgt-%s", obd->obd_uuid.uuid); - obd->obd_namespace = ldlm_namespace_new(obd, ns_name, - LDLM_NAMESPACE_SERVER, - LDLM_NAMESPACE_MODEST, - LDLM_NS_TYPE_OST); - if (obd->obd_namespace == NULL) { - LBUG(); - return -ENOMEM; - } - - rc = ldlm_cli_enqueue_local(obd->obd_namespace, &res_id, LDLM_PLAIN, - NULL, LCK_NL, &lock_flags, NULL, - ldlm_completion_ast, NULL, NULL, 0, - LVB_T_NONE, NULL, &obd->u.echo.eo_nl_lock); - LASSERT (rc == ELDLM_OK); - - lprocfs_echo_init_vars(&lvars); - if (lprocfs_obd_setup(obd, lvars.obd_vars) == 0 && - lprocfs_alloc_obd_stats(obd, LPROC_ECHO_LAST) == 0) { - lprocfs_counter_init(obd->obd_stats, LPROC_ECHO_READ_BYTES, - LPROCFS_CNTR_AVGMINMAX, - "read_bytes", "bytes"); - lprocfs_counter_init(obd->obd_stats, LPROC_ECHO_WRITE_BYTES, - LPROCFS_CNTR_AVGMINMAX, - "write_bytes", "bytes"); - } - - ptlrpc_init_client (LDLM_CB_REQUEST_PORTAL, LDLM_CB_REPLY_PORTAL, - "echo_ldlm_cb_client", &obd->obd_ldlm_client); - return 0; -} - -static int echo_cleanup(struct obd_device *obd) -{ - int leaked; - - lprocfs_obd_cleanup(obd); - lprocfs_free_obd_stats(obd); - - ldlm_lock_decref(&obd->u.echo.eo_nl_lock, LCK_NL); - - /* XXX Bug 3413; wait for a bit to ensure the BL callback has - * happened before calling ldlm_namespace_free() */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(cfs_time_seconds(1)); - - ldlm_namespace_free(obd->obd_namespace, NULL, obd->obd_force); - obd->obd_namespace = NULL; - - leaked = atomic_read(&obd->u.echo.eo_prep); - if (leaked != 0) - CERROR("%d prep/commitrw pages leaked\n", leaked); - - return 0; -} - -struct obd_ops echo_obd_ops = { - .o_owner = THIS_MODULE, - .o_connect = echo_connect, - .o_disconnect = echo_disconnect, - .o_init_export = echo_init_export, - .o_destroy_export = echo_destroy_export, - .o_create = echo_create, - .o_destroy = echo_destroy, - .o_getattr = echo_getattr, - .o_setattr = echo_setattr, - .o_preprw = echo_preprw, - .o_commitrw = echo_commitrw, - .o_setup = echo_setup, - .o_cleanup = echo_cleanup -}; - -void echo_persistent_pages_fini(void) -{ - int i; - - for (i = 0; i < ECHO_PERSISTENT_PAGES; i++) - if (echo_persistent_pages[i] != NULL) { - OBD_PAGE_FREE(echo_persistent_pages[i]); - echo_persistent_pages[i] = NULL; - } -} - -int echo_persistent_pages_init(void) -{ - struct page *pg; - int i; - - for (i = 0; i < ECHO_PERSISTENT_PAGES; i++) { - int gfp_mask = (i < ECHO_PERSISTENT_PAGES/2) ? - GFP_IOFS : GFP_HIGHUSER; - - OBD_PAGE_ALLOC(pg, gfp_mask); - if (pg == NULL) { - echo_persistent_pages_fini (); - return (-ENOMEM); - } - - memset (kmap (pg), 0, PAGE_CACHE_SIZE); - kunmap (pg); - - echo_persistent_pages[i] = pg; - } - - return (0); -} diff --git a/drivers/staging/lustre/lustre/obdecho/echo_client.c b/drivers/staging/lustre/lustre/obdecho/echo_client.c index f1847f3f579d..98e4290919d0 100644 --- a/drivers/staging/lustre/lustre/obdecho/echo_client.c +++ b/drivers/staging/lustre/lustre/obdecho/echo_client.c @@ -43,7 +43,6 @@ #include "../include/lustre_debug.h" #include "../include/lprocfs_status.h" #include "../include/cl_object.h" -#include "../include/md_object.h" #include "../include/lustre_fid.h" #include "../include/lustre_acl.h" #include "../include/lustre_net.h" @@ -62,8 +61,6 @@ struct echo_device { struct cl_site *ed_site; struct lu_device *ed_next; int ed_next_islov; - int ed_next_ismd; - struct lu_client_seq *ed_cl_seq; }; struct echo_object { @@ -96,16 +93,6 @@ struct echo_lock { atomic_t el_refcount; }; -struct echo_io { - struct cl_io_slice ei_cl; -}; - -#if 0 -struct echo_req { - struct cl_req_slice er_cl; -}; -#endif - static int echo_client_setup(const struct lu_env *env, struct obd_device *obddev, struct lustre_cfg *lcfg); @@ -175,10 +162,10 @@ struct echo_object_conf *cl2echo_conf(const struct cl_object_conf *c) static struct echo_object *cl_echo_object_find(struct echo_device *d, struct lov_stripe_md **lsm); static int cl_echo_object_put(struct echo_object *eco); -static int cl_echo_enqueue (struct echo_object *eco, obd_off start, - obd_off end, int mode, __u64 *cookie); -static int cl_echo_cancel (struct echo_device *d, __u64 cookie); -static int cl_echo_object_brw(struct echo_object *eco, int rw, obd_off offset, +static int cl_echo_enqueue(struct echo_object *eco, u64 start, + u64 end, int mode, __u64 *cookie); +static int cl_echo_cancel(struct echo_device *d, __u64 cookie); +static int cl_echo_object_brw(struct echo_object *eco, int rw, u64 offset, struct page **pages, int npages, int async); static struct echo_thread_info *echo_env_info(const struct lu_env *env); @@ -192,17 +179,6 @@ struct echo_thread_info { struct cl_lock_descr eti_descr; struct lu_fid eti_fid; struct lu_fid eti_fid2; - struct md_op_spec eti_spec; - struct lov_mds_md_v3 eti_lmm; - struct lov_user_md_v3 eti_lum; - struct md_attr eti_ma; - struct lu_name eti_lname; - /* per-thread values, can be re-used */ - void *eti_big_lmm; - int eti_big_lmmsize; - char eti_name[20]; - struct lu_buf eti_buf; - char eti_xattr_buf[LUSTRE_POSIX_ACL_MAX_SIZE]; }; /* No session used right now */ @@ -214,7 +190,6 @@ static struct kmem_cache *echo_lock_kmem; static struct kmem_cache *echo_object_kmem; static struct kmem_cache *echo_thread_kmem; static struct kmem_cache *echo_session_kmem; -//static struct kmem_cache *echo_req_kmem; static struct lu_kmem_descr echo_caches[] = { { @@ -237,13 +212,6 @@ static struct lu_kmem_descr echo_caches[] = { .ckd_name = "echo_session_kmem", .ckd_size = sizeof (struct echo_session_info) }, -#if 0 - { - .ckd_cache = &echo_req_kmem, - .ckd_name = "echo_req_kmem", - .ckd_size = sizeof (struct echo_req) - }, -#endif { .ckd_cache = NULL } @@ -463,6 +431,8 @@ static int echo_object_init(const struct lu_env *env, struct lu_object *obj, struct echo_device *ed = cl2echo_dev(lu2cl_dev(obj->lo_dev)); struct echo_client_obd *ec = ed->ed_ec; struct echo_object *eco = cl2echo_obj(lu2cl(obj)); + const struct cl_object_conf *cconf; + struct echo_object_conf *econf; if (ed->ed_next) { struct lu_object *below; @@ -476,17 +446,13 @@ static int echo_object_init(const struct lu_env *env, struct lu_object *obj, lu_object_add(obj, below); } - if (!ed->ed_next_ismd) { - const struct cl_object_conf *cconf = lu2cl_conf(conf); - struct echo_object_conf *econf = cl2echo_conf(cconf); + cconf = lu2cl_conf(conf); + econf = cl2echo_conf(cconf); - LASSERT(econf->eoc_md); - eco->eo_lsm = *econf->eoc_md; - /* clear the lsm pointer so that it won't get freed. */ - *econf->eoc_md = NULL; - } else { - eco->eo_lsm = NULL; - } + LASSERT(econf->eoc_md); + eco->eo_lsm = *econf->eoc_md; + /* clear the lsm pointer so that it won't get freed. */ + *econf->eoc_md = NULL; eco->eo_dev = ed; atomic_set(&eco->eo_npages, 0); @@ -651,8 +617,7 @@ static int echo_site_init(const struct lu_env *env, struct echo_device *ed) static void echo_site_fini(const struct lu_env *env, struct echo_device *ed) { if (ed->ed_site) { - if (!ed->ed_next_ismd) - cl_site_fini(ed->ed_site); + cl_site_fini(ed->ed_site); ed->ed_site = NULL; } } @@ -719,53 +684,6 @@ static struct lu_context_key echo_session_key = { LU_TYPE_INIT_FINI(echo, &echo_thread_key, &echo_session_key); -#define ECHO_SEQ_WIDTH 0xffffffff -static int echo_fid_init(struct echo_device *ed, char *obd_name, - struct seq_server_site *ss) -{ - char *prefix; - int rc; - - OBD_ALLOC_PTR(ed->ed_cl_seq); - if (ed->ed_cl_seq == NULL) - return -ENOMEM; - - OBD_ALLOC(prefix, MAX_OBD_NAME + 5); - if (prefix == NULL) - GOTO(out_free_seq, rc = -ENOMEM); - - snprintf(prefix, MAX_OBD_NAME + 5, "srv-%s", obd_name); - - /* Init client side sequence-manager */ - rc = seq_client_init(ed->ed_cl_seq, NULL, - LUSTRE_SEQ_METADATA, - prefix, ss->ss_server_seq); - ed->ed_cl_seq->lcs_width = ECHO_SEQ_WIDTH; - OBD_FREE(prefix, MAX_OBD_NAME + 5); - if (rc) - GOTO(out_free_seq, rc); - - return 0; - -out_free_seq: - OBD_FREE_PTR(ed->ed_cl_seq); - ed->ed_cl_seq = NULL; - return rc; -} - -static int echo_fid_fini(struct obd_device *obddev) -{ - struct echo_device *ed = obd2echo_dev(obddev); - - if (ed->ed_cl_seq != NULL) { - seq_client_fini(ed->ed_cl_seq); - OBD_FREE_PTR(ed->ed_cl_seq); - ed->ed_cl_seq = NULL; - } - - return 0; -} - static struct lu_device *echo_device_alloc(const struct lu_env *env, struct lu_device_type *t, struct lustre_cfg *cfg) @@ -806,13 +724,14 @@ static struct lu_device *echo_device_alloc(const struct lu_env *env, next = tgt->obd_lu_dev; if (!strcmp(tgt->obd_type->typ_name, LUSTRE_MDT_NAME)) { - ed->ed_next_ismd = 1; - } else { - ed->ed_next_ismd = 0; - rc = echo_site_init(env, ed); - if (rc) - GOTO(out, rc); + CERROR("echo MDT client must be run on server\n"); + GOTO(out, rc = -EOPNOTSUPP); } + + rc = echo_site_init(env, ed); + if (rc) + GOTO(out, rc); + cleanup = 3; rc = echo_client_setup(env, obd, cfg); @@ -822,88 +741,40 @@ static struct lu_device *echo_device_alloc(const struct lu_env *env, ed->ed_ec = &obd->u.echo_client; cleanup = 4; - if (ed->ed_next_ismd) { - /* Suppose to connect to some Metadata layer */ - struct lu_site *ls; - struct lu_device *ld; - int found = 0; - - if (next == NULL) { - CERROR("%s is not lu device type!\n", - lustre_cfg_string(cfg, 1)); - GOTO(out, rc = -EINVAL); - } - - tgt_type_name = lustre_cfg_string(cfg, 2); - if (!tgt_type_name) { - CERROR("%s no type name for echo %s setup\n", - lustre_cfg_string(cfg, 1), - tgt->obd_type->typ_name); - GOTO(out, rc = -EINVAL); - } - - ls = next->ld_site; - - spin_lock(&ls->ls_ld_lock); - list_for_each_entry(ld, &ls->ls_ld_linkage, ld_linkage) { - if (strcmp(ld->ld_type->ldt_name, tgt_type_name) == 0) { - found = 1; - break; - } - } - spin_unlock(&ls->ls_ld_lock); - - if (found == 0) { - CERROR("%s is not lu device type!\n", - lustre_cfg_string(cfg, 1)); - GOTO(out, rc = -EINVAL); - } - - next = ld; - /* For MD echo client, it will use the site in MDS stack */ - ed->ed_site_myself.cs_lu = *ls; - ed->ed_site = &ed->ed_site_myself; - ed->ed_cl.cd_lu_dev.ld_site = &ed->ed_site_myself.cs_lu; - rc = echo_fid_init(ed, obd->obd_name, lu_site2seq(ls)); - if (rc) { - CERROR("echo fid init error %d\n", rc); + /* if echo client is to be stacked upon ost device, the next is + * NULL since ost is not a clio device so far */ + if (next != NULL && !lu_device_is_cl(next)) + next = NULL; + + tgt_type_name = tgt->obd_type->typ_name; + if (next != NULL) { + LASSERT(next != NULL); + if (next->ld_site != NULL) + GOTO(out, rc = -EBUSY); + + next->ld_site = &ed->ed_site->cs_lu; + rc = next->ld_type->ldt_ops->ldto_device_init(env, next, + next->ld_type->ldt_name, + NULL); + if (rc) GOTO(out, rc); - } + + /* Tricky case, I have to determine the obd type since + * CLIO uses the different parameters to initialize + * objects for lov & osc. */ + if (strcmp(tgt_type_name, LUSTRE_LOV_NAME) == 0) + ed->ed_next_islov = 1; + else + LASSERT(strcmp(tgt_type_name, + LUSTRE_OSC_NAME) == 0); } else { - /* if echo client is to be stacked upon ost device, the next is - * NULL since ost is not a clio device so far */ - if (next != NULL && !lu_device_is_cl(next)) - next = NULL; - - tgt_type_name = tgt->obd_type->typ_name; - if (next != NULL) { - LASSERT(next != NULL); - if (next->ld_site != NULL) - GOTO(out, rc = -EBUSY); - - next->ld_site = &ed->ed_site->cs_lu; - rc = next->ld_type->ldt_ops->ldto_device_init(env, next, - next->ld_type->ldt_name, - NULL); - if (rc) - GOTO(out, rc); - - /* Tricky case, I have to determine the obd type since - * CLIO uses the different parameters to initialize - * objects for lov & osc. */ - if (strcmp(tgt_type_name, LUSTRE_LOV_NAME) == 0) - ed->ed_next_islov = 1; - else - LASSERT(strcmp(tgt_type_name, - LUSTRE_OSC_NAME) == 0); - } else - LASSERT(strcmp(tgt_type_name, LUSTRE_OST_NAME) == 0); + LASSERT(strcmp(tgt_type_name, LUSTRE_OST_NAME) == 0); } ed->ed_next = next; return &cd->cd_lu_dev; out: - switch(cleanup) { + switch (cleanup) { case 4: { int rc2; rc2 = echo_client_cleanup(obd); @@ -922,7 +793,7 @@ out: default: break; } - return(ERR_PTR(rc)); + return ERR_PTR(rc); } static int echo_device_init(const struct lu_env *env, struct lu_device *d, @@ -938,7 +809,7 @@ static struct lu_device *echo_device_fini(const struct lu_env *env, struct echo_device *ed = cl2echo_dev(lu2cl_dev(d)); struct lu_device *next = ed->ed_next; - while (next && !ed->ed_next_ismd) + while (next) next = next->ld_type->ldt_ops->ldto_device_fini(env, next); return NULL; } @@ -1008,8 +879,8 @@ static struct lu_device *echo_device_free(const struct lu_env *env, CDEBUG(D_INFO, "No object exists, exiting...\n"); echo_client_cleanup(d->ld_obd); - echo_fid_fini(d->ld_obd); - while (next && !ed->ed_next_ismd) + + while (next) next = next->ld_type->ldt_ops->ldto_device_free(env, next); LASSERT(ed->ed_site == lu2cl_site(d->ld_site)); @@ -1037,7 +908,7 @@ static struct lu_device_type echo_device_type = { .ldt_tags = LU_DEVICE_CL, .ldt_name = LUSTRE_ECHO_CLIENT_NAME, .ldt_ops = &echo_device_type_ops, - .ldt_ctx_tags = LCT_CL_THREAD | LCT_MD_THREAD | LCT_DT_THREAD, + .ldt_ctx_tags = LCT_CL_THREAD, }; /** @} echo_init */ @@ -1141,7 +1012,7 @@ static int cl_echo_object_put(struct echo_object *eco) } static int cl_echo_enqueue0(struct lu_env *env, struct echo_object *eco, - obd_off start, obd_off end, int mode, + u64 start, u64 end, int mode, __u64 *cookie , __u32 enqflags) { struct cl_io *io; @@ -1186,7 +1057,7 @@ static int cl_echo_enqueue0(struct lu_env *env, struct echo_object *eco, return rc; } -static int cl_echo_enqueue(struct echo_object *eco, obd_off start, obd_off end, +static int cl_echo_enqueue(struct echo_object *eco, u64 start, u64 end, int mode, __u64 *cookie) { struct echo_thread_info *info; @@ -1280,7 +1151,7 @@ static int cl_echo_async_brw(const struct lu_env *env, struct cl_io *io, return result; } -static int cl_echo_object_brw(struct echo_object *eco, int rw, obd_off offset, +static int cl_echo_object_brw(struct echo_object *eco, int rw, u64 offset, struct page **pages, int npages, int async) { struct lu_env *env; @@ -1374,7 +1245,7 @@ out: /** @} echo_exports */ -static obd_id last_object_id; +static u64 last_object_id; static int echo_copyout_lsm (struct lov_stripe_md *lsm, void *_ulsm, int ulsm_nob) @@ -1384,15 +1255,15 @@ echo_copyout_lsm (struct lov_stripe_md *lsm, void *_ulsm, int ulsm_nob) nob = offsetof (struct lov_stripe_md, lsm_oinfo[lsm->lsm_stripe_count]); if (nob > ulsm_nob) - return (-EINVAL); + return -EINVAL; if (copy_to_user (ulsm, lsm, sizeof(*ulsm))) - return (-EFAULT); + return -EFAULT; for (i = 0; i < lsm->lsm_stripe_count; i++) { if (copy_to_user (ulsm->lsm_oinfo[i], lsm->lsm_oinfo[i], sizeof(lsm->lsm_oinfo[0]))) - return (-EFAULT); + return -EFAULT; } return 0; } @@ -1405,16 +1276,16 @@ echo_copyin_lsm (struct echo_device *ed, struct lov_stripe_md *lsm, int i; if (ulsm_nob < sizeof (*lsm)) - return (-EINVAL); + return -EINVAL; if (copy_from_user (lsm, ulsm, sizeof (*lsm))) - return (-EFAULT); + return -EFAULT; if (lsm->lsm_stripe_count > ec->ec_nstripes || lsm->lsm_magic != LOV_MAGIC || (lsm->lsm_stripe_size & (~CFS_PAGE_MASK)) != 0 || ((__u64)lsm->lsm_stripe_size * lsm->lsm_stripe_count > ~0UL)) - return (-EINVAL); + return -EINVAL; for (i = 0; i < lsm->lsm_stripe_count; i++) { @@ -1422,778 +1293,11 @@ echo_copyin_lsm (struct echo_device *ed, struct lov_stripe_md *lsm, ((struct lov_stripe_md *)ulsm)-> \ lsm_oinfo[i], sizeof(lsm->lsm_oinfo[0]))) - return (-EFAULT); - } - return (0); -} - -static inline void echo_md_build_name(struct lu_name *lname, char *name, - __u64 id) -{ - sprintf(name, "%llu", id); - lname->ln_name = name; - lname->ln_namelen = strlen(name); -} - -/* similar to mdt_attr_get_complex */ -static int echo_big_lmm_get(const struct lu_env *env, struct md_object *o, - struct md_attr *ma) -{ - struct echo_thread_info *info = echo_env_info(env); - int rc; - - LASSERT(ma->ma_lmm_size > 0); - - rc = mo_xattr_get(env, o, &LU_BUF_NULL, XATTR_NAME_LOV); - if (rc < 0) - return rc; - - /* big_lmm may need to be grown */ - if (info->eti_big_lmmsize < rc) { - int size = size_roundup_power2(rc); - - if (info->eti_big_lmmsize > 0) { - /* free old buffer */ - LASSERT(info->eti_big_lmm); - OBD_FREE_LARGE(info->eti_big_lmm, - info->eti_big_lmmsize); - info->eti_big_lmm = NULL; - info->eti_big_lmmsize = 0; - } - - OBD_ALLOC_LARGE(info->eti_big_lmm, size); - if (info->eti_big_lmm == NULL) - return -ENOMEM; - info->eti_big_lmmsize = size; - } - LASSERT(info->eti_big_lmmsize >= rc); - - info->eti_buf.lb_buf = info->eti_big_lmm; - info->eti_buf.lb_len = info->eti_big_lmmsize; - rc = mo_xattr_get(env, o, &info->eti_buf, XATTR_NAME_LOV); - if (rc < 0) - return rc; - - ma->ma_valid |= MA_LOV; - ma->ma_lmm = info->eti_big_lmm; - ma->ma_lmm_size = rc; - - return 0; -} - -int echo_attr_get_complex(const struct lu_env *env, struct md_object *next, - struct md_attr *ma) -{ - struct echo_thread_info *info = echo_env_info(env); - struct lu_buf *buf = &info->eti_buf; - umode_t mode = lu_object_attr(&next->mo_lu); - int need = ma->ma_need; - int rc = 0, rc2; - - ma->ma_valid = 0; - - if (need & MA_INODE) { - ma->ma_need = MA_INODE; - rc = mo_attr_get(env, next, ma); - if (rc) - GOTO(out, rc); - ma->ma_valid |= MA_INODE; - } - - if (need & MA_LOV) { - if (S_ISREG(mode) || S_ISDIR(mode)) { - LASSERT(ma->ma_lmm_size > 0); - buf->lb_buf = ma->ma_lmm; - buf->lb_len = ma->ma_lmm_size; - rc2 = mo_xattr_get(env, next, buf, XATTR_NAME_LOV); - if (rc2 > 0) { - ma->ma_lmm_size = rc2; - ma->ma_valid |= MA_LOV; - } else if (rc2 == -ENODATA) { - /* no LOV EA */ - ma->ma_lmm_size = 0; - } else if (rc2 == -ERANGE) { - rc2 = echo_big_lmm_get(env, next, ma); - if (rc2 < 0) - GOTO(out, rc = rc2); - } else { - GOTO(out, rc = rc2); - } - } - } - -#ifdef CONFIG_FS_POSIX_ACL - if (need & MA_ACL_DEF && S_ISDIR(mode)) { - buf->lb_buf = ma->ma_acl; - buf->lb_len = ma->ma_acl_size; - rc2 = mo_xattr_get(env, next, buf, XATTR_NAME_ACL_DEFAULT); - if (rc2 > 0) { - ma->ma_acl_size = rc2; - ma->ma_valid |= MA_ACL_DEF; - } else if (rc2 == -ENODATA) { - /* no ACLs */ - ma->ma_acl_size = 0; - } else { - GOTO(out, rc = rc2); - } - } -#endif -out: - ma->ma_need = need; - CDEBUG(D_INODE, "after getattr rc = %d, ma_valid = %#llx ma_lmm=%p\n", - rc, ma->ma_valid, ma->ma_lmm); - return rc; -} - -static int -echo_md_create_internal(const struct lu_env *env, struct echo_device *ed, - struct md_object *parent, struct lu_fid *fid, - struct lu_name *lname, struct md_op_spec *spec, - struct md_attr *ma) -{ - struct lu_object *ec_child, *child; - struct lu_device *ld = ed->ed_next; - struct echo_thread_info *info = echo_env_info(env); - struct lu_fid *fid2 = &info->eti_fid2; - struct lu_object_conf conf = { .loc_flags = LOC_F_NEW }; - int rc; - - rc = mdo_lookup(env, parent, lname, fid2, spec); - if (rc == 0) - return -EEXIST; - else if (rc != -ENOENT) - return rc; - - ec_child = lu_object_find_at(env, &ed->ed_cl.cd_lu_dev, - fid, &conf); - if (IS_ERR(ec_child)) { - CERROR("Can not find the child "DFID": rc = %ld\n", PFID(fid), - PTR_ERR(ec_child)); - return PTR_ERR(ec_child); - } - - child = lu_object_locate(ec_child->lo_header, ld->ld_type); - if (child == NULL) { - CERROR("Can not locate the child "DFID"\n", PFID(fid)); - GOTO(out_put, rc = -EINVAL); - } - - CDEBUG(D_RPCTRACE, "Start creating object "DFID" %s %p\n", - PFID(lu_object_fid(&parent->mo_lu)), lname->ln_name, parent); - - /* - * Do not perform lookup sanity check. We know that name does not exist. - */ - spec->sp_cr_lookup = 0; - rc = mdo_create(env, parent, lname, lu2md(child), spec, ma); - if (rc) { - CERROR("Can not create child "DFID": rc = %d\n", PFID(fid), rc); - GOTO(out_put, rc); - } - CDEBUG(D_RPCTRACE, "End creating object "DFID" %s %p rc = %d\n", - PFID(lu_object_fid(&parent->mo_lu)), lname->ln_name, parent, rc); -out_put: - lu_object_put(env, ec_child); - return rc; -} - -static int echo_set_lmm_size(const struct lu_env *env, struct lu_device *ld, - struct md_attr *ma) -{ - struct echo_thread_info *info = echo_env_info(env); - - if (strcmp(ld->ld_type->ldt_name, LUSTRE_MDD_NAME)) { - ma->ma_lmm = (void *)&info->eti_lmm; - ma->ma_lmm_size = sizeof(info->eti_lmm); - } else { - LASSERT(info->eti_big_lmmsize); - ma->ma_lmm = info->eti_big_lmm; - ma->ma_lmm_size = info->eti_big_lmmsize; + return -EFAULT; } - return 0; } -static int echo_create_md_object(const struct lu_env *env, - struct echo_device *ed, - struct lu_object *ec_parent, - struct lu_fid *fid, - char *name, int namelen, - __u64 id, __u32 mode, int count, - int stripe_count, int stripe_offset) -{ - struct lu_object *parent; - struct echo_thread_info *info = echo_env_info(env); - struct lu_name *lname = &info->eti_lname; - struct md_op_spec *spec = &info->eti_spec; - struct md_attr *ma = &info->eti_ma; - struct lu_device *ld = ed->ed_next; - int rc = 0; - int i; - - if (ec_parent == NULL) - return -1; - parent = lu_object_locate(ec_parent->lo_header, ld->ld_type); - if (parent == NULL) - return -ENXIO; - - memset(ma, 0, sizeof(*ma)); - memset(spec, 0, sizeof(*spec)); - if (stripe_count != 0) { - spec->sp_cr_flags |= FMODE_WRITE; - echo_set_lmm_size(env, ld, ma); - if (stripe_count != -1) { - struct lov_user_md_v3 *lum = &info->eti_lum; - - lum->lmm_magic = LOV_USER_MAGIC_V3; - lum->lmm_stripe_count = stripe_count; - lum->lmm_stripe_offset = stripe_offset; - lum->lmm_pattern = 0; - spec->u.sp_ea.eadata = lum; - spec->u.sp_ea.eadatalen = sizeof(*lum); - spec->sp_cr_flags |= MDS_OPEN_HAS_EA; - } - } - - ma->ma_attr.la_mode = mode; - ma->ma_attr.la_valid = LA_CTIME | LA_MODE; - ma->ma_attr.la_ctime = cfs_time_current_64(); - - if (name != NULL) { - lname->ln_name = name; - lname->ln_namelen = namelen; - /* If name is specified, only create one object by name */ - rc = echo_md_create_internal(env, ed, lu2md(parent), fid, lname, - spec, ma); - return rc; - } - - /* Create multiple object sequenced by id */ - for (i = 0; i < count; i++) { - char *tmp_name = info->eti_name; - - echo_md_build_name(lname, tmp_name, id); - - rc = echo_md_create_internal(env, ed, lu2md(parent), fid, lname, - spec, ma); - if (rc) { - CERROR("Can not create child %s: rc = %d\n", tmp_name, - rc); - break; - } - id++; - fid->f_oid++; - } - - return rc; -} - -static struct lu_object *echo_md_lookup(const struct lu_env *env, - struct echo_device *ed, - struct md_object *parent, - struct lu_name *lname) -{ - struct echo_thread_info *info = echo_env_info(env); - struct lu_fid *fid = &info->eti_fid; - struct lu_object *child; - int rc; - - CDEBUG(D_INFO, "lookup %s in parent "DFID" %p\n", lname->ln_name, - PFID(fid), parent); - rc = mdo_lookup(env, parent, lname, fid, NULL); - if (rc) { - CERROR("lookup %s: rc = %d\n", lname->ln_name, rc); - return ERR_PTR(rc); - } - - /* In the function below, .hs_keycmp resolves to - * lu_obj_hop_keycmp() */ - /* coverity[overrun-buffer-val] */ - child = lu_object_find_at(env, &ed->ed_cl.cd_lu_dev, fid, NULL); - - return child; -} - -static int echo_setattr_object(const struct lu_env *env, - struct echo_device *ed, - struct lu_object *ec_parent, - __u64 id, int count) -{ - struct lu_object *parent; - struct echo_thread_info *info = echo_env_info(env); - struct lu_name *lname = &info->eti_lname; - char *name = info->eti_name; - struct lu_device *ld = ed->ed_next; - struct lu_buf *buf = &info->eti_buf; - int rc = 0; - int i; - - if (ec_parent == NULL) - return -1; - parent = lu_object_locate(ec_parent->lo_header, ld->ld_type); - if (parent == NULL) - return -ENXIO; - - for (i = 0; i < count; i++) { - struct lu_object *ec_child, *child; - - echo_md_build_name(lname, name, id); - - ec_child = echo_md_lookup(env, ed, lu2md(parent), lname); - if (IS_ERR(ec_child)) { - CERROR("Can't find child %s: rc = %ld\n", - lname->ln_name, PTR_ERR(ec_child)); - return PTR_ERR(ec_child); - } - - child = lu_object_locate(ec_child->lo_header, ld->ld_type); - if (child == NULL) { - CERROR("Can not locate the child %s\n", lname->ln_name); - lu_object_put(env, ec_child); - rc = -EINVAL; - break; - } - - CDEBUG(D_RPCTRACE, "Start setattr object "DFID"\n", - PFID(lu_object_fid(child))); - - buf->lb_buf = info->eti_xattr_buf; - buf->lb_len = sizeof(info->eti_xattr_buf); - - sprintf(name, "%s.test1", XATTR_USER_PREFIX); - rc = mo_xattr_set(env, lu2md(child), buf, name, - LU_XATTR_CREATE); - if (rc < 0) { - CERROR("Can not setattr child "DFID": rc = %d\n", - PFID(lu_object_fid(child)), rc); - lu_object_put(env, ec_child); - break; - } - CDEBUG(D_RPCTRACE, "End setattr object "DFID"\n", - PFID(lu_object_fid(child))); - id++; - lu_object_put(env, ec_child); - } - return rc; -} - -static int echo_getattr_object(const struct lu_env *env, - struct echo_device *ed, - struct lu_object *ec_parent, - __u64 id, int count) -{ - struct lu_object *parent; - struct echo_thread_info *info = echo_env_info(env); - struct lu_name *lname = &info->eti_lname; - char *name = info->eti_name; - struct md_attr *ma = &info->eti_ma; - struct lu_device *ld = ed->ed_next; - int rc = 0; - int i; - - if (ec_parent == NULL) - return -1; - parent = lu_object_locate(ec_parent->lo_header, ld->ld_type); - if (parent == NULL) - return -ENXIO; - - memset(ma, 0, sizeof(*ma)); - ma->ma_need |= MA_INODE | MA_LOV | MA_PFID | MA_HSM | MA_ACL_DEF; - ma->ma_acl = info->eti_xattr_buf; - ma->ma_acl_size = sizeof(info->eti_xattr_buf); - - for (i = 0; i < count; i++) { - struct lu_object *ec_child, *child; - - ma->ma_valid = 0; - echo_md_build_name(lname, name, id); - echo_set_lmm_size(env, ld, ma); - - ec_child = echo_md_lookup(env, ed, lu2md(parent), lname); - if (IS_ERR(ec_child)) { - CERROR("Can't find child %s: rc = %ld\n", - lname->ln_name, PTR_ERR(ec_child)); - return PTR_ERR(ec_child); - } - - child = lu_object_locate(ec_child->lo_header, ld->ld_type); - if (child == NULL) { - CERROR("Can not locate the child %s\n", lname->ln_name); - lu_object_put(env, ec_child); - return -EINVAL; - } - - CDEBUG(D_RPCTRACE, "Start getattr object "DFID"\n", - PFID(lu_object_fid(child))); - rc = echo_attr_get_complex(env, lu2md(child), ma); - if (rc) { - CERROR("Can not getattr child "DFID": rc = %d\n", - PFID(lu_object_fid(child)), rc); - lu_object_put(env, ec_child); - break; - } - CDEBUG(D_RPCTRACE, "End getattr object "DFID"\n", - PFID(lu_object_fid(child))); - id++; - lu_object_put(env, ec_child); - } - - return rc; -} - -static int echo_lookup_object(const struct lu_env *env, - struct echo_device *ed, - struct lu_object *ec_parent, - __u64 id, int count) -{ - struct lu_object *parent; - struct echo_thread_info *info = echo_env_info(env); - struct lu_name *lname = &info->eti_lname; - char *name = info->eti_name; - struct lu_fid *fid = &info->eti_fid; - struct lu_device *ld = ed->ed_next; - int rc = 0; - int i; - - if (ec_parent == NULL) - return -1; - parent = lu_object_locate(ec_parent->lo_header, ld->ld_type); - if (parent == NULL) - return -ENXIO; - - /*prepare the requests*/ - for (i = 0; i < count; i++) { - echo_md_build_name(lname, name, id); - - CDEBUG(D_RPCTRACE, "Start lookup object "DFID" %s %p\n", - PFID(lu_object_fid(parent)), lname->ln_name, parent); - - rc = mdo_lookup(env, lu2md(parent), lname, fid, NULL); - if (rc) { - CERROR("Can not lookup child %s: rc = %d\n", name, rc); - break; - } - CDEBUG(D_RPCTRACE, "End lookup object "DFID" %s %p\n", - PFID(lu_object_fid(parent)), lname->ln_name, parent); - - id++; - } - return rc; -} - -static int echo_md_destroy_internal(const struct lu_env *env, - struct echo_device *ed, - struct md_object *parent, - struct lu_name *lname, - struct md_attr *ma) -{ - struct lu_device *ld = ed->ed_next; - struct lu_object *ec_child; - struct lu_object *child; - int rc; - - ec_child = echo_md_lookup(env, ed, parent, lname); - if (IS_ERR(ec_child)) { - CERROR("Can't find child %s: rc = %ld\n", lname->ln_name, - PTR_ERR(ec_child)); - return PTR_ERR(ec_child); - } - - child = lu_object_locate(ec_child->lo_header, ld->ld_type); - if (child == NULL) { - CERROR("Can not locate the child %s\n", lname->ln_name); - GOTO(out_put, rc = -EINVAL); - } - - CDEBUG(D_RPCTRACE, "Start destroy object "DFID" %s %p\n", - PFID(lu_object_fid(&parent->mo_lu)), lname->ln_name, parent); - - rc = mdo_unlink(env, parent, lu2md(child), lname, ma, 0); - if (rc) { - CERROR("Can not unlink child %s: rc = %d\n", - lname->ln_name, rc); - GOTO(out_put, rc); - } - CDEBUG(D_RPCTRACE, "End destroy object "DFID" %s %p\n", - PFID(lu_object_fid(&parent->mo_lu)), lname->ln_name, parent); -out_put: - lu_object_put(env, ec_child); - return rc; -} - -static int echo_destroy_object(const struct lu_env *env, - struct echo_device *ed, - struct lu_object *ec_parent, - char *name, int namelen, - __u64 id, __u32 mode, - int count) -{ - struct echo_thread_info *info = echo_env_info(env); - struct lu_name *lname = &info->eti_lname; - struct md_attr *ma = &info->eti_ma; - struct lu_device *ld = ed->ed_next; - struct lu_object *parent; - int rc = 0; - int i; - - parent = lu_object_locate(ec_parent->lo_header, ld->ld_type); - if (parent == NULL) - return -EINVAL; - - memset(ma, 0, sizeof(*ma)); - ma->ma_attr.la_mode = mode; - ma->ma_attr.la_valid = LA_CTIME; - ma->ma_attr.la_ctime = cfs_time_current_64(); - ma->ma_need = MA_INODE; - ma->ma_valid = 0; - - if (name != NULL) { - lname->ln_name = name; - lname->ln_namelen = namelen; - rc = echo_md_destroy_internal(env, ed, lu2md(parent), lname, - ma); - return rc; - } - - /*prepare the requests*/ - for (i = 0; i < count; i++) { - char *tmp_name = info->eti_name; - - ma->ma_valid = 0; - echo_md_build_name(lname, tmp_name, id); - - rc = echo_md_destroy_internal(env, ed, lu2md(parent), lname, - ma); - if (rc) { - CERROR("Can not unlink child %s: rc = %d\n", name, rc); - break; - } - id++; - } - - return rc; -} - -static struct lu_object *echo_resolve_path(const struct lu_env *env, - struct echo_device *ed, char *path, - int path_len) -{ - struct lu_device *ld = ed->ed_next; - struct md_device *md = lu2md_dev(ld); - struct echo_thread_info *info = echo_env_info(env); - struct lu_fid *fid = &info->eti_fid; - struct lu_name *lname = &info->eti_lname; - struct lu_object *parent = NULL; - struct lu_object *child = NULL; - int rc = 0; - - /*Only support MDD layer right now*/ - rc = md->md_ops->mdo_root_get(env, md, fid); - if (rc) { - CERROR("get root error: rc = %d\n", rc); - return ERR_PTR(rc); - } - - /* In the function below, .hs_keycmp resolves to - * lu_obj_hop_keycmp() */ - /* coverity[overrun-buffer-val] */ - parent = lu_object_find_at(env, &ed->ed_cl.cd_lu_dev, fid, NULL); - if (IS_ERR(parent)) { - CERROR("Can not find the parent "DFID": rc = %ld\n", - PFID(fid), PTR_ERR(parent)); - return parent; - } - - while (1) { - struct lu_object *ld_parent; - char *e; - - e = strsep(&path, "/"); - if (e == NULL) - break; - - if (e[0] == 0) { - if (!path || path[0] == '\0') - break; - continue; - } - - lname->ln_name = e; - lname->ln_namelen = strlen(e); - - ld_parent = lu_object_locate(parent->lo_header, ld->ld_type); - if (ld_parent == NULL) { - lu_object_put(env, parent); - rc = -EINVAL; - break; - } - - child = echo_md_lookup(env, ed, lu2md(ld_parent), lname); - lu_object_put(env, parent); - if (IS_ERR(child)) { - rc = (int)PTR_ERR(child); - CERROR("lookup %s under parent "DFID": rc = %d\n", - lname->ln_name, PFID(lu_object_fid(ld_parent)), - rc); - break; - } - parent = child; - } - if (rc) - return ERR_PTR(rc); - - return parent; -} - -static void echo_ucred_init(struct lu_env *env) -{ - struct lu_ucred *ucred = lu_ucred(env); - - ucred->uc_valid = UCRED_INVALID; - - ucred->uc_suppgids[0] = -1; - ucred->uc_suppgids[1] = -1; - - ucred->uc_uid = ucred->uc_o_uid = - from_kuid(&init_user_ns, current_uid()); - ucred->uc_gid = ucred->uc_o_gid = - from_kgid(&init_user_ns, current_gid()); - ucred->uc_fsuid = ucred->uc_o_fsuid = - from_kuid(&init_user_ns, current_fsuid()); - ucred->uc_fsgid = ucred->uc_o_fsgid = - from_kgid(&init_user_ns, current_fsgid()); - ucred->uc_cap = cfs_curproc_cap_pack(); - - /* remove fs privilege for non-root user. */ - if (ucred->uc_fsuid) - ucred->uc_cap &= ~CFS_CAP_FS_MASK; - ucred->uc_valid = UCRED_NEW; -} - -static void echo_ucred_fini(struct lu_env *env) -{ - struct lu_ucred *ucred = lu_ucred(env); - ucred->uc_valid = UCRED_INIT; -} - -#define ECHO_MD_CTX_TAG (LCT_REMEMBER | LCT_MD_THREAD) -#define ECHO_MD_SES_TAG (LCT_REMEMBER | LCT_SESSION) -static int echo_md_handler(struct echo_device *ed, int command, - char *path, int path_len, __u64 id, int count, - struct obd_ioctl_data *data) -{ - struct echo_thread_info *info; - struct lu_device *ld = ed->ed_next; - struct lu_env *env; - int refcheck; - struct lu_object *parent; - char *name = NULL; - int namelen = data->ioc_plen2; - int rc = 0; - - if (ld == NULL) { - CERROR("MD echo client is not being initialized properly\n"); - return -EINVAL; - } - - if (strcmp(ld->ld_type->ldt_name, LUSTRE_MDD_NAME)) { - CERROR("Only support MDD layer right now!\n"); - return -EINVAL; - } - - env = cl_env_get(&refcheck); - if (IS_ERR(env)) - return PTR_ERR(env); - - rc = lu_env_refill_by_tags(env, ECHO_MD_CTX_TAG, ECHO_MD_SES_TAG); - if (rc != 0) - GOTO(out_env, rc); - - /* init big_lmm buffer */ - info = echo_env_info(env); - LASSERT(info->eti_big_lmm == NULL); - OBD_ALLOC_LARGE(info->eti_big_lmm, MIN_MD_SIZE); - if (info->eti_big_lmm == NULL) - GOTO(out_env, rc = -ENOMEM); - info->eti_big_lmmsize = MIN_MD_SIZE; - - parent = echo_resolve_path(env, ed, path, path_len); - if (IS_ERR(parent)) { - CERROR("Can not resolve the path %s: rc = %ld\n", path, - PTR_ERR(parent)); - GOTO(out_free, rc = PTR_ERR(parent)); - } - - if (namelen > 0) { - OBD_ALLOC(name, namelen + 1); - if (name == NULL) - GOTO(out_put, rc = -ENOMEM); - if (copy_from_user(name, data->ioc_pbuf2, namelen)) - GOTO(out_name, rc = -EFAULT); - } - - echo_ucred_init(env); - - switch (command) { - case ECHO_MD_CREATE: - case ECHO_MD_MKDIR: { - struct echo_thread_info *info = echo_env_info(env); - __u32 mode = data->ioc_obdo2.o_mode; - struct lu_fid *fid = &info->eti_fid; - int stripe_count = (int)data->ioc_obdo2.o_misc; - int stripe_index = (int)data->ioc_obdo2.o_stripe_idx; - - rc = ostid_to_fid(fid, &data->ioc_obdo1.o_oi, 0); - if (rc != 0) - break; - - /* In the function below, .hs_keycmp resolves to - * lu_obj_hop_keycmp() */ - /* coverity[overrun-buffer-val] */ - rc = echo_create_md_object(env, ed, parent, fid, name, namelen, - id, mode, count, stripe_count, - stripe_index); - break; - } - case ECHO_MD_DESTROY: - case ECHO_MD_RMDIR: { - __u32 mode = data->ioc_obdo2.o_mode; - - rc = echo_destroy_object(env, ed, parent, name, namelen, - id, mode, count); - break; - } - case ECHO_MD_LOOKUP: - rc = echo_lookup_object(env, ed, parent, id, count); - break; - case ECHO_MD_GETATTR: - rc = echo_getattr_object(env, ed, parent, id, count); - break; - case ECHO_MD_SETATTR: - rc = echo_setattr_object(env, ed, parent, id, count); - break; - default: - CERROR("unknown command %d\n", command); - rc = -EINVAL; - break; - } - echo_ucred_fini(env); - -out_name: - if (name != NULL) - OBD_FREE(name, namelen + 1); -out_put: - lu_object_put(env, parent); -out_free: - LASSERT(info->eti_big_lmm); - OBD_FREE_LARGE(info->eti_big_lmm, info->eti_big_lmmsize); - info->eti_big_lmm = NULL; - info->eti_big_lmmsize = 0; -out_env: - cl_env_put(env, &refcheck); - return rc; -} - static int echo_create_object(const struct lu_env *env, struct echo_device *ed, int on_target, struct obdo *oa, void *ulsm, int ulsm_nob, struct obd_trans_info *oti) @@ -2282,7 +1386,7 @@ static int echo_create_object(const struct lu_env *env, struct echo_device *ed, echo_free_memmd(ed, &lsm); if (rc) CERROR("create object failed with: rc = %d\n", rc); - return (rc); + return rc; } static int echo_get_object(struct echo_object **ecop, struct echo_device *ed, @@ -2324,14 +1428,14 @@ static void echo_put_object(struct echo_object *eco) } static void -echo_get_stripe_off_id (struct lov_stripe_md *lsm, obd_off *offp, obd_id *idp) +echo_get_stripe_off_id(struct lov_stripe_md *lsm, u64 *offp, u64 *idp) { unsigned long stripe_count; unsigned long stripe_size; unsigned long width; unsigned long woffset; int stripe_index; - obd_off offset; + u64 offset; if (lsm->lsm_stripe_count <= 1) return; @@ -2354,12 +1458,12 @@ echo_get_stripe_off_id (struct lov_stripe_md *lsm, obd_off *offp, obd_id *idp) static void echo_client_page_debug_setup(struct lov_stripe_md *lsm, - struct page *page, int rw, obd_id id, - obd_off offset, obd_off count) + struct page *page, int rw, u64 id, + u64 offset, u64 count) { char *addr; - obd_off stripe_off; - obd_id stripe_id; + u64 stripe_off; + u64 stripe_id; int delta; /* no partial pages on the client */ @@ -2384,11 +1488,11 @@ echo_client_page_debug_setup(struct lov_stripe_md *lsm, } static int echo_client_page_debug_check(struct lov_stripe_md *lsm, - struct page *page, obd_id id, - obd_off offset, obd_off count) + struct page *page, u64 id, + u64 offset, u64 count) { - obd_off stripe_off; - obd_id stripe_id; + u64 stripe_off; + u64 stripe_id; char *addr; int delta; int rc; @@ -2418,16 +1522,16 @@ static int echo_client_page_debug_check(struct lov_stripe_md *lsm, } static int echo_client_kbrw(struct echo_device *ed, int rw, struct obdo *oa, - struct echo_object *eco, obd_off offset, - obd_size count, int async, + struct echo_object *eco, u64 offset, + u64 count, int async, struct obd_trans_info *oti) { struct lov_stripe_md *lsm = eco->eo_lsm; - obd_count npages; + u32 npages; struct brw_page *pga; struct brw_page *pgp; struct page **pages; - obd_off off; + u64 off; int i; int rc; int verify; @@ -2516,16 +1620,16 @@ static int echo_client_kbrw(struct echo_device *ed, int rw, struct obdo *oa, static int echo_client_prep_commit(const struct lu_env *env, struct obd_export *exp, int rw, struct obdo *oa, struct echo_object *eco, - obd_off offset, obd_size count, - obd_size batch, struct obd_trans_info *oti, + u64 offset, u64 count, + u64 batch, struct obd_trans_info *oti, int async) { struct lov_stripe_md *lsm = eco->eo_lsm; struct obd_ioobj ioo; struct niobuf_local *lnb; struct niobuf_remote *rnb; - obd_off off; - obd_size npages, tot_pages; + u64 off; + u64 npages, tot_pages; int i, ret = 0, brw_flags = 0; if (count <= 0 || (count & (~CFS_PAGE_MASK)) != 0 || @@ -2548,7 +1652,7 @@ static int echo_client_prep_commit(const struct lu_env *env, off = offset; - for(; tot_pages; tot_pages -= npages) { + for (; tot_pages; tot_pages -= npages) { int lpages; if (tot_pages < npages) @@ -2677,12 +1781,12 @@ static int echo_client_brw_ioctl(const struct lu_env *env, int rw, static int echo_client_enqueue(struct obd_export *exp, struct obdo *oa, - int mode, obd_off offset, obd_size nob) + int mode, u64 offset, u64 nob) { struct echo_device *ed = obd2echo_dev(exp->exp_obd); struct lustre_handle *ulh = &oa->o_handle; struct echo_object *eco; - obd_off end; + u64 end; int rc; if (ed->ed_next == NULL) @@ -2699,7 +1803,7 @@ echo_client_enqueue(struct obd_export *exp, struct obdo *oa, if (rc != 0) return rc; - end = (nob == 0) ? ((obd_off) -1) : (offset + nob - 1); + end = (nob == 0) ? ((u64) -1) : (offset + nob - 1); rc = cl_echo_enqueue(eco, offset, end, mode, &ulh->cookie); if (rc == 0) { oa->o_valid |= OBD_MD_FLHANDLE; @@ -2770,72 +1874,6 @@ echo_client_iocontrol(unsigned int cmd, struct obd_export *exp, int len, data->ioc_plen1, &dummy_oti); GOTO(out, rc); - case OBD_IOC_ECHO_MD: { - int count; - int cmd; - char *dir = NULL; - int dirlen; - __u64 id; - - if (!capable(CFS_CAP_SYS_ADMIN)) - GOTO(out, rc = -EPERM); - - count = data->ioc_count; - cmd = data->ioc_command; - - id = ostid_id(&data->ioc_obdo2.o_oi); - - dirlen = data->ioc_plen1; - OBD_ALLOC(dir, dirlen + 1); - if (dir == NULL) - GOTO(out, rc = -ENOMEM); - - if (copy_from_user(dir, data->ioc_pbuf1, dirlen)) { - OBD_FREE(dir, data->ioc_plen1 + 1); - GOTO(out, rc = -EFAULT); - } - - rc = echo_md_handler(ed, cmd, dir, dirlen, id, count, data); - OBD_FREE(dir, dirlen + 1); - GOTO(out, rc); - } - case OBD_IOC_ECHO_ALLOC_SEQ: { - struct lu_env *cl_env; - int refcheck; - __u64 seq; - int max_count; - - if (!capable(CFS_CAP_SYS_ADMIN)) - GOTO(out, rc = -EPERM); - - cl_env = cl_env_get(&refcheck); - if (IS_ERR(cl_env)) - GOTO(out, rc = PTR_ERR(cl_env)); - - rc = lu_env_refill_by_tags(cl_env, ECHO_MD_CTX_TAG, - ECHO_MD_SES_TAG); - if (rc != 0) { - cl_env_put(cl_env, &refcheck); - GOTO(out, rc); - } - - rc = seq_client_get_seq(cl_env, ed->ed_cl_seq, &seq); - cl_env_put(cl_env, &refcheck); - if (rc < 0) { - CERROR("%s: Can not alloc seq: rc = %d\n", - obd->obd_name, rc); - GOTO(out, rc); - } - - if (copy_to_user(data->ioc_pbuf1, &seq, data->ioc_plen1)) - return -EFAULT; - - max_count = LUSTRE_METADATA_SEQ_MAX_WIDTH; - if (copy_to_user(data->ioc_pbuf2, &max_count, - data->ioc_plen2)) - return -EFAULT; - GOTO(out, rc); - } case OBD_IOC_DESTROY: if (!capable(CFS_CAP_SYS_ADMIN)) GOTO (out, rc = -EPERM); @@ -2973,12 +2011,6 @@ static int echo_client_setup(const struct lu_env *env, ec->ec_unique = 0; ec->ec_nstripes = 0; - if (!strcmp(tgt->obd_type->typ_name, LUSTRE_MDT_NAME)) { - lu_context_tags_update(ECHO_MD_CTX_TAG); - lu_session_tags_update(ECHO_MD_SES_TAG); - return 0; - } - OBD_ALLOC(ocd, sizeof(*ocd)); if (ocd == NULL) { CERROR("Can't alloc ocd connecting to %s\n", @@ -3008,7 +2040,7 @@ static int echo_client_setup(const struct lu_env *env, if (rc != 0) { CERROR("fail to connect to device %s\n", lustre_cfg_string(lcfg, 1)); - return (rc); + return rc; } return rc; @@ -3016,20 +2048,9 @@ static int echo_client_setup(const struct lu_env *env, static int echo_client_cleanup(struct obd_device *obddev) { - struct echo_device *ed = obd2echo_dev(obddev); struct echo_client_obd *ec = &obddev->u.echo_client; int rc; - /*Do nothing for Metadata echo client*/ - if (ed == NULL ) - return 0; - - if (ed->ed_next_ismd) { - lu_context_tags_clear(ECHO_MD_CTX_TAG); - lu_session_tags_clear(ECHO_MD_SES_TAG); - return 0; - } - if (!list_empty(&obddev->obd_exports)) { CERROR("still has clients!\n"); return -EBUSY; @@ -3061,37 +2082,11 @@ static int echo_client_connect(const struct lu_env *env, static int echo_client_disconnect(struct obd_export *exp) { -#if 0 - struct obd_device *obd; - struct echo_client_obd *ec; - struct ec_lock *ecl; -#endif int rc; if (exp == NULL) GOTO(out, rc = -EINVAL); -#if 0 - obd = exp->exp_obd; - ec = &obd->u.echo_client; - - /* no more contention on export's lock list */ - while (!list_empty (&exp->exp_ec_data.eced_locks)) { - ecl = list_entry (exp->exp_ec_data.eced_locks.next, - struct ec_lock, ecl_exp_chain); - list_del (&ecl->ecl_exp_chain); - - rc = obd_cancel(ec->ec_exp, ecl->ecl_object->eco_lsm, - ecl->ecl_mode, &ecl->ecl_lock_handle); - - CDEBUG (D_INFO, "Cancel lock on object %#llx on disconnect " - "(%d)\n", ecl->ecl_object->eco_id, rc); - - echo_put_object (ecl->ecl_object); - OBD_FREE (ecl, sizeof (*ecl)); - } -#endif - rc = class_disconnect(exp); GOTO(out, rc); out: @@ -3100,12 +2095,6 @@ static int echo_client_disconnect(struct obd_export *exp) static struct obd_ops echo_client_obd_ops = { .o_owner = THIS_MODULE, - -#if 0 - .o_setup = echo_client_setup, - .o_cleanup = echo_client_cleanup, -#endif - .o_iocontrol = echo_client_iocontrol, .o_connect = echo_client_connect, .o_disconnect = echo_client_disconnect diff --git a/drivers/staging/lustre/lustre/osc/lproc_osc.c b/drivers/staging/lustre/lustre/osc/lproc_osc.c index 2ab403548b5e..9f719bcecab3 100644 --- a/drivers/staging/lustre/lustre/osc/lproc_osc.c +++ b/drivers/staging/lustre/lustre/osc/lproc_osc.c @@ -148,7 +148,7 @@ static ssize_t osc_max_dirty_mb_seq_write(struct file *file, const char *buffer, return -ERANGE; client_obd_list_lock(&cli->cl_loi_list_lock); - cli->cl_dirty_max = (obd_count)(pages_number << PAGE_CACHE_SHIFT); + cli->cl_dirty_max = (u32)(pages_number << PAGE_CACHE_SHIFT); osc_wake_cache_waiters(cli); client_obd_list_unlock(&cli->cl_loi_list_lock); @@ -565,7 +565,7 @@ static struct lprocfs_vars lprocfs_osc_module_vars[] = { { NULL } }; -#define pct(a,b) (b ? a * 100 / b : 0) +#define pct(a, b) (b ? a * 100 / b : 0) static int osc_rpc_stats_seq_show(struct seq_file *seq, void *v) { diff --git a/drivers/staging/lustre/lustre/osc/osc_cache.c b/drivers/staging/lustre/lustre/osc/osc_cache.c index 57d7dba23479..7734d666b7a1 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cache.c +++ b/drivers/staging/lustre/lustre/osc/osc_cache.c @@ -1885,7 +1885,7 @@ osc_send_write_rpc(const struct lu_env *env, struct client_obd *cli, struct osc_extent *ext; struct osc_extent *tmp; struct osc_extent *first = NULL; - obd_count page_count = 0; + u32 page_count = 0; int srvlock = 0; int rc = 0; diff --git a/drivers/staging/lustre/lustre/osc/osc_cl_internal.h b/drivers/staging/lustre/lustre/osc/osc_cl_internal.h index 2d1f977dca36..ebbd95c0cea8 100644 --- a/drivers/staging/lustre/lustre/osc/osc_cl_internal.h +++ b/drivers/staging/lustre/lustre/osc/osc_cl_internal.h @@ -50,7 +50,6 @@ #include "../include/obd.h" /* osc_build_res_name() */ -#include "../include/obd_ost.h" #include "../include/cl_object.h" #include "../include/lclient.h" #include "osc_internal.h" @@ -435,7 +434,7 @@ void osc_page_submit(const struct lu_env *env, struct osc_page *opg, enum cl_req_type crt, int brw_flags); int osc_cancel_async_page(const struct lu_env *env, struct osc_page *ops); int osc_set_async_flags(struct osc_object *obj, struct osc_page *opg, - obd_flag async_flags); + u32 async_flags); int osc_prep_async_page(struct osc_object *osc, struct osc_page *ops, struct page *page, loff_t offset); int osc_queue_async_io(const struct lu_env *env, struct cl_io *io, diff --git a/drivers/staging/lustre/lustre/osc/osc_internal.h b/drivers/staging/lustre/lustre/osc/osc_internal.h index f67a70083621..d788dac93cd0 100644 --- a/drivers/staging/lustre/lustre/osc/osc_internal.h +++ b/drivers/staging/lustre/lustre/osc/osc_internal.h @@ -59,7 +59,7 @@ struct osc_async_page { struct list_head oap_pending_item; struct list_head oap_rpc_item; - obd_off oap_obj_off; + u64 oap_obj_off; unsigned oap_page_off; enum async_flags oap_async_flags; @@ -161,7 +161,7 @@ static inline unsigned long rpcs_in_flight(struct client_obd *cli) } #ifndef min_t -#define min_t(type,x,y) \ +#define min_t(type, x, y) \ ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; }) #endif @@ -192,12 +192,12 @@ extern struct kmem_cache *osc_quota_kmem; struct osc_quota_info { /** linkage for quota hash table */ struct hlist_node oqi_hash; - obd_uid oqi_id; + u32 oqi_id; }; int osc_quota_setup(struct obd_device *obd); int osc_quota_cleanup(struct obd_device *obd); int osc_quota_setdq(struct client_obd *cli, const unsigned int qid[], - obd_flag valid, obd_flag flags); + u32 valid, u32 flags); int osc_quota_chkdq(struct client_obd *cli, const unsigned int qid[]); int osc_quotactl(struct obd_device *unused, struct obd_export *exp, struct obd_quotactl *oqctl); diff --git a/drivers/staging/lustre/lustre/osc/osc_io.c b/drivers/staging/lustre/lustre/osc/osc_io.c index 54fe836a64cd..fad4c135f928 100644 --- a/drivers/staging/lustre/lustre/osc/osc_io.c +++ b/drivers/staging/lustre/lustre/osc/osc_io.c @@ -63,6 +63,7 @@ static struct osc_io *cl2osc_io(const struct lu_env *env, const struct cl_io_slice *slice) { struct osc_io *oio = container_of0(slice, struct osc_io, oi_cl); + LINVRNT(oio == osc_env_io(env)); return oio; } @@ -360,6 +361,7 @@ static int trunc_check_cb(const struct lu_env *env, struct cl_io *io, { struct page *vmpage = cl_page_vmpage(env, page); + if (PageLocked(vmpage)) CDEBUG(D_CACHE, "page %p index %lu locked for %d.\n", ops, page->cp_index, @@ -498,6 +500,7 @@ static void osc_io_setattr_end(const struct lu_env *env, if (cl_io_is_trunc(io)) { __u64 size = io->u.ci_setattr.sa_attr.lvb_size; + osc_trunc_check(env, io, oio, size); if (oio->oi_trunc != NULL) { osc_cache_truncate_end(env, oio, cl2osc(obj)); @@ -711,7 +714,7 @@ static void osc_req_completion(const struct lu_env *env, static void osc_req_attr_set(const struct lu_env *env, const struct cl_req_slice *slice, const struct cl_object *obj, - struct cl_req_attr *attr, obd_valid flags) + struct cl_req_attr *attr, u64 flags) { struct lov_oinfo *oinfo; struct cl_req *clerq; diff --git a/drivers/staging/lustre/lustre/osc/osc_quota.c b/drivers/staging/lustre/lustre/osc/osc_quota.c index 3563809072b4..6690f149a04c 100644 --- a/drivers/staging/lustre/lustre/osc/osc_quota.c +++ b/drivers/staging/lustre/lustre/osc/osc_quota.c @@ -28,10 +28,10 @@ * Code originally extracted from quota directory */ -#include "../include/obd_ost.h" +#include "../include/obd_class.h" #include "osc_internal.h" -static inline struct osc_quota_info *osc_oqi_alloc(obd_uid id) +static inline struct osc_quota_info *osc_oqi_alloc(u32 id) { struct osc_quota_info *oqi; @@ -71,7 +71,7 @@ int osc_quota_chkdq(struct client_obd *cli, const unsigned int qid[]) : OBD_FL_NO_GRPQUOTA) int osc_quota_setdq(struct client_obd *cli, const unsigned int qid[], - obd_flag valid, obd_flag flags) + u32 valid, u32 flags) { int type; int rc = 0; @@ -138,17 +138,17 @@ int osc_quota_setdq(struct client_obd *cli, const unsigned int qid[], static unsigned oqi_hashfn(struct cfs_hash *hs, const void *key, unsigned mask) { - return cfs_hash_u32_hash(*((__u32*)key), mask); + return cfs_hash_u32_hash(*((__u32 *)key), mask); } static int oqi_keycmp(const void *key, struct hlist_node *hnode) { struct osc_quota_info *oqi; - obd_uid uid; + u32 uid; LASSERT(key != NULL); - uid = *((obd_uid*)key); + uid = *((u32 *)key); oqi = hlist_entry(hnode, struct osc_quota_info, oqi_hash); return uid == oqi->oqi_id; diff --git a/drivers/staging/lustre/lustre/osc/osc_request.c b/drivers/staging/lustre/lustre/osc/osc_request.c index fb0d9fb9cebc..44657a06b8a5 100644 --- a/drivers/staging/lustre/lustre/osc/osc_request.c +++ b/drivers/staging/lustre/lustre/osc/osc_request.c @@ -43,18 +43,58 @@ #include "../include/lustre_net.h" #include "../include/lustre/lustre_user.h" #include "../include/obd_cksum.h" -#include "../include/obd_ost.h" #include "../include/lustre_ha.h" #include "../include/lprocfs_status.h" -#include "../include/lustre_log.h" #include "../include/lustre_debug.h" #include "../include/lustre_param.h" #include "../include/lustre_fid.h" +#include "../include/obd_class.h" #include "osc_internal.h" #include "osc_cl_internal.h" -static void osc_release_ppga(struct brw_page **ppga, obd_count count); +struct osc_brw_async_args { + struct obdo *aa_oa; + int aa_requested_nob; + int aa_nio_count; + u32 aa_page_count; + int aa_resends; + struct brw_page **aa_ppga; + struct client_obd *aa_cli; + struct list_head aa_oaps; + struct list_head aa_exts; + struct obd_capa *aa_ocapa; + struct cl_req *aa_clerq; +}; + +struct osc_async_args { + struct obd_info *aa_oi; +}; + +struct osc_setattr_args { + struct obdo *sa_oa; + obd_enqueue_update_f sa_upcall; + void *sa_cookie; +}; + +struct osc_fsync_args { + struct obd_info *fa_oi; + obd_enqueue_update_f fa_upcall; + void *fa_cookie; +}; + +struct osc_enqueue_args { + struct obd_export *oa_exp; + __u64 *oa_flags; + obd_enqueue_update_f oa_upcall; + void *oa_cookie; + struct ost_lvb *oa_lvb; + struct lustre_handle *oa_lockh; + struct ldlm_enqueue_info *oa_ei; + unsigned int oa_agl:1; +}; + +static void osc_release_ppga(struct brw_page **ppga, u32 count); static int brw_interpret(const struct lu_env *env, struct ptlrpc_request *req, void *data, int rc); int osc_cleanup(struct obd_device *obd); @@ -197,7 +237,7 @@ static int osc_getattr_interpret(const struct lu_env *env, struct ost_body *body; if (rc != 0) - GOTO(out, rc); + goto out; body = req_capsule_server_get(&req->rq_pill, &RMF_OST_BODY); if (body) { @@ -273,11 +313,13 @@ static int osc_getattr(const struct lu_env *env, struct obd_export *exp, rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; body = req_capsule_server_get(&req->rq_pill, &RMF_OST_BODY); - if (body == NULL) - GOTO(out, rc = -EPROTO); + if (body == NULL) { + rc = -EPROTO; + goto out; + } CDEBUG(D_INODE, "mode: %o\n", body->oa.o_mode); lustre_get_wire_obdo(&req->rq_import->imp_connect_data, oinfo->oi_oa, @@ -317,11 +359,13 @@ static int osc_setattr(const struct lu_env *env, struct obd_export *exp, rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; body = req_capsule_server_get(&req->rq_pill, &RMF_OST_BODY); - if (body == NULL) - GOTO(out, rc = -EPROTO); + if (body == NULL) { + rc = -EPROTO; + goto out; + } lustre_get_wire_obdo(&req->rq_import->imp_connect_data, oinfo->oi_oa, &body->oa); @@ -338,11 +382,13 @@ static int osc_setattr_interpret(const struct lu_env *env, struct ost_body *body; if (rc != 0) - GOTO(out, rc); + goto out; body = req_capsule_server_get(&req->rq_pill, &RMF_OST_BODY); - if (body == NULL) - GOTO(out, rc = -EPROTO); + if (body == NULL) { + rc = -EPROTO; + goto out; + } lustre_get_wire_obdo(&req->rq_import->imp_connect_data, sa->sa_oa, &body->oa); @@ -428,13 +474,15 @@ int osc_real_create(struct obd_export *exp, struct obdo *oa, } req = ptlrpc_request_alloc(class_exp2cliimp(exp), &RQF_OST_CREATE); - if (req == NULL) - GOTO(out, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out; + } rc = ptlrpc_request_pack(req, LUSTRE_OST_VERSION, OST_CREATE); if (rc) { ptlrpc_request_free(req); - GOTO(out, rc); + goto out; } body = req_capsule_client_get(&req->rq_pill, &RMF_OST_BODY); @@ -454,11 +502,13 @@ int osc_real_create(struct obd_export *exp, struct obdo *oa, rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out_req, rc); + goto out_req; body = req_capsule_server_get(&req->rq_pill, &RMF_OST_BODY); - if (body == NULL) - GOTO(out_req, rc = -EPROTO); + if (body == NULL) { + rc = -EPROTO; + goto out_req; + } CDEBUG(D_INFO, "oa flags %x\n", oa->o_flags); lustre_get_wire_obdo(&req->rq_import->imp_connect_data, oa, &body->oa); @@ -537,17 +587,6 @@ int osc_punch_base(struct obd_export *exp, struct obd_info *oinfo, return 0; } -static int osc_punch(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo, struct obd_trans_info *oti, - struct ptlrpc_request_set *rqset) -{ - oinfo->oi_oa->o_size = oinfo->oi_policy.l_extent.start; - oinfo->oi_oa->o_blocks = oinfo->oi_policy.l_extent.end; - oinfo->oi_oa->o_valid |= OBD_MD_FLSIZE | OBD_MD_FLBLOCKS; - return osc_punch_base(exp, oinfo, - oinfo->oi_cb_up, oinfo, rqset); -} - static int osc_sync_interpret(const struct lu_env *env, struct ptlrpc_request *req, void *arg, int rc) @@ -556,12 +595,13 @@ static int osc_sync_interpret(const struct lu_env *env, struct ost_body *body; if (rc) - GOTO(out, rc); + goto out; body = req_capsule_server_get(&req->rq_pill, &RMF_OST_BODY); if (body == NULL) { CERROR ("can't unpack ost_body\n"); - GOTO(out, rc = -EPROTO); + rc = -EPROTO; + goto out; } *fa->fa_oi->oi_oa = body->oa; @@ -614,22 +654,6 @@ int osc_sync_base(struct obd_export *exp, struct obd_info *oinfo, return 0; } -static int osc_sync(const struct lu_env *env, struct obd_export *exp, - struct obd_info *oinfo, obd_size start, obd_size end, - struct ptlrpc_request_set *set) -{ - if (!oinfo->oi_oa) { - CDEBUG(D_INFO, "oa NULL\n"); - return -EINVAL; - } - - oinfo->oi_oa->o_size = start; - oinfo->oi_oa->o_blocks = end; - oinfo->oi_oa->o_valid |= (OBD_MD_FLSIZE | OBD_MD_FLBLOCKS); - - return osc_sync_base(exp, oinfo, oinfo->oi_cb_up, oinfo, set); -} - /* Find and cancel locally locks matched by @mode in the resource found by * @objid. Found locks are added into @cancel list. Returns the amount of * locks added to @cancels list. */ @@ -799,7 +823,7 @@ static int osc_destroy(const struct lu_env *env, struct obd_export *exp, static void osc_announce_cached(struct client_obd *cli, struct obdo *oa, long writing_bytes) { - obd_flag bits = OBD_MD_FLBLOCKS|OBD_MD_FLGRANT; + u32 bits = OBD_MD_FLBLOCKS|OBD_MD_FLGRANT; LASSERT(!(oa->o_valid & bits)); @@ -836,7 +860,7 @@ static void osc_announce_cached(struct client_obd *cli, struct obdo *oa, oa->o_dropped = cli->cl_lost_grant; cli->cl_lost_grant = 0; client_obd_list_unlock(&cli->cl_loi_list_lock); - CDEBUG(D_CACHE,"dirty: %llu undirty: %u dropped %u grant: %llu\n", + CDEBUG(D_CACHE, "dirty: %llu undirty: %u dropped %u grant: %llu\n", oa->o_dirty, oa->o_undirty, oa->o_dropped, oa->o_grant); } @@ -849,7 +873,7 @@ void osc_update_next_shrink(struct client_obd *cli) cli->cl_next_shrink_grant); } -static void __osc_update_grant(struct client_obd *cli, obd_size grant) +static void __osc_update_grant(struct client_obd *cli, u64 grant) { client_obd_list_lock(&cli->cl_loi_list_lock); cli->cl_avail_grant += grant; @@ -865,7 +889,7 @@ static void osc_update_grant(struct client_obd *cli, struct ost_body *body) } static int osc_set_info_async(const struct lu_env *env, struct obd_export *exp, - obd_count keylen, void *key, obd_count vallen, + u32 keylen, void *key, u32 vallen, void *val, struct ptlrpc_request_set *set); static int osc_shrink_grant_interpret(const struct lu_env *env, @@ -873,12 +897,12 @@ static int osc_shrink_grant_interpret(const struct lu_env *env, void *aa, int rc) { struct client_obd *cli = &req->rq_import->imp_obd->u.cli; - struct obdo *oa = ((struct osc_grant_args *)aa)->aa_oa; + struct obdo *oa = ((struct osc_brw_async_args *)aa)->aa_oa; struct ost_body *body; if (rc != 0) { __osc_update_grant(cli, oa->o_grant); - GOTO(out, rc); + goto out; } body = req_capsule_server_get(&req->rq_pill, &RMF_OST_BODY); @@ -1067,7 +1091,7 @@ static void osc_init_grant(struct client_obd *cli, struct obd_connect_data *ocd) * beyond the end of a stripe file; i.e. lustre is reading a sparse file * via the LOV, and it _knows_ it's reading inside the file, it's just that * this stripe never got written at or beyond this stripe offset yet. */ -static void handle_short_read(int nob_read, obd_count page_count, +static void handle_short_read(int nob_read, u32 page_count, struct brw_page **pga) { char *ptr; @@ -1104,7 +1128,7 @@ static void handle_short_read(int nob_read, obd_count page_count, static int check_write_rcs(struct ptlrpc_request *req, int requested_nob, int niocount, - obd_count page_count, struct brw_page **pga) + u32 page_count, struct brw_page **pga) { int i; __u32 *remote_rcs; @@ -1114,28 +1138,28 @@ static int check_write_rcs(struct ptlrpc_request *req, niocount); if (remote_rcs == NULL) { CDEBUG(D_INFO, "Missing/short RC vector on BRW_WRITE reply\n"); - return(-EPROTO); + return -EPROTO; } /* return error if any niobuf was in error */ for (i = 0; i < niocount; i++) { if ((int)remote_rcs[i] < 0) - return(remote_rcs[i]); + return remote_rcs[i]; if (remote_rcs[i] != 0) { CDEBUG(D_INFO, "rc[%d] invalid (%d) req %p\n", i, remote_rcs[i], req); - return(-EPROTO); + return -EPROTO; } } if (req->rq_bulk->bd_nob_transferred != requested_nob) { CERROR("Unexpected # bytes transferred: %d (requested %d)\n", req->rq_bulk->bd_nob_transferred, requested_nob); - return(-EPROTO); + return -EPROTO; } - return (0); + return 0; } static inline int can_merge_pages(struct brw_page *p1, struct brw_page *p2) @@ -1157,7 +1181,7 @@ static inline int can_merge_pages(struct brw_page *p1, struct brw_page *p2) return (p1->off + p1->count == p2->off); } -static obd_count osc_checksum_bulk(int nob, obd_count pg_count, +static u32 osc_checksum_bulk(int nob, u32 pg_count, struct brw_page **pga, int opc, cksum_type_t cksum_type) { @@ -1218,8 +1242,9 @@ static obd_count osc_checksum_bulk(int nob, obd_count pg_count, return cksum; } -static int osc_brw_prep_request(int cmd, struct client_obd *cli,struct obdo *oa, - struct lov_stripe_md *lsm, obd_count page_count, +static int osc_brw_prep_request(int cmd, struct client_obd *cli, + struct obdo *oa, + struct lov_stripe_md *lsm, u32 page_count, struct brw_page **pga, struct ptlrpc_request **reqp, struct obd_capa *ocapa, int reserve, @@ -1280,8 +1305,10 @@ static int osc_brw_prep_request(int cmd, struct client_obd *cli,struct obdo *oa, opc == OST_WRITE ? BULK_GET_SOURCE : BULK_PUT_SINK, OST_BULK_PORTAL); - if (desc == NULL) - GOTO(out, rc = -ENOMEM); + if (desc == NULL) { + rc = -ENOMEM; + goto out; + } /* NB request now owns desc and will free it when it gets freed */ body = req_capsule_client_get(pill, &RMF_OST_BODY); @@ -1422,7 +1449,7 @@ static int osc_brw_prep_request(int cmd, struct client_obd *cli,struct obdo *oa, static int check_write_checksum(struct obdo *oa, const lnet_process_id_t *peer, __u32 client_cksum, __u32 server_cksum, int nob, - obd_count page_count, struct brw_page **pga, + u32 page_count, struct brw_page **pga, cksum_type_t client_cksum_type) { __u32 new_cksum; @@ -1523,17 +1550,20 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc) cksum_type_unpack(aa->aa_oa->o_flags))) return -EAGAIN; - rc = check_write_rcs(req, aa->aa_requested_nob,aa->aa_nio_count, + rc = check_write_rcs(req, aa->aa_requested_nob, + aa->aa_nio_count, aa->aa_page_count, aa->aa_ppga); - GOTO(out, rc); + goto out; } /* The rest of this function executes only for OST_READs */ /* if unwrap_bulk failed, return -EAGAIN to retry */ rc = sptlrpc_cli_unwrap_bulk_read(req, req->rq_bulk, rc); - if (rc < 0) - GOTO(out, rc = -EAGAIN); + if (rc < 0) { + rc = -EAGAIN; + goto out; + } if (rc > aa->aa_requested_nob) { CERROR("Unexpected rc %d (%d requested)\n", rc, @@ -1544,7 +1574,7 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc) if (rc != req->rq_bulk->bd_nob_transferred) { CERROR ("Unexpected rc %d (%d transferred)\n", rc, req->rq_bulk->bd_nob_transferred); - return (-EPROTO); + return -EPROTO; } if (rc < aa->aa_requested_nob) @@ -1616,74 +1646,6 @@ out: return rc; } -static int osc_brw_internal(int cmd, struct obd_export *exp, struct obdo *oa, - struct lov_stripe_md *lsm, - obd_count page_count, struct brw_page **pga, - struct obd_capa *ocapa) -{ - struct ptlrpc_request *req; - int rc; - wait_queue_head_t waitq; - int generation, resends = 0; - struct l_wait_info lwi; - - init_waitqueue_head(&waitq); - generation = exp->exp_obd->u.cli.cl_import->imp_generation; - -restart_bulk: - rc = osc_brw_prep_request(cmd, &exp->exp_obd->u.cli, oa, lsm, - page_count, pga, &req, ocapa, 0, resends); - if (rc != 0) - return (rc); - - if (resends) { - req->rq_generation_set = 1; - req->rq_import_generation = generation; - req->rq_sent = get_seconds() + resends; - } - - rc = ptlrpc_queue_wait(req); - - if (rc == -ETIMEDOUT && req->rq_resend) { - DEBUG_REQ(D_HA, req, "BULK TIMEOUT"); - ptlrpc_req_finished(req); - goto restart_bulk; - } - - rc = osc_brw_fini_request(req, rc); - - ptlrpc_req_finished(req); - /* When server return -EINPROGRESS, client should always retry - * regardless of the number of times the bulk was resent already.*/ - if (osc_recoverable_error(rc)) { - resends++; - if (rc != -EINPROGRESS && - !client_should_resend(resends, &exp->exp_obd->u.cli)) { - CERROR("%s: too many resend retries for object: " - ""DOSTID", rc = %d.\n", exp->exp_obd->obd_name, - POSTID(&oa->o_oi), rc); - goto out; - } - if (generation != - exp->exp_obd->u.cli.cl_import->imp_generation) { - CDEBUG(D_HA, "%s: resend cross eviction for object: " - ""DOSTID", rc = %d.\n", exp->exp_obd->obd_name, - POSTID(&oa->o_oi), rc); - goto out; - } - - lwi = LWI_TIMEOUT_INTR(cfs_time_seconds(resends), NULL, NULL, - NULL); - l_wait_event(waitq, 0, &lwi); - - goto restart_bulk; - } -out: - if (rc == -EAGAIN || rc == -EINPROGRESS) - rc = -EIO; - return rc; -} - static int osc_brw_redo_request(struct ptlrpc_request *request, struct osc_brw_async_args *aa, int rc) { @@ -1787,125 +1749,12 @@ static void sort_brw_pages(struct brw_page **array, int num) } while (stride > 1); } -static obd_count max_unfragmented_pages(struct brw_page **pg, obd_count pages) -{ - int count = 1; - int offset; - int i = 0; - - LASSERT (pages > 0); - offset = pg[i]->off & ~CFS_PAGE_MASK; - - for (;;) { - pages--; - if (pages == 0) /* that's all */ - return count; - - if (offset + pg[i]->count < PAGE_CACHE_SIZE) - return count; /* doesn't end on page boundary */ - - i++; - offset = pg[i]->off & ~CFS_PAGE_MASK; - if (offset != 0) /* doesn't start on page boundary */ - return count; - - count++; - } -} - -static struct brw_page **osc_build_ppga(struct brw_page *pga, obd_count count) -{ - struct brw_page **ppga; - int i; - - OBD_ALLOC(ppga, sizeof(*ppga) * count); - if (ppga == NULL) - return NULL; - - for (i = 0; i < count; i++) - ppga[i] = pga + i; - return ppga; -} - -static void osc_release_ppga(struct brw_page **ppga, obd_count count) +static void osc_release_ppga(struct brw_page **ppga, u32 count) { LASSERT(ppga != NULL); OBD_FREE(ppga, sizeof(*ppga) * count); } -static int osc_brw(int cmd, struct obd_export *exp, struct obd_info *oinfo, - obd_count page_count, struct brw_page *pga, - struct obd_trans_info *oti) -{ - struct obdo *saved_oa = NULL; - struct brw_page **ppga, **orig; - struct obd_import *imp = class_exp2cliimp(exp); - struct client_obd *cli; - int rc, page_count_orig; - - LASSERT((imp != NULL) && (imp->imp_obd != NULL)); - cli = &imp->imp_obd->u.cli; - - if (cmd & OBD_BRW_CHECK) { - /* The caller just wants to know if there's a chance that this - * I/O can succeed */ - - if (imp->imp_invalid) - return -EIO; - return 0; - } - - /* test_brw with a failed create can trip this, maybe others. */ - LASSERT(cli->cl_max_pages_per_rpc); - - rc = 0; - - orig = ppga = osc_build_ppga(pga, page_count); - if (ppga == NULL) - return -ENOMEM; - page_count_orig = page_count; - - sort_brw_pages(ppga, page_count); - while (page_count) { - obd_count pages_per_brw; - - if (page_count > cli->cl_max_pages_per_rpc) - pages_per_brw = cli->cl_max_pages_per_rpc; - else - pages_per_brw = page_count; - - pages_per_brw = max_unfragmented_pages(ppga, pages_per_brw); - - if (saved_oa != NULL) { - /* restore previously saved oa */ - *oinfo->oi_oa = *saved_oa; - } else if (page_count > pages_per_brw) { - /* save a copy of oa (brw will clobber it) */ - OBDO_ALLOC(saved_oa); - if (saved_oa == NULL) - GOTO(out, rc = -ENOMEM); - *saved_oa = *oinfo->oi_oa; - } - - rc = osc_brw_internal(cmd, exp, oinfo->oi_oa, oinfo->oi_md, - pages_per_brw, ppga, oinfo->oi_capa); - - if (rc != 0) - break; - - page_count -= pages_per_brw; - ppga += pages_per_brw; - } - -out: - osc_release_ppga(orig, page_count_orig); - - if (saved_oa != NULL) - OBDO_FREE(saved_oa); - - return rc; -} - static int brw_interpret(const struct lu_env *env, struct ptlrpc_request *req, void *data, int rc) { @@ -2029,8 +1878,8 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, CRT_READ; struct ldlm_lock *lock = NULL; struct cl_req_attr *crattr = NULL; - obd_off starting_offset = OBD_OBJECT_EOF; - obd_off ending_offset = 0; + u64 starting_offset = OBD_OBJECT_EOF; + u64 ending_offset = 0; int mpflag = 0; int mem_tight = 0; int page_count = 0; @@ -2064,16 +1913,22 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, mpflag = cfs_memory_pressure_get_and_set(); OBD_ALLOC(crattr, sizeof(*crattr)); - if (crattr == NULL) - GOTO(out, rc = -ENOMEM); + if (crattr == NULL) { + rc = -ENOMEM; + goto out; + } OBD_ALLOC(pga, sizeof(*pga) * page_count); - if (pga == NULL) - GOTO(out, rc = -ENOMEM); + if (pga == NULL) { + rc = -ENOMEM; + goto out; + } OBDO_ALLOC(oa); - if (oa == NULL) - GOTO(out, rc = -ENOMEM); + if (oa == NULL) { + rc = -ENOMEM; + goto out; + } i = 0; list_for_each_entry(oap, &rpc_list, oap_rpc_item) { @@ -2081,8 +1936,10 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, if (clerq == NULL) { clerq = cl_req_alloc(env, page, crt, 1 /* only 1-object rpcs for now */); - if (IS_ERR(clerq)) - GOTO(out, rc = PTR_ERR(clerq)); + if (IS_ERR(clerq)) { + rc = PTR_ERR(clerq); + goto out; + } lock = oap->oap_ldlm_lock; } if (mem_tight) @@ -2108,7 +1965,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, rc = cl_req_prep(env, clerq); if (rc != 0) { CERROR("cl_req_prep failed: %d\n", rc); - GOTO(out, rc); + goto out; } sort_brw_pages(pga, page_count); @@ -2116,7 +1973,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, pga, &req, crattr->cra_capa, 1, 0); if (rc != 0) { CERROR("prep_req failed: %d\n", rc); - GOTO(out, rc); + goto out; } req->rq_interpret_reply = brw_interpret; @@ -2265,17 +2122,6 @@ static int osc_set_data_with_check(struct lustre_handle *lockh, return set; } -static int osc_change_cbdata(struct obd_export *exp, struct lov_stripe_md *lsm, - ldlm_iterator_t replace, void *data) -{ - struct ldlm_res_id res_id; - struct obd_device *obd = class_exp2obd(exp); - - ostid_build_res_name(&lsm->lsm_oi, &res_id); - ldlm_resource_iterate(obd->obd_namespace, &res_id, replace, data); - return 0; -} - /* find any ldlm lock of the inode in osc * return 0 not find * 1 find one @@ -2290,10 +2136,10 @@ static int osc_find_cbdata(struct obd_export *exp, struct lov_stripe_md *lsm, ostid_build_res_name(&lsm->lsm_oi, &res_id); rc = ldlm_resource_iterate(obd->obd_namespace, &res_id, replace, data); if (rc == LDLM_ITER_STOP) - return(1); + return 1; if (rc == LDLM_ITER_CONTINUE) - return(0); - return(rc); + return 0; + return rc; } static int osc_enqueue_fini(struct ptlrpc_request *req, struct ost_lvb *lvb, @@ -2320,7 +2166,7 @@ static int osc_enqueue_fini(struct ptlrpc_request *req, struct ost_lvb *lvb, if ((intent != 0 && rc == ELDLM_LOCK_ABORTED && agl == 0) || (rc == 0)) { *flags |= LDLM_FL_LVB_READY; - CDEBUG(D_INODE,"got kms %llu blocks %llu mtime %llu\n", + CDEBUG(D_INODE, "got kms %llu blocks %llu mtime %llu\n", lvb->lvb_size, lvb->lvb_blocks, lvb->lvb_mtime); } @@ -2391,50 +2237,6 @@ static int osc_enqueue_interpret(const struct lu_env *env, return rc; } -void osc_update_enqueue(struct lustre_handle *lov_lockhp, - struct lov_oinfo *loi, __u64 flags, - struct ost_lvb *lvb, __u32 mode, int rc) -{ - struct ldlm_lock *lock = ldlm_handle2lock(lov_lockhp); - - if (rc == ELDLM_OK) { - __u64 tmp; - - LASSERT(lock != NULL); - loi->loi_lvb = *lvb; - tmp = loi->loi_lvb.lvb_size; - /* Extend KMS up to the end of this lock and no further - * A lock on [x,y] means a KMS of up to y + 1 bytes! */ - if (tmp > lock->l_policy_data.l_extent.end) - tmp = lock->l_policy_data.l_extent.end + 1; - if (tmp >= loi->loi_kms) { - LDLM_DEBUG(lock, "lock acquired, setting rss=%llu, kms=%llu", - loi->loi_lvb.lvb_size, tmp); - loi_kms_set(loi, tmp); - } else { - LDLM_DEBUG(lock, "lock acquired, setting rss=%llu; leaving kms=%llu, end=%llu", - loi->loi_lvb.lvb_size, loi->loi_kms, - lock->l_policy_data.l_extent.end); - } - ldlm_lock_allow_match(lock); - } else if (rc == ELDLM_LOCK_ABORTED && (flags & LDLM_FL_HAS_INTENT)) { - LASSERT(lock != NULL); - loi->loi_lvb = *lvb; - ldlm_lock_allow_match(lock); - CDEBUG(D_INODE, "glimpsed, setting rss=%llu; leaving kms=%llu\n", - loi->loi_lvb.lvb_size, loi->loi_kms); - rc = ELDLM_OK; - } - - if (lock != NULL) { - if (rc != ELDLM_OK) - ldlm_lock_fail_match(lock); - - LDLM_LOCK_PUT(lock); - } -} -EXPORT_SYMBOL(osc_update_enqueue); - struct ptlrpc_request_set *PTLRPCD_SET = (void *)1; /* When enqueuing asynchronously, locks are not ordered, we can obtain a lock @@ -2588,22 +2390,6 @@ int osc_enqueue_base(struct obd_export *exp, struct ldlm_res_id *res_id, return rc; } -static int osc_enqueue(struct obd_export *exp, struct obd_info *oinfo, - struct ldlm_enqueue_info *einfo, - struct ptlrpc_request_set *rqset) -{ - struct ldlm_res_id res_id; - int rc; - - ostid_build_res_name(&oinfo->oi_md->lsm_oi, &res_id); - rc = osc_enqueue_base(exp, &res_id, &oinfo->oi_flags, &oinfo->oi_policy, - &oinfo->oi_md->lsm_oinfo[0]->loi_lvb, - oinfo->oi_md->lsm_oinfo[0]->loi_kms_valid, - oinfo->oi_cb_up, oinfo, einfo, oinfo->oi_lockh, - rqset, rqset != NULL, 0); - return rc; -} - int osc_match_base(struct obd_export *exp, struct ldlm_res_id *res_id, __u32 type, ldlm_policy_data_t *policy, __u32 mode, __u64 *flags, void *data, struct lustre_handle *lockh, @@ -2657,28 +2443,6 @@ int osc_cancel_base(struct lustre_handle *lockh, __u32 mode) return 0; } -static int osc_cancel(struct obd_export *exp, struct lov_stripe_md *md, - __u32 mode, struct lustre_handle *lockh) -{ - return osc_cancel_base(lockh, mode); -} - -static int osc_cancel_unused(struct obd_export *exp, - struct lov_stripe_md *lsm, - ldlm_cancel_flags_t flags, - void *opaque) -{ - struct obd_device *obd = class_exp2obd(exp); - struct ldlm_res_id res_id, *resp = NULL; - - if (lsm != NULL) { - ostid_build_res_name(&lsm->lsm_oi, &res_id); - resp = &res_id; - } - - return ldlm_cli_cancel_unused(obd->obd_namespace, resp, flags, opaque); -} - static int osc_statfs_interpret(const struct lu_env *env, struct ptlrpc_request *req, struct osc_async_args *aa, int rc) @@ -2694,15 +2458,18 @@ static int osc_statfs_interpret(const struct lu_env *env, return rc; if ((rc == -ENOTCONN || rc == -EAGAIN) && - (aa->aa_oi->oi_flags & OBD_STATFS_NODELAY)) - GOTO(out, rc = 0); + (aa->aa_oi->oi_flags & OBD_STATFS_NODELAY)) { + rc = 0; + goto out; + } if (rc != 0) - GOTO(out, rc); + goto out; msfs = req_capsule_server_get(&req->rq_pill, &RMF_OBD_STATFS); if (msfs == NULL) { - GOTO(out, rc = -EPROTO); + rc = -EPROTO; + goto out; } *aa->aa_oi->oi_osfs = *msfs; @@ -2802,11 +2569,12 @@ static int osc_statfs(const struct lu_env *env, struct obd_export *exp, rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; msfs = req_capsule_server_get(&req->rq_pill, &RMF_OBD_STATFS); if (msfs == NULL) { - GOTO(out, rc = -EPROTO); + rc = -EPROTO; + goto out; } *osfs = *msfs; @@ -2898,19 +2666,23 @@ static int osc_iocontrol(unsigned int cmd, struct obd_export *exp, int len, buf = NULL; len = 0; - if (obd_ioctl_getdata(&buf, &len, (void *)uarg)) - GOTO(out, err = -EINVAL); + if (obd_ioctl_getdata(&buf, &len, (void *)uarg)) { + err = -EINVAL; + goto out; + } data = (struct obd_ioctl_data *)buf; if (sizeof(*desc) > data->ioc_inllen1) { obd_ioctl_freedata(buf, len); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } if (data->ioc_inllen2 < sizeof(uuid)) { obd_ioctl_freedata(buf, len); - GOTO(out, err = -EINVAL); + err = -EINVAL; + goto out; } desc = (struct lov_desc *)data->ioc_inlbuf1; @@ -2928,36 +2700,37 @@ static int osc_iocontrol(unsigned int cmd, struct obd_export *exp, int len, if (err) err = -EFAULT; obd_ioctl_freedata(buf, len); - GOTO(out, err); + goto out; } case LL_IOC_LOV_SETSTRIPE: err = obd_alloc_memmd(exp, karg); if (err > 0) err = 0; - GOTO(out, err); + goto out; case LL_IOC_LOV_GETSTRIPE: err = osc_getstripe(karg, uarg); - GOTO(out, err); + goto out; case OBD_IOC_CLIENT_RECOVER: err = ptlrpc_recover_import(obd->u.cli.cl_import, data->ioc_inlbuf1, 0); if (err > 0) err = 0; - GOTO(out, err); + goto out; case IOC_OSC_SET_ACTIVE: err = ptlrpc_set_import_active(obd->u.cli.cl_import, data->ioc_offset); - GOTO(out, err); + goto out; case OBD_IOC_POLL_QUOTACHECK: err = osc_quota_poll_check(exp, (struct if_quotacheck *)karg); - GOTO(out, err); + goto out; case OBD_IOC_PING_TARGET: err = ptlrpc_obd_ping(obd); - GOTO(out, err); + goto out; default: CDEBUG(D_INODE, "unrecognised ioctl %#x by %s\n", cmd, current_comm()); - GOTO(out, err = -ENOTTY); + err = -ENOTTY; + goto out; } out: module_put(THIS_MODULE); @@ -2965,7 +2738,7 @@ out: } static int osc_get_info(const struct lu_env *env, struct obd_export *exp, - obd_count keylen, void *key, __u32 *vallen, void *val, + u32 keylen, void *key, __u32 *vallen, void *val, struct lov_stripe_md *lsm) { if (!vallen || !val) @@ -2978,7 +2751,7 @@ static int osc_get_info(const struct lu_env *env, struct obd_export *exp, return 0; } else if (KEY_IS(KEY_LAST_ID)) { struct ptlrpc_request *req; - obd_id *reply; + u64 *reply; char *tmp; int rc; @@ -3002,13 +2775,15 @@ static int osc_get_info(const struct lu_env *env, struct obd_export *exp, ptlrpc_request_set_replen(req); rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; reply = req_capsule_server_get(&req->rq_pill, &RMF_OBD_ID); - if (reply == NULL) - GOTO(out, rc = -EPROTO); + if (reply == NULL) { + rc = -EPROTO; + goto out; + } - *((obd_id *)val) = *reply; + *((u64 *)val) = *reply; out: ptlrpc_req_finished(req); return rc; @@ -3057,8 +2832,10 @@ static int osc_get_info(const struct lu_env *env, struct obd_export *exp, skip_locking: req = ptlrpc_request_alloc(class_exp2cliimp(exp), &RQF_OST_GET_INFO_FIEMAP); - if (req == NULL) - GOTO(drop_lock, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto drop_lock; + } req_capsule_set_size(&req->rq_pill, &RMF_FIEMAP_KEY, RCL_CLIENT, keylen); @@ -3070,7 +2847,7 @@ skip_locking: rc = ptlrpc_request_pack(req, LUSTRE_OST_VERSION, OST_GET_INFO); if (rc) { ptlrpc_request_free(req); - GOTO(drop_lock, rc); + goto drop_lock; } tmp = req_capsule_client_get(&req->rq_pill, &RMF_FIEMAP_KEY); @@ -3081,11 +2858,13 @@ skip_locking: ptlrpc_request_set_replen(req); rc = ptlrpc_queue_wait(req); if (rc) - GOTO(fini_req, rc); + goto fini_req; reply = req_capsule_server_get(&req->rq_pill, &RMF_FIEMAP_VAL); - if (reply == NULL) - GOTO(fini_req, rc = -EPROTO); + if (reply == NULL) { + rc = -EPROTO; + goto fini_req; + } memcpy(val, reply, *vallen); fini_req: @@ -3100,7 +2879,7 @@ drop_lock: } static int osc_set_info_async(const struct lu_env *env, struct obd_export *exp, - obd_count keylen, void *key, obd_count vallen, + u32 keylen, void *key, u32 vallen, void *val, struct ptlrpc_request_set *set) { struct ptlrpc_request *req; @@ -3190,7 +2969,7 @@ static int osc_set_info_async(const struct lu_env *env, struct obd_export *exp, memcpy(tmp, val, vallen); if (KEY_IS(KEY_GRANT_SHRINK)) { - struct osc_grant_args *aa; + struct osc_brw_async_args *aa; struct obdo *oa; CLASSERT(sizeof(*aa) <= sizeof(req->rq_async_args)); @@ -3216,32 +2995,6 @@ static int osc_set_info_async(const struct lu_env *env, struct obd_export *exp, return 0; } - -static int osc_llog_init(struct obd_device *obd, struct obd_llog_group *olg, - struct obd_device *disk_obd, int *index) -{ - /* this code is not supposed to be used with LOD/OSP - * to be removed soon */ - LBUG(); - return 0; -} - -static int osc_llog_finish(struct obd_device *obd, int count) -{ - struct llog_ctxt *ctxt; - - ctxt = llog_get_context(obd, LLOG_MDS_OST_ORIG_CTXT); - if (ctxt) { - llog_cat_close(NULL, ctxt->loc_handle); - llog_cleanup(NULL, ctxt); - } - - ctxt = llog_get_context(obd, LLOG_SIZE_REPL_CTXT); - if (ctxt) - llog_cleanup(NULL, ctxt); - return 0; -} - static int osc_reconnect(const struct lu_env *env, struct obd_export *exp, struct obd_device *obd, struct obd_uuid *cluuid, @@ -3271,22 +3024,8 @@ static int osc_reconnect(const struct lu_env *env, static int osc_disconnect(struct obd_export *exp) { struct obd_device *obd = class_exp2obd(exp); - struct llog_ctxt *ctxt; int rc; - ctxt = llog_get_context(obd, LLOG_SIZE_REPL_CTXT); - if (ctxt) { - if (obd->u.cli.cl_conn_count == 1) { - /* Flush any remaining cancel messages out to the - * target */ - llog_sync(ctxt, exp, 0); - } - llog_ctxt_put(ctxt); - } else { - CDEBUG(D_HA, "No LLOG_SIZE_REPL_CTXT found in obd %p\n", - obd); - } - rc = client_disconnect_export(exp); /** * Initially we put del_shrink_grant before disconnect_export, but it @@ -3432,16 +3171,18 @@ int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg) rc = client_obd_setup(obd, lcfg); if (rc) - GOTO(out_ptlrpcd, rc); + goto out_ptlrpcd; handler = ptlrpcd_alloc_work(cli->cl_import, brw_queue_work, cli); - if (IS_ERR(handler)) - GOTO(out_client_setup, rc = PTR_ERR(handler)); + if (IS_ERR(handler)) { + rc = PTR_ERR(handler); + goto out_client_setup; + } cli->cl_writeback_work = handler; rc = osc_quota_setup(obd); if (rc) - GOTO(out_ptlrpcd_work, rc); + goto out_ptlrpcd_work; cli->cl_grant_shrink_interval = GRANT_SHRINK_INTERVAL; lprocfs_osc_init_vars(&lvars); @@ -3509,9 +3250,6 @@ static int osc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) obd_cleanup_client_import(obd); ptlrpc_lprocfs_unregister_obd(obd); lprocfs_obd_cleanup(obd); - rc = obd_llog_finish(obd, 0); - if (rc != 0) - CERROR("failed to cleanup llogging subsystems\n"); break; } } @@ -3559,10 +3297,10 @@ int osc_process_config_base(struct obd_device *obd, struct lustre_cfg *lcfg) break; } - return(rc); + return rc; } -static int osc_process_config(struct obd_device *obd, obd_count len, void *buf) +static int osc_process_config(struct obd_device *obd, u32 len, void *buf) { return osc_process_config_base(obd, buf); } @@ -3587,20 +3325,11 @@ struct obd_ops osc_obd_ops = { .o_getattr_async = osc_getattr_async, .o_setattr = osc_setattr, .o_setattr_async = osc_setattr_async, - .o_brw = osc_brw, - .o_punch = osc_punch, - .o_sync = osc_sync, - .o_enqueue = osc_enqueue, - .o_change_cbdata = osc_change_cbdata, .o_find_cbdata = osc_find_cbdata, - .o_cancel = osc_cancel, - .o_cancel_unused = osc_cancel_unused, .o_iocontrol = osc_iocontrol, .o_get_info = osc_get_info, .o_set_info_async = osc_set_info_async, .o_import_event = osc_import_event, - .o_llog_init = osc_llog_init, - .o_llog_finish = osc_llog_finish, .o_process_config = osc_process_config, .o_quotactl = osc_quotactl, .o_quotacheck = osc_quotacheck, diff --git a/drivers/staging/lustre/lustre/ptlrpc/client.c b/drivers/staging/lustre/lustre/ptlrpc/client.c index 4146e8b29a6d..38cc931a189c 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/client.c @@ -267,7 +267,7 @@ static void ptlrpc_at_adj_service(struct ptlrpc_request *req, if (oldse != 0) CDEBUG(D_ADAPTTO, "The RPC service estimate for %s ptl %d " "has changed from %d to %d\n", - req->rq_import->imp_obd->obd_name,req->rq_request_portal, + req->rq_import->imp_obd->obd_name, req->rq_request_portal, oldse, at_get(&at->iat_service_estimate[idx])); } @@ -289,7 +289,7 @@ static void ptlrpc_at_adj_net_latency(struct ptlrpc_request *req, at = &req->rq_import->imp_at; /* Network latency is total time less server processing time */ - nl = max_t(int, now - req->rq_sent - service_time, 0) +1/*st rounding*/; + nl = max_t(int, now - req->rq_sent - service_time, 0) + 1/*st rounding*/; if (service_time > now - req->rq_sent + 3 /* bz16408 */) CWARN("Reported service time %u > total measured time " CFS_DURATION_T"\n", service_time, @@ -313,14 +313,14 @@ static int unpack_reply(struct ptlrpc_request *req) rc = ptlrpc_unpack_rep_msg(req, req->rq_replen); if (rc) { DEBUG_REQ(D_ERROR, req, "unpack_rep failed: %d", rc); - return(-EPROTO); + return -EPROTO; } } rc = lustre_unpack_rep_ptlrpc_body(req, MSG_PTLRPC_BODY_OFF); if (rc) { DEBUG_REQ(D_ERROR, req, "unpack ptlrpc body failed: %d", rc); - return(-EPROTO); + return -EPROTO; } return 0; } @@ -394,7 +394,7 @@ void ptlrpc_request_cache_fini(void) kmem_cache_destroy(request_cache); } -struct ptlrpc_request *ptlrpc_request_cache_alloc(int flags) +struct ptlrpc_request *ptlrpc_request_cache_alloc(gfp_t flags) { struct ptlrpc_request *req; @@ -578,7 +578,7 @@ static int __ptlrpc_request_bufs_pack(struct ptlrpc_request *request, else { rc = sptlrpc_req_get_ctx(request); if (rc) - GOTO(out_free, rc); + goto out_free; } sptlrpc_req_set_flavor(request, opcode); @@ -587,7 +587,7 @@ static int __ptlrpc_request_bufs_pack(struct ptlrpc_request *request, lengths, bufs); if (rc) { LASSERT(!request->rq_pool); - GOTO(out_ctx, rc); + goto out_ctx; } lustre_msg_add_version(request->rq_reqmsg, version); @@ -721,7 +721,7 @@ struct ptlrpc_request *__ptlrpc_request_alloc(struct obd_import *imp, */ static struct ptlrpc_request * ptlrpc_request_alloc_internal(struct obd_import *imp, - struct ptlrpc_request_pool * pool, + struct ptlrpc_request_pool *pool, const struct req_format *format) { struct ptlrpc_request *request; @@ -751,7 +751,7 @@ EXPORT_SYMBOL(ptlrpc_request_alloc); * initialize its buffer structure according to capsule template \a format. */ struct ptlrpc_request *ptlrpc_request_alloc_pool(struct obd_import *imp, - struct ptlrpc_request_pool * pool, + struct ptlrpc_request_pool *pool, const struct req_format *format) { return ptlrpc_request_alloc_internal(imp, pool, format); @@ -1585,7 +1585,7 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) continue; if (req->rq_phase == RQ_PHASE_INTERPRET) - GOTO(interpret, req->rq_status); + goto interpret; /* * Note that this also will start async reply unlink. @@ -1604,7 +1604,7 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) if (req->rq_status == 0) req->rq_status = -EIO; ptlrpc_rqphase_move(req, RQ_PHASE_INTERPRET); - GOTO(interpret, req->rq_status); + goto interpret; } else { continue; } @@ -1617,7 +1617,7 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) if (req->rq_status == 0) req->rq_status = -EIO; ptlrpc_rqphase_move(req, RQ_PHASE_INTERPRET); - GOTO(interpret, req->rq_status); + goto interpret; } /* ptlrpc_set_wait->l_wait_event sets lwi_allow_intr @@ -1633,7 +1633,7 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) req->rq_wait_ctx)) { req->rq_status = -EINTR; ptlrpc_rqphase_move(req, RQ_PHASE_INTERPRET); - GOTO(interpret, req->rq_status); + goto interpret; } if (req->rq_phase == RQ_PHASE_RPC) { @@ -1662,7 +1662,7 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) ptlrpc_rqphase_move(req, RQ_PHASE_INTERPRET); spin_unlock(&imp->imp_lock); - GOTO(interpret, req->rq_status); + goto interpret; } if (ptlrpc_no_resend(req) && !req->rq_wait_ctx) { @@ -1670,7 +1670,7 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) ptlrpc_rqphase_move(req, RQ_PHASE_INTERPRET); spin_unlock(&imp->imp_lock); - GOTO(interpret, req->rq_status); + goto interpret; } list_del_init(&req->rq_list); @@ -1780,7 +1780,7 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set) */ if (req->rq_bulk == NULL || req->rq_status < 0) { ptlrpc_rqphase_move(req, RQ_PHASE_INTERPRET); - GOTO(interpret, req->rq_status); + goto interpret; } ptlrpc_rqphase_move(req, RQ_PHASE_BULK); @@ -2041,8 +2041,6 @@ int ptlrpc_set_next_timeout(struct ptlrpc_request_set *set) struct ptlrpc_request *req; int deadline; - SIGNAL_MASK_ASSERT(); /* XXX BUG 1511 */ - list_for_each(tmp, &set->set_requests) { req = list_entry(tmp, struct ptlrpc_request, rq_set_chain); @@ -2132,7 +2130,7 @@ int ptlrpc_set_wait(struct ptlrpc_request_set *set) * interrupts are allowed. Wait until all * complete, or an in-flight req times out. */ - lwi = LWI_TIMEOUT(cfs_time_seconds(timeout? timeout : 1), + lwi = LWI_TIMEOUT(cfs_time_seconds(timeout ? timeout : 1), ptlrpc_expired_set, set); rc = l_wait_event(set->set_waitq, ptlrpc_check_set(NULL, set), &lwi); @@ -2186,7 +2184,7 @@ int ptlrpc_set_wait(struct ptlrpc_request_set *set) } if (set->set_interpret != NULL) { - int (*interpreter)(struct ptlrpc_request_set *set,void *,int) = + int (*interpreter)(struct ptlrpc_request_set *set, void *, int) = set->set_interpret; rc = interpreter (set, set->set_arg, rc); } else { @@ -2222,7 +2220,7 @@ static void __ptlrpc_free_req(struct ptlrpc_request *request, int locked) } LASSERTF(!request->rq_receiving_reply, "req %p\n", request); - LASSERTF(request->rq_rqbd == NULL, "req %p\n",request);/* client-side */ + LASSERTF(request->rq_rqbd == NULL, "req %p\n", request);/* client-side */ LASSERTF(list_empty(&request->rq_list), "req %p\n", request); LASSERTF(list_empty(&request->rq_set_chain), "req %p\n", request); LASSERTF(list_empty(&request->rq_exp_list), "req %p\n", request); @@ -2491,7 +2489,7 @@ void ptlrpc_free_committed(struct obd_import *imp) } if (req->rq_import_generation < imp->imp_generation) { DEBUG_REQ(D_RPCTRACE, req, "free request with old gen"); - GOTO(free_req, 0); + goto free_req; } /* not yet committed */ @@ -2692,7 +2690,7 @@ struct ptlrpc_replay_async_args { */ static int ptlrpc_replay_interpret(const struct lu_env *env, struct ptlrpc_request *req, - void * data, int rc) + void *data, int rc) { struct ptlrpc_replay_async_args *aa = data; struct obd_import *imp = req->rq_import; @@ -2701,13 +2699,16 @@ static int ptlrpc_replay_interpret(const struct lu_env *env, if (!ptlrpc_client_replied(req)) { CERROR("request replay timed out, restarting recovery\n"); - GOTO(out, rc = -ETIMEDOUT); + rc = -ETIMEDOUT; + goto out; } if (lustre_msg_get_type(req->rq_repmsg) == PTL_RPC_MSG_ERR && (lustre_msg_get_status(req->rq_repmsg) == -ENOTCONN || - lustre_msg_get_status(req->rq_repmsg) == -ENODEV)) - GOTO(out, rc = lustre_msg_get_status(req->rq_repmsg)); + lustre_msg_get_status(req->rq_repmsg) == -ENODEV)) { + rc = lustre_msg_get_status(req->rq_repmsg); + goto out; + } /** VBR: check version failure */ if (lustre_msg_get_status(req->rq_repmsg) == -EOVERFLOW) { @@ -2742,7 +2743,8 @@ static int ptlrpc_replay_interpret(const struct lu_env *env, "Reported transno %llu is bigger than the replayed one: %llu", req->rq_transno, lustre_msg_get_transno(req->rq_reqmsg)); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } DEBUG_REQ(D_HA, req, "got rep"); diff --git a/drivers/staging/lustre/lustre/ptlrpc/connection.c b/drivers/staging/lustre/lustre/ptlrpc/connection.c index adff1ab4f5a4..2a875ab57911 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/connection.c +++ b/drivers/staging/lustre/lustre/ptlrpc/connection.c @@ -41,7 +41,7 @@ #include "ptlrpc_internal.h" -static struct cfs_hash *conn_hash = NULL; +static struct cfs_hash *conn_hash; static cfs_hash_ops_t conn_hash_ops; struct ptlrpc_connection * @@ -52,7 +52,7 @@ ptlrpc_connection_get(lnet_process_id_t peer, lnet_nid_t self, conn = cfs_hash_lookup(conn_hash, &peer); if (conn) - GOTO(out, conn); + goto out; OBD_ALLOC_PTR(conn); if (!conn) @@ -173,7 +173,7 @@ conn_keycmp(const void *key, struct hlist_node *hnode) const lnet_process_id_t *conn_key; LASSERT(key != NULL); - conn_key = (lnet_process_id_t*)key; + conn_key = (lnet_process_id_t *)key; conn = hlist_entry(hnode, struct ptlrpc_connection, c_hash); return conn_key->nid == conn->c_peer.nid && diff --git a/drivers/staging/lustre/lustre/ptlrpc/events.c b/drivers/staging/lustre/lustre/ptlrpc/events.c index c3ec21d5d29f..32dfffa76a5e 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/events.c +++ b/drivers/staging/lustre/lustre/ptlrpc/events.c @@ -186,7 +186,8 @@ void client_bulk_callback(lnet_event_t *ev) if (CFS_FAIL_CHECK_ORSET(OBD_FAIL_PTLRPC_CLIENT_BULK_CB, CFS_FAIL_ONCE)) ev->status = -EIO; - if (CFS_FAIL_CHECK_ORSET(OBD_FAIL_PTLRPC_CLIENT_BULK_CB2,CFS_FAIL_ONCE)) + if (CFS_FAIL_CHECK_ORSET(OBD_FAIL_PTLRPC_CLIENT_BULK_CB2, + CFS_FAIL_ONCE)) ev->status = -EIO; CDEBUG((ev->status == 0) ? D_NET : D_ERROR, @@ -481,7 +482,7 @@ int ptlrpc_uuid_to_peer(struct obd_uuid *uuid, } } - CDEBUG(D_NET,"%s->%s\n", uuid->uuid, libcfs_id2str(*peer)); + CDEBUG(D_NET, "%s->%s\n", uuid->uuid, libcfs_id2str(*peer)); return rc; } @@ -541,7 +542,7 @@ int ptlrpc_ni_init(void) rc = LNetNIInit(pid); if (rc < 0) { CDEBUG(D_NET, "Can't init network interface: %d\n", rc); - return (-ENOENT); + return -ENOENT; } /* CAVEAT EMPTOR: how we process portals events is _radically_ @@ -557,7 +558,7 @@ int ptlrpc_ni_init(void) CERROR("Failed to allocate event queue: %d\n", rc); LNetNIFini(); - return (-ENOMEM); + return -ENOMEM; } diff --git a/drivers/staging/lustre/lustre/ptlrpc/import.c b/drivers/staging/lustre/lustre/ptlrpc/import.c index f522fc5d3a93..2e7e7171ca63 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/import.c +++ b/drivers/staging/lustre/lustre/ptlrpc/import.c @@ -93,7 +93,7 @@ do { \ static int ptlrpc_connect_interpret(const struct lu_env *env, struct ptlrpc_request *request, - void * data, int rc); + void *data, int rc); int ptlrpc_import_recovery_state_machine(struct obd_import *imp); /* Only this function is allowed to change the import state when it is @@ -297,7 +297,8 @@ void ptlrpc_invalidate_import(struct obd_import *imp) timeout = 1; } - CDEBUG(D_RPCTRACE,"Sleeping %d sec for inflight to error out\n", + CDEBUG(D_RPCTRACE, + "Sleeping %d sec for inflight to error out\n", timeout); /* Wait for all requests to error out and call completion @@ -668,11 +669,11 @@ int ptlrpc_connect_import(struct obd_import *imp) rc = import_select_connection(imp); if (rc) - GOTO(out, rc); + goto out; rc = sptlrpc_import_sec_adapt(imp, NULL, NULL); if (rc) - GOTO(out, rc); + goto out; /* Reset connect flags to the originally requested flags, in case * the server is updated on-the-fly we will get the new features. */ @@ -685,17 +686,19 @@ int ptlrpc_connect_import(struct obd_import *imp) rc = obd_reconnect(NULL, imp->imp_obd->obd_self_export, obd, &obd->obd_uuid, &imp->imp_connect_data, NULL); if (rc) - GOTO(out, rc); + goto out; request = ptlrpc_request_alloc(imp, &RQF_MDS_CONNECT); - if (request == NULL) - GOTO(out, rc = -ENOMEM); + if (request == NULL) { + rc = -ENOMEM; + goto out; + } rc = ptlrpc_request_bufs_pack(request, LUSTRE_OBD_VERSION, imp->imp_connect_op, bufs, NULL); if (rc) { ptlrpc_request_free(request); - GOTO(out, rc); + goto out; } /* Report the rpc service time to the server so that it knows how long @@ -803,7 +806,7 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, imp->imp_force_reconnect = ptlrpc_busy_reconnect(rc); spin_unlock(&imp->imp_lock); ptlrpc_maybe_ping_import_soon(imp); - GOTO(out, rc); + goto out; } spin_unlock(&imp->imp_lock); @@ -821,7 +824,7 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, CERROR("%s: no connect data from server\n", imp->imp_obd->obd_name); rc = -EPROTO; - GOTO(out, rc); + goto out; } spin_lock(&imp->imp_lock); @@ -843,9 +846,10 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, if ((ocd->ocd_connect_flags & imp->imp_connect_flags_orig) != ocd->ocd_connect_flags) { CERROR("%s: Server didn't granted asked subset of flags: asked=%#llx grranted=%#llx\n", - imp->imp_obd->obd_name,imp->imp_connect_flags_orig, + imp->imp_obd->obd_name, imp->imp_connect_flags_orig, ocd->ocd_connect_flags); - GOTO(out, rc = -EPROTO); + rc = -EPROTO; + goto out; } if (!exp) { @@ -853,7 +857,8 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, connect attempt */ CERROR("%s: missing export after connect\n", imp->imp_obd->obd_name); - GOTO(out, rc = -ENODEV); + rc = -ENODEV; + goto out; } old_connect_flags = exp_connect_flags(exp); exp->exp_connect_data = *ocd; @@ -892,7 +897,8 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, ptlrpc_activate_import(imp); } - GOTO(finish, rc = 0); + rc = 0; + goto finish; } /* Determine what recovery state to move the import to. */ @@ -904,7 +910,8 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, obd2cli_tgt(imp->imp_obd), imp->imp_connection->c_remote_uuid.uuid, imp->imp_dlm_handle.cookie); - GOTO(out, rc = -ENOTCONN); + rc = -ENOTCONN; + goto out; } if (memcmp(&imp->imp_remote_handle, @@ -921,7 +928,7 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, * participate since we can reestablish all of our state * with server again */ if ((MSG_CONNECT_RECOVERING & msg_flags)) { - CDEBUG(level,"%s@%s changed server handle from %#llx to %#llx but is still in recovery\n", + CDEBUG(level, "%s@%s changed server handle from %#llx to %#llx but is still in recovery\n", obd2cli_tgt(imp->imp_obd), imp->imp_connection->c_remote_uuid.uuid, imp->imp_remote_handle.cookie, @@ -944,7 +951,8 @@ static int ptlrpc_connect_interpret(const struct lu_env *env, if (!(MSG_CONNECT_RECOVERING & msg_flags)) { IMPORT_SET_STATE(imp, LUSTRE_IMP_EVICTED); - GOTO(finish, rc = 0); + rc = 0; + goto finish; } } else { @@ -1024,10 +1032,18 @@ finish: spin_unlock(&imp->imp_lock); - if (!ocd->ocd_ibits_known && - ocd->ocd_connect_flags & OBD_CONNECT_IBITS) - CERROR("Inodebits aware server returned zero compatible" - " bits?\n"); + if ((imp->imp_connect_flags_orig & OBD_CONNECT_IBITS) && + !(ocd->ocd_connect_flags & OBD_CONNECT_IBITS)) { + LCONSOLE_WARN("%s: MDS %s does not support ibits " + "lock, either very old or invalid: " + "requested %llx, replied %llx\n", + imp->imp_obd->obd_name, + imp->imp_connection->c_remote_uuid.uuid, + imp->imp_connect_flags_orig, + ocd->ocd_connect_flags); + rc = -EPROTO; + goto out; + } if ((ocd->ocd_connect_flags & OBD_CONNECT_VERSION) && (ocd->ocd_version > LUSTRE_VERSION_CODE + @@ -1096,7 +1112,7 @@ finish: * Enforce ADLER for backward compatibility*/ cli->cl_supp_cksum_types = OBD_CKSUM_ADLER; } - cli->cl_cksum_type =cksum_type_select(cli->cl_supp_cksum_types); + cli->cl_cksum_type = cksum_type_select(cli->cl_supp_cksum_types); if (ocd->ocd_connect_flags & OBD_CONNECT_BRW_SIZE) cli->cl_max_pages_per_rpc = @@ -1209,7 +1225,7 @@ out: */ static int completed_replay_interpret(const struct lu_env *env, struct ptlrpc_request *req, - void * data, int rc) + void *data, int rc) { atomic_dec(&req->rq_import->imp_replay_inflight); if (req->rq_status == 0 && @@ -1370,7 +1386,7 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp) IMPORT_SET_STATE(imp, LUSTRE_IMP_REPLAY_LOCKS); rc = ldlm_replay_locks(imp); if (rc) - GOTO(out, rc); + goto out; } rc = 0; } @@ -1380,7 +1396,7 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp) IMPORT_SET_STATE(imp, LUSTRE_IMP_REPLAY_WAIT); rc = signal_completed_replay(imp); if (rc) - GOTO(out, rc); + goto out; } } @@ -1398,7 +1414,7 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp) rc = ptlrpc_resend(imp); if (rc) - GOTO(out, rc); + goto out; IMPORT_SET_STATE(imp, LUSTRE_IMP_FULL); ptlrpc_activate_import(imp); @@ -1425,7 +1441,7 @@ int ptlrpc_disconnect_import(struct obd_import *imp, int noclose) int rq_opc, rc = 0; if (imp->imp_obd->obd_force) - GOTO(set_state, rc); + goto set_state; switch (imp->imp_connect_op) { case OST_CONNECT: @@ -1471,7 +1487,7 @@ int ptlrpc_disconnect_import(struct obd_import *imp, int noclose) spin_lock(&imp->imp_lock); if (imp->imp_state != LUSTRE_IMP_FULL) - GOTO(out, 0); + goto out; spin_unlock(&imp->imp_lock); req = ptlrpc_request_alloc_pack(imp, &RQF_MDS_DISCONNECT, diff --git a/drivers/staging/lustre/lustre/ptlrpc/layout.c b/drivers/staging/lustre/lustre/ptlrpc/layout.c index 511cb9cbf0d4..5b8337187b59 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/layout.c +++ b/drivers/staging/lustre/lustre/ptlrpc/layout.c @@ -1094,8 +1094,8 @@ struct req_msg_field RMF_EAVALS_LENS = EXPORT_SYMBOL(RMF_EAVALS_LENS); struct req_msg_field RMF_OBD_ID = - DEFINE_MSGF("obd_id", 0, - sizeof(obd_id), lustre_swab_ost_last_id, NULL); + DEFINE_MSGF("u64", 0, + sizeof(u64), lustre_swab_ost_last_id, NULL); EXPORT_SYMBOL(RMF_OBD_ID); struct req_msg_field RMF_FID = diff --git a/drivers/staging/lustre/lustre/ptlrpc/llog_client.c b/drivers/staging/lustre/lustre/ptlrpc/llog_client.c index 6a1ab5c98bc6..56f825fbb17c 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/llog_client.c +++ b/drivers/staging/lustre/lustre/ptlrpc/llog_client.c @@ -93,8 +93,10 @@ static int llog_client_open(const struct lu_env *env, LASSERT(lgh); req = ptlrpc_request_alloc(imp, &RQF_LLOG_ORIGIN_HANDLE_CREATE); - if (req == NULL) - GOTO(out, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto out; + } if (name) req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT, @@ -105,7 +107,7 @@ static int llog_client_open(const struct lu_env *env, if (rc) { ptlrpc_request_free(req); req = NULL; - GOTO(out, rc); + goto out; } ptlrpc_request_set_replen(req); @@ -124,11 +126,13 @@ static int llog_client_open(const struct lu_env *env, rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; body = req_capsule_server_get(&req->rq_pill, &RMF_LLOGD_BODY); - if (body == NULL) - GOTO(out, rc = -EFAULT); + if (body == NULL) { + rc = -EFAULT; + goto out; + } lgh->lgh_id = body->lgd_logid; lgh->lgh_ctxt = ctxt; @@ -150,8 +154,10 @@ static int llog_client_destroy(const struct lu_env *env, req = ptlrpc_request_alloc_pack(imp, &RQF_LLOG_ORIGIN_HANDLE_DESTROY, LUSTRE_LOG_VERSION, LLOG_ORIGIN_HANDLE_DESTROY); - if (req == NULL) - GOTO(err_exit, rc =-ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto err_exit; + } body = req_capsule_client_get(&req->rq_pill, &RMF_LLOGD_BODY); body->lgd_logid = loghandle->lgh_id; @@ -186,8 +192,10 @@ static int llog_client_next_block(const struct lu_env *env, req = ptlrpc_request_alloc_pack(imp, &RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK, LUSTRE_LOG_VERSION, LLOG_ORIGIN_HANDLE_NEXT_BLOCK); - if (req == NULL) - GOTO(err_exit, rc =-ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto err_exit; + } body = req_capsule_client_get(&req->rq_pill, &RMF_LLOGD_BODY); body->lgd_logid = loghandle->lgh_id; @@ -202,16 +210,20 @@ static int llog_client_next_block(const struct lu_env *env, ptlrpc_request_set_replen(req); rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; body = req_capsule_server_get(&req->rq_pill, &RMF_LLOGD_BODY); - if (body == NULL) - GOTO(out, rc =-EFAULT); + if (body == NULL) { + rc = -EFAULT; + goto out; + } /* The log records are swabbed as they are processed */ ptr = req_capsule_server_get(&req->rq_pill, &RMF_EADATA); - if (ptr == NULL) - GOTO(out, rc =-EFAULT); + if (ptr == NULL) { + rc = -EFAULT; + goto out; + } *cur_idx = body->lgd_saved_index; *cur_offset = body->lgd_cur_offset; @@ -238,8 +250,10 @@ static int llog_client_prev_block(const struct lu_env *env, req = ptlrpc_request_alloc_pack(imp, &RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK, LUSTRE_LOG_VERSION, LLOG_ORIGIN_HANDLE_PREV_BLOCK); - if (req == NULL) - GOTO(err_exit, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto err_exit; + } body = req_capsule_client_get(&req->rq_pill, &RMF_LLOGD_BODY); body->lgd_logid = loghandle->lgh_id; @@ -253,15 +267,19 @@ static int llog_client_prev_block(const struct lu_env *env, rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; body = req_capsule_server_get(&req->rq_pill, &RMF_LLOGD_BODY); - if (body == NULL) - GOTO(out, rc =-EFAULT); + if (body == NULL) { + rc = -EFAULT; + goto out; + } ptr = req_capsule_server_get(&req->rq_pill, &RMF_EADATA); - if (ptr == NULL) - GOTO(out, rc =-EFAULT); + if (ptr == NULL) { + rc = -EFAULT; + goto out; + } memcpy(buf, ptr, len); out: @@ -282,11 +300,13 @@ static int llog_client_read_header(const struct lu_env *env, int rc; LLOG_CLIENT_ENTRY(handle->lgh_ctxt, imp); - req = ptlrpc_request_alloc_pack(imp,&RQF_LLOG_ORIGIN_HANDLE_READ_HEADER, + req = ptlrpc_request_alloc_pack(imp, &RQF_LLOG_ORIGIN_HANDLE_READ_HEADER, LUSTRE_LOG_VERSION, LLOG_ORIGIN_HANDLE_READ_HEADER); - if (req == NULL) - GOTO(err_exit, rc = -ENOMEM); + if (req == NULL) { + rc = -ENOMEM; + goto err_exit; + } body = req_capsule_client_get(&req->rq_pill, &RMF_LLOGD_BODY); body->lgd_logid = handle->lgh_id; @@ -296,11 +316,13 @@ static int llog_client_read_header(const struct lu_env *env, ptlrpc_request_set_replen(req); rc = ptlrpc_queue_wait(req); if (rc) - GOTO(out, rc); + goto out; hdr = req_capsule_server_get(&req->rq_pill, &RMF_LLOG_LOG_HDR); - if (hdr == NULL) - GOTO(out, rc =-EFAULT); + if (hdr == NULL) { + rc = -EFAULT; + goto out; + } memcpy(handle->lgh_hdr, hdr, sizeof(*hdr)); handle->lgh_last_idx = handle->lgh_hdr->llh_tail.lrt_index; @@ -331,7 +353,7 @@ static int llog_client_close(const struct lu_env *env, /* this doesn't call LLOG_ORIGIN_HANDLE_CLOSE because the servers all close the file at the end of every other LLOG_ RPC. */ - return(0); + return 0; } struct llog_operations llog_client_ops = { diff --git a/drivers/staging/lustre/lustre/ptlrpc/llog_net.c b/drivers/staging/lustre/lustre/ptlrpc/llog_net.c index e9052bba6692..dac66f5b39da 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/llog_net.c +++ b/drivers/staging/lustre/lustre/ptlrpc/llog_net.c @@ -51,8 +51,6 @@ #include "../include/obd_class.h" #include "../include/lustre_log.h" #include <linux/list.h> -#include "../include/lvfs.h" -#include "../include/lustre_fsfilt.h" int llog_initiator_connect(struct llog_ctxt *ctxt) { diff --git a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c index bc220308e7d7..87b9764a4f19 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c +++ b/drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c @@ -119,7 +119,7 @@ struct ll_rpc_opcode { { OBD_IDX_READ, "dt_index_read" }, { LLOG_ORIGIN_HANDLE_CREATE, "llog_origin_handle_open" }, { LLOG_ORIGIN_HANDLE_NEXT_BLOCK, "llog_origin_handle_next_block" }, - { LLOG_ORIGIN_HANDLE_READ_HEADER,"llog_origin_handle_read_header" }, + { LLOG_ORIGIN_HANDLE_READ_HEADER, "llog_origin_handle_read_header" }, { LLOG_ORIGIN_HANDLE_WRITE_REC, "llog_origin_handle_write_rec" }, { LLOG_ORIGIN_HANDLE_CLOSE, "llog_origin_handle_close" }, { LLOG_ORIGIN_CONNECT, "llog_origin_connect" }, @@ -130,7 +130,7 @@ struct ll_rpc_opcode { { QUOTA_DQREL, "quota_release" }, { SEQ_QUERY, "seq_query" }, { SEC_CTX_INIT, "sec_ctx_init" }, - { SEC_CTX_INIT_CONT,"sec_ctx_init_cont" }, + { SEC_CTX_INIT_CONT, "sec_ctx_init_cont" }, { SEC_CTX_FINI, "sec_ctx_fini" }, { FLD_QUERY, "fld_query" }, { UPDATE_OBJ, "update_obj" }, @@ -194,7 +194,8 @@ void ptlrpc_lprocfs_register(struct proc_dir_entry *root, char *dir, LASSERT(*procroot_ret == NULL); LASSERT(*stats_ret == NULL); - svc_stats = lprocfs_alloc_stats(EXTRA_MAX_OPCODES+LUSTRE_MAX_OPCODES,0); + svc_stats = lprocfs_alloc_stats(EXTRA_MAX_OPCODES+LUSTRE_MAX_OPCODES, + 0); if (svc_stats == NULL) return; @@ -499,8 +500,10 @@ static int ptlrpc_lprocfs_nrs_seq_show(struct seq_file *m, void *n) spin_unlock(&nrs->nrs_lock); OBD_ALLOC(infos, num_pols * sizeof(*infos)); - if (infos == NULL) - GOTO(out, rc = -ENOMEM); + if (infos == NULL) { + rc = -ENOMEM; + goto out; + } again: ptlrpc_service_for_each_part(svcpt, i, svc) { @@ -639,26 +642,34 @@ static ssize_t ptlrpc_lprocfs_nrs_seq_write(struct file *file, char *token; int rc = 0; - if (count >= LPROCFS_NRS_WR_MAX_CMD) - GOTO(out, rc = -EINVAL); + if (count >= LPROCFS_NRS_WR_MAX_CMD) { + rc = -EINVAL; + goto out; + } OBD_ALLOC(cmd, LPROCFS_NRS_WR_MAX_CMD); - if (cmd == NULL) - GOTO(out, rc = -ENOMEM); + if (cmd == NULL) { + rc = -ENOMEM; + goto out; + } /** * strsep() modifies its argument, so keep a copy */ cmd_copy = cmd; - if (copy_from_user(cmd, buffer, count)) - GOTO(out, rc = -EFAULT); + if (copy_from_user(cmd, buffer, count)) { + rc = -EFAULT; + goto out; + } cmd[count] = '\0'; token = strsep(&cmd, " "); - if (strlen(token) > NRS_POL_NAME_MAX - 1) - GOTO(out, rc = -EINVAL); + if (strlen(token) > NRS_POL_NAME_MAX - 1) { + rc = -EINVAL; + goto out; + } /** * No [reg|hp] token has been specified @@ -673,13 +684,17 @@ static ssize_t ptlrpc_lprocfs_nrs_seq_write(struct file *file, queue = PTLRPC_NRS_QUEUE_REG; else if (strcmp(cmd, "hp") == 0) queue = PTLRPC_NRS_QUEUE_HP; - else - GOTO(out, rc = -EINVAL); + else { + rc = -EINVAL; + goto out; + } default_queue: - if (queue == PTLRPC_NRS_QUEUE_HP && !nrs_svc_has_hp(svc)) - GOTO(out, rc = -ENODEV); + if (queue == PTLRPC_NRS_QUEUE_HP && !nrs_svc_has_hp(svc)) { + rc = -ENODEV; + goto out; + } else if (queue == PTLRPC_NRS_QUEUE_BOTH && !nrs_svc_has_hp(svc)) queue = PTLRPC_NRS_QUEUE_REG; @@ -1257,14 +1272,18 @@ int lprocfs_wr_import(struct file *file, const char *buffer, if (kbuf == NULL) return -ENOMEM; - if (copy_from_user(kbuf, buffer, count)) - GOTO(out, count = -EFAULT); + if (copy_from_user(kbuf, buffer, count)) { + count = -EFAULT; + goto out; + } kbuf[count] = 0; /* only support connection=uuid::instance now */ - if (strncmp(prefix, kbuf, prefix_len) != 0) - GOTO(out, count = -EINVAL); + if (strncmp(prefix, kbuf, prefix_len) != 0) { + count = -EINVAL; + goto out; + } uuid = kbuf + prefix_len; ptr = strstr(uuid, "::"); diff --git a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c index 89fc7f77b498..c1e8aa4d5ec4 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/niobuf.c +++ b/drivers/staging/lustre/lustre/ptlrpc/niobuf.c @@ -442,8 +442,7 @@ int ptlrpc_reply(struct ptlrpc_request *req) { if (req->rq_no_reply) return 0; - else - return (ptlrpc_send_reply(req, 0)); + return ptlrpc_send_reply(req, 0); } EXPORT_SYMBOL(ptlrpc_reply); @@ -537,13 +536,13 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) rc = sptlrpc_cli_wrap_request(request); if (rc) - GOTO(out, rc); + goto out; /* bulk register should be done after wrap_request() */ if (request->rq_bulk != NULL) { rc = ptlrpc_register_bulk(request); if (rc != 0) - GOTO(out, rc); + goto out; } if (!noreply) { @@ -560,7 +559,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) request->rq_err = 1; spin_unlock(&request->rq_lock); request->rq_status = rc; - GOTO(cleanup_bulk, rc); + goto cleanup_bulk; } } else { request->rq_repdata = NULL; @@ -573,7 +572,8 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) if (rc != 0) { CERROR("LNetMEAttach failed: %d\n", rc); LASSERT(rc == -ENOMEM); - GOTO(cleanup_bulk, rc = -ENOMEM); + rc = -ENOMEM; + goto cleanup_bulk; } } @@ -616,7 +616,8 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) /* ...but the MD attach didn't succeed... */ request->rq_receiving_reply = 0; spin_unlock(&request->rq_lock); - GOTO(cleanup_me, rc = -ENOMEM); + rc = -ENOMEM; + goto cleanup_me; } CDEBUG(D_NET, "Setup reply buffer: %u bytes, xid %llu, portal %u\n", @@ -650,11 +651,11 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) request->rq_request_portal, request->rq_xid, 0); if (rc == 0) - GOTO(out, rc); + goto out; ptlrpc_req_finished(request); if (noreply) - GOTO(out, rc); + goto out; cleanup_me: /* MEUnlink is safe; the PUT didn't even get off the ground, and @@ -691,7 +692,7 @@ int ptlrpc_register_rqbd(struct ptlrpc_request_buffer_desc *rqbd) service->srv_req_portal); if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_RQBD)) - return (-ENOMEM); + return -ENOMEM; /* NB: CPT affinity service should use new LNet flag LNET_INS_LOCAL, * which means buffer can only be attached on local CPT, and LND @@ -702,7 +703,7 @@ int ptlrpc_register_rqbd(struct ptlrpc_request_buffer_desc *rqbd) LNET_INS_LOCAL : LNET_INS_AFTER, &me_h); if (rc != 0) { CERROR("LNetMEAttach failed: %d\n", rc); - return (-ENOMEM); + return -ENOMEM; } LASSERT(rqbd->rqbd_refcount == 0); @@ -718,7 +719,7 @@ int ptlrpc_register_rqbd(struct ptlrpc_request_buffer_desc *rqbd) rc = LNetMDAttach(me_h, md, LNET_UNLINK, &rqbd->rqbd_md_h); if (rc == 0) - return (0); + return 0; CERROR("LNetMDAttach failed: %d;\n", rc); LASSERT(rc == -ENOMEM); @@ -726,5 +727,5 @@ int ptlrpc_register_rqbd(struct ptlrpc_request_buffer_desc *rqbd) LASSERT(rc == 0); rqbd->rqbd_refcount = 0; - return (-ENOMEM); + return -ENOMEM; } diff --git a/drivers/staging/lustre/lustre/ptlrpc/nrs.c b/drivers/staging/lustre/lustre/ptlrpc/nrs.c index 9ea24f8d9865..181301bd2083 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/nrs.c +++ b/drivers/staging/lustre/lustre/ptlrpc/nrs.c @@ -264,7 +264,7 @@ static int nrs_policy_start_locked(struct ptlrpc_nrs_policy *policy) module_put(policy->pol_desc->pd_owner); policy->pol_state = NRS_POL_STATE_STOPPED; - GOTO(out, rc); + goto out; } } @@ -327,7 +327,7 @@ static void nrs_policy_put(struct ptlrpc_nrs_policy *policy) /** * Find and return a policy by name. */ -static struct ptlrpc_nrs_policy * nrs_policy_find_locked(struct ptlrpc_nrs *nrs, +static struct ptlrpc_nrs_policy *nrs_policy_find_locked(struct ptlrpc_nrs *nrs, char *name) { struct ptlrpc_nrs_policy *tmp; @@ -377,7 +377,7 @@ static void nrs_resource_put(struct ptlrpc_nrs_resource *res) * \see ptlrpc_nrs_pol_ops::op_res_get() */ static -struct ptlrpc_nrs_resource * nrs_resource_get(struct ptlrpc_nrs_policy *policy, +struct ptlrpc_nrs_resource *nrs_resource_get(struct ptlrpc_nrs_policy *policy, struct ptlrpc_nrs_request *nrq, bool moving_req) { @@ -530,7 +530,7 @@ static void nrs_resource_put_safe(struct ptlrpc_nrs_resource **resp) * \retval the NRS request to be handled */ static inline -struct ptlrpc_nrs_request * nrs_request_get(struct ptlrpc_nrs_policy *policy, +struct ptlrpc_nrs_request *nrs_request_get(struct ptlrpc_nrs_policy *policy, bool peek, bool force) { struct ptlrpc_nrs_request *nrq; @@ -635,8 +635,10 @@ static int nrs_policy_ctl(struct ptlrpc_nrs *nrs, char *name, spin_lock(&nrs->nrs_lock); policy = nrs_policy_find_locked(nrs, name); - if (policy == NULL) - GOTO(out, rc = -ENOENT); + if (policy == NULL) { + rc = -ENOENT; + goto out; + } switch (opc) { /** @@ -956,19 +958,21 @@ static int nrs_svcpt_setup_locked(struct ptlrpc_service_part *svcpt) nrs = nrs_svcpt2nrs(svcpt, false); rc = nrs_svcpt_setup_locked0(nrs, svcpt); if (rc < 0) - GOTO(out, rc); + goto out; /** * Optionally allocate a high-priority NRS head. */ if (svcpt->scp_service->srv_ops.so_hpreq_handler == NULL) - GOTO(out, rc); + goto out; OBD_CPT_ALLOC_PTR(svcpt->scp_nrs_hp, svcpt->scp_service->srv_cptable, svcpt->scp_cpt); - if (svcpt->scp_nrs_hp == NULL) - GOTO(out, rc = -ENOMEM); + if (svcpt->scp_nrs_hp == NULL) { + rc = -ENOMEM; + goto out; + } nrs = nrs_svcpt2nrs(svcpt, true); rc = nrs_svcpt_setup_locked0(nrs, svcpt); @@ -1154,12 +1158,15 @@ int ptlrpc_nrs_policy_register(struct ptlrpc_nrs_pol_conf *conf) CERROR("NRS: failing to register policy %s which has already " "been registered with NRS core!\n", conf->nc_name); - GOTO(fail, rc = -EEXIST); + rc = -EEXIST; + goto fail; } OBD_ALLOC_PTR(desc); - if (desc == NULL) - GOTO(fail, rc = -ENOMEM); + if (desc == NULL) { + rc = -ENOMEM; + goto fail; + } strncpy(desc->pd_name, conf->nc_name, NRS_POL_NAME_MAX); desc->pd_ops = conf->nc_ops; @@ -1214,7 +1221,7 @@ again: LASSERT(rc2 == 0); mutex_unlock(&ptlrpc_all_services_mutex); OBD_FREE_PTR(desc); - GOTO(fail, rc); + goto fail; } if (!hp && nrs_svc_has_hp(svc)) { @@ -1237,7 +1244,7 @@ again: LASSERT(rc2 == 0); mutex_unlock(&ptlrpc_all_services_mutex); OBD_FREE_PTR(desc); - GOTO(fail, rc); + goto fail; } } } @@ -1288,7 +1295,8 @@ int ptlrpc_nrs_policy_unregister(struct ptlrpc_nrs_pol_conf *conf) CERROR("Failing to unregister NRS policy %s which has " "not been registered with NRS core!\n", conf->nc_name); - GOTO(not_exist, rc = -ENOENT); + rc = -ENOENT; + goto not_exist; } mutex_lock(&ptlrpc_all_services_mutex); @@ -1299,7 +1307,7 @@ int ptlrpc_nrs_policy_unregister(struct ptlrpc_nrs_pol_conf *conf) CERROR("Please first stop policy %s on all service " "partitions and then retry to unregister the " "policy.\n", conf->nc_name); - GOTO(fail, rc); + goto fail; } CDEBUG(D_INFO, "Unregistering policy %s from NRS core.\n", @@ -1347,7 +1355,7 @@ int ptlrpc_service_nrs_setup(struct ptlrpc_service *svc) ptlrpc_service_for_each_part(svcpt, i, svc) { rc = nrs_svcpt_setup_locked(svcpt); if (rc != 0) - GOTO(failed, rc); + goto failed; } /** @@ -1361,7 +1369,7 @@ int ptlrpc_service_nrs_setup(struct ptlrpc_service *svc) if (desc->pd_ops->op_lprocfs_init != NULL) { rc = desc->pd_ops->op_lprocfs_init(svc); if (rc != 0) - GOTO(failed, rc); + goto failed; } } @@ -1679,7 +1687,7 @@ int ptlrpc_nrs_policy_control(const struct ptlrpc_service *svc, opc, arg); if (rc != 0 || (queue == PTLRPC_NRS_QUEUE_REG && single)) - GOTO(out, rc); + goto out; } if ((queue & PTLRPC_NRS_QUEUE_HP) != 0) { @@ -1694,7 +1702,7 @@ int ptlrpc_nrs_policy_control(const struct ptlrpc_service *svc, rc = nrs_policy_ctl(nrs_svcpt2nrs(svcpt, true), name, opc, arg); if (rc != 0 || single) - GOTO(out, rc); + goto out; } } out: @@ -1721,7 +1729,7 @@ int ptlrpc_nrs_init(void) rc = ptlrpc_nrs_policy_register(&nrs_conf_fifo); if (rc != 0) - GOTO(fail, rc); + goto fail; return rc; diff --git a/drivers/staging/lustre/lustre/ptlrpc/nrs_crr.c b/drivers/staging/lustre/lustre/ptlrpc/nrs_crr.c deleted file mode 100644 index ddfb5102d822..000000000000 --- a/drivers/staging/lustre/lustre/ptlrpc/nrs_crr.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * 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. - - * 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 COPYING file that accompanied this code. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * GPL HEADER END - */ -/* - * Copyright (c) 2011 Intel Corporation - * - * Copyright 2012 Xyratex Technology Limited - */ -/* - * lustre/ptlrpc/nrs_crr.c - * - * Network Request Scheduler (NRS) CRR-N policy - * - * Request ordering in a batched Round-Robin manner over client NIDs - * - * Author: Liang Zhen <liang@whamcloud.com> - * Author: Nikitas Angelinas <nikitas_angelinas@xyratex.com> - */ -/** - * \addtogoup nrs - * @{ - */ diff --git a/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c b/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c index 28363307ee35..eb40c01db612 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c +++ b/drivers/staging/lustre/lustre/ptlrpc/nrs_fifo.c @@ -157,7 +157,7 @@ static int nrs_fifo_res_get(struct ptlrpc_nrs_policy *policy, * \see nrs_request_get() */ static -struct ptlrpc_nrs_request * nrs_fifo_req_get(struct ptlrpc_nrs_policy *policy, +struct ptlrpc_nrs_request *nrs_fifo_req_get(struct ptlrpc_nrs_policy *policy, bool peek, bool force) { struct nrs_fifo_head *head = policy->pol_private; diff --git a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c index ac562932ccdf..50556db15f79 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pack_generic.c @@ -1600,8 +1600,8 @@ EXPORT_SYMBOL(ptlrpc_req_set_repsize); */ int do_set_info_async(struct obd_import *imp, int opcode, int version, - obd_count keylen, void *key, - obd_count vallen, void *val, + u32 keylen, void *key, + u32 vallen, void *val, struct ptlrpc_request_set *set) { struct ptlrpc_request *req; @@ -1797,7 +1797,7 @@ void lustre_swab_ost_body(struct ost_body *b) } EXPORT_SYMBOL(lustre_swab_ost_body); -void lustre_swab_ost_last_id(obd_id *id) +void lustre_swab_ost_last_id(u64 *id) { __swab64s(id); } diff --git a/drivers/staging/lustre/lustre/ptlrpc/pinger.c b/drivers/staging/lustre/lustre/ptlrpc/pinger.c index 5e4e49fab63c..20341b27a06a 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/pinger.c +++ b/drivers/staging/lustre/lustre/ptlrpc/pinger.c @@ -281,7 +281,8 @@ static int ptlrpc_pinger_main(void *arg) ping will get sent 2 timeouts from now! Beware. */ CDEBUG(D_INFO, "next wakeup in "CFS_DURATION_T" (" CFS_TIME_T")\n", time_to_next_wake, - cfs_time_add(this_ping,cfs_time_seconds(PING_INTERVAL))); + cfs_time_add(this_ping, + cfs_time_seconds(PING_INTERVAL))); if (time_to_next_wake > 0) { lwi = LWI_TIMEOUT(max_t(long, time_to_next_wake, cfs_time_seconds(1)), @@ -434,7 +435,7 @@ struct timeout_item* ptlrpc_new_timeout(int time, enum timeout_event event, OBD_ALLOC_PTR(ti); if (!ti) - return(NULL); + return NULL; INIT_LIST_HEAD(&ti->ti_obd_list); INIT_LIST_HEAD(&ti->ti_chain); @@ -489,7 +490,7 @@ int ptlrpc_add_timeout_client(int time, enum timeout_event event, ti = ptlrpc_pinger_register_timeout(time, event, cb, data); if (!ti) { mutex_unlock(&pinger_mutex); - return (-EINVAL); + return -EINVAL; } list_add(obd_list, &ti->ti_obd_list); mutex_unlock(&pinger_mutex); diff --git a/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h b/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h index f7be007c88cb..7fe2e584ffd7 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h +++ b/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_internal.h @@ -57,7 +57,7 @@ struct ptlrpc_bulk_desc *ptlrpc_new_bulk(unsigned npages, unsigned max_brw, unsigned type, unsigned portal); int ptlrpc_request_cache_init(void); void ptlrpc_request_cache_fini(void); -struct ptlrpc_request *ptlrpc_request_cache_alloc(int flags); +struct ptlrpc_request *ptlrpc_request_cache_alloc(gfp_t flags); void ptlrpc_request_cache_free(struct ptlrpc_request *req); void ptlrpc_init_xid(void); diff --git a/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_module.c b/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_module.c index 6d92a56da620..5268887ca6b3 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_module.c +++ b/drivers/staging/lustre/lustre/ptlrpc/ptlrpc_module.c @@ -75,45 +75,45 @@ __init int ptlrpc_init(void) cleanup_phase = 1; rc = ptlrpc_request_cache_init(); if (rc) - GOTO(cleanup, rc); + goto cleanup; cleanup_phase = 2; rc = ptlrpc_init_portals(); if (rc) - GOTO(cleanup, rc); + goto cleanup; cleanup_phase = 3; rc = ptlrpc_connection_init(); if (rc) - GOTO(cleanup, rc); + goto cleanup; cleanup_phase = 4; ptlrpc_put_connection_superhack = ptlrpc_connection_put; rc = ptlrpc_start_pinger(); if (rc) - GOTO(cleanup, rc); + goto cleanup; cleanup_phase = 5; rc = ldlm_init(); if (rc) - GOTO(cleanup, rc); + goto cleanup; cleanup_phase = 6; rc = sptlrpc_init(); if (rc) - GOTO(cleanup, rc); + goto cleanup; cleanup_phase = 7; rc = ptlrpc_nrs_init(); if (rc) - GOTO(cleanup, rc); + goto cleanup; cleanup_phase = 8; rc = tgt_mod_init(); if (rc) - GOTO(cleanup, rc); + goto cleanup; return 0; cleanup: diff --git a/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c b/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c index 9c60e2af43bf..357ea9f8bd57 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c +++ b/drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c @@ -615,8 +615,10 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc) spin_lock_init(&pc->pc_lock); strlcpy(pc->pc_name, name, sizeof(pc->pc_name)); pc->pc_set = ptlrpc_prep_set(); - if (pc->pc_set == NULL) - GOTO(out, rc = -ENOMEM); + if (pc->pc_set == NULL) { + rc = -ENOMEM; + goto out; + } /* * So far only "client" ptlrpcd uses an environment. In the future, @@ -625,19 +627,21 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc) */ rc = lu_context_init(&pc->pc_env.le_ctx, LCT_CL_THREAD|LCT_REMEMBER); if (rc != 0) - GOTO(out_set, rc); + goto out_set; { struct task_struct *task; if (index >= 0) { rc = ptlrpcd_bind(index, max); if (rc < 0) - GOTO(out_env, rc); + goto out_env; } task = kthread_run(ptlrpcd, pc, "%s", pc->pc_name); - if (IS_ERR(task)) - GOTO(out_env, rc = PTR_ERR(task)); + if (IS_ERR(task)) { + rc = PTR_ERR(task); + goto out_env; + } wait_for_completion(&pc->pc_starting); } @@ -741,14 +745,16 @@ static int ptlrpcd_init(void) size = offsetof(struct ptlrpcd, pd_threads[nthreads]); OBD_ALLOC(ptlrpcds, size); - if (ptlrpcds == NULL) - GOTO(out, rc = -ENOMEM); + if (ptlrpcds == NULL) { + rc = -ENOMEM; + goto out; + } snprintf(name, sizeof(name), "ptlrpcd_rcv"); set_bit(LIOD_RECOVERY, &ptlrpcds->pd_thread_rcv.pc_flags); rc = ptlrpcd_start(-1, nthreads, name, &ptlrpcds->pd_thread_rcv); if (rc < 0) - GOTO(out, rc); + goto out; /* XXX: We start nthreads ptlrpc daemons. Each of them can process any * non-recovery async RPC to improve overall async RPC efficiency. @@ -766,7 +772,7 @@ static int ptlrpcd_init(void) snprintf(name, sizeof(name), "ptlrpcd_%d", i); rc = ptlrpcd_start(i, nthreads, name, &ptlrpcds->pd_threads[i]); if (rc < 0) - GOTO(out, rc); + goto out; } ptlrpcds->pd_size = size; diff --git a/drivers/staging/lustre/lustre/ptlrpc/recover.c b/drivers/staging/lustre/lustre/ptlrpc/recover.c index 5e4a1a52e0da..e1bc77b83ffb 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/recover.c +++ b/drivers/staging/lustre/lustre/ptlrpc/recover.c @@ -47,7 +47,6 @@ #include "../include/lustre_import.h" #include "../include/lustre_export.h" #include "../include/obd.h" -#include "../include/obd_ost.h" #include "../include/obd_class.h" #include <linux/list.h> @@ -317,7 +316,7 @@ int ptlrpc_recover_import(struct obd_import *imp, char *new_uuid, int async) rc = -EINVAL; spin_unlock(&imp->imp_lock); if (rc) - GOTO(out, rc); + goto out; /* force import to be disconnected. */ ptlrpc_set_import_discon(imp, 0); @@ -329,7 +328,7 @@ int ptlrpc_recover_import(struct obd_import *imp, char *new_uuid, int async) obd_str2uuid(&uuid, new_uuid); rc = import_set_conn_priority(imp, &uuid); if (rc) - GOTO(out, rc); + goto out; } /* Check if reconnect is already in progress */ @@ -340,11 +339,11 @@ int ptlrpc_recover_import(struct obd_import *imp, char *new_uuid, int async) } spin_unlock(&imp->imp_lock); if (rc) - GOTO(out, rc); + goto out; rc = ptlrpc_connect_import(imp); if (rc) - GOTO(out, rc); + goto out; if (!async) { struct l_wait_info lwi; diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec.c b/drivers/staging/lustre/lustre/ptlrpc/sec.c index 5cff7ee6ee7b..4ce76852e6ee 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec.c @@ -110,7 +110,7 @@ int sptlrpc_unregister_policy(struct ptlrpc_sec_policy *policy) EXPORT_SYMBOL(sptlrpc_unregister_policy); static -struct ptlrpc_sec_policy * sptlrpc_wireflavor2policy(__u32 flavor) +struct ptlrpc_sec_policy *sptlrpc_wireflavor2policy(__u32 flavor) { static DEFINE_MUTEX(load_mutex); static atomic_t loaded = ATOMIC_INIT(0); @@ -1095,15 +1095,18 @@ int sptlrpc_cli_unwrap_early_reply(struct ptlrpc_request *req, early_size = req->rq_nob_received; early_bufsz = size_roundup_power2(early_size); OBD_ALLOC_LARGE(early_buf, early_bufsz); - if (early_buf == NULL) - GOTO(err_req, rc = -ENOMEM); + if (early_buf == NULL) { + rc = -ENOMEM; + goto err_req; + } /* sanity checkings and copy data out, do it inside spinlock */ spin_lock(&req->rq_lock); if (req->rq_replied) { spin_unlock(&req->rq_lock); - GOTO(err_buf, rc = -EALREADY); + rc = -EALREADY; + goto err_buf; } LASSERT(req->rq_repbuf); @@ -1113,7 +1116,8 @@ int sptlrpc_cli_unwrap_early_reply(struct ptlrpc_request *req, if (req->rq_reply_off != 0) { CERROR("early reply with offset %u\n", req->rq_reply_off); spin_unlock(&req->rq_lock); - GOTO(err_buf, rc = -EPROTO); + rc = -EPROTO; + goto err_buf; } if (req->rq_nob_received != early_size) { @@ -1121,14 +1125,16 @@ int sptlrpc_cli_unwrap_early_reply(struct ptlrpc_request *req, CERROR("data size has changed from %u to %u\n", early_size, req->rq_nob_received); spin_unlock(&req->rq_lock); - GOTO(err_buf, rc = -EINVAL); + rc = -EINVAL; + goto err_buf; } if (req->rq_nob_received < sizeof(struct lustre_msg)) { CERROR("early reply length %d too small\n", req->rq_nob_received); spin_unlock(&req->rq_lock); - GOTO(err_buf, rc = -EALREADY); + rc = -EALREADY; + goto err_buf; } memcpy(early_buf, req->rq_repbuf, early_size); @@ -1148,7 +1154,7 @@ int sptlrpc_cli_unwrap_early_reply(struct ptlrpc_request *req, if (rc) { DEBUG_REQ(D_ADAPTTO, early_req, "error %d unwrap early reply", rc); - GOTO(err_ctx, rc); + goto err_ctx; } LASSERT(early_req->rq_repmsg); @@ -1267,7 +1273,7 @@ EXPORT_SYMBOL(sptlrpc_sec_put); * policy module is responsible for taking reference of import */ static -struct ptlrpc_sec * sptlrpc_sec_create(struct obd_import *imp, +struct ptlrpc_sec *sptlrpc_sec_create(struct obd_import *imp, struct ptlrpc_svc_ctx *svc_ctx, struct sptlrpc_flavor *sf, enum lustre_sec_part sp) @@ -1434,7 +1440,7 @@ int sptlrpc_import_sec_adapt(struct obd_import *imp, char str2[24]; if (flavor_equal(&sf, &sec->ps_flvr)) - GOTO(out, rc); + goto out; CDEBUG(D_SEC, "import %s->%s: changing flavor %s -> %s\n", imp->imp_obd->obd_name, @@ -1447,7 +1453,7 @@ int sptlrpc_import_sec_adapt(struct obd_import *imp, SPTLRPC_FLVR_MECH(sf.sf_rpc) == SPTLRPC_FLVR_MECH(sec->ps_flvr.sf_rpc)) { sptlrpc_import_sec_adapt_inplace(imp, sec, &sf); - GOTO(out, rc); + goto out; } } else if (SPTLRPC_FLVR_BASE(sf.sf_rpc) != SPTLRPC_FLVR_BASE(SPTLRPC_FLVR_NULL)) { @@ -2366,7 +2372,7 @@ EXPORT_SYMBOL(sptlrpc_unpack_user_desc); * misc helpers * ****************************************/ -const char * sec2target_str(struct ptlrpc_sec *sec) +const char *sec2target_str(struct ptlrpc_sec *sec) { if (!sec || !sec->ps_import || !sec->ps_import->imp_obd) return "*"; diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c index 874789b200a3..cc68a1cf24e3 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c @@ -365,7 +365,7 @@ static void enc_pools_insert(struct page ***pools, int npools, int npages) */ cur_npools = (page_pools.epp_total_pages + PAGES_PER_POOL - 1) / PAGES_PER_POOL; - end_npools = (page_pools.epp_total_pages + npages + PAGES_PER_POOL -1) / + end_npools = (page_pools.epp_total_pages + npages + PAGES_PER_POOL - 1) / PAGES_PER_POOL; LASSERT(end_npools <= page_pools.epp_max_pools); @@ -794,7 +794,7 @@ static int cfs_hash_alg_id[] = { [BULK_HASH_ALG_SHA384] = CFS_HASH_ALG_SHA384, [BULK_HASH_ALG_SHA512] = CFS_HASH_ALG_SHA512, }; -const char * sptlrpc_get_hash_name(__u8 hash_alg) +const char *sptlrpc_get_hash_name(__u8 hash_alg) { return cfs_crypto_hash_name(cfs_hash_alg_id[hash_alg]); } diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_config.c b/drivers/staging/lustre/lustre/ptlrpc/sec_config.c index 01f8b0d6660e..56ba9e4e5297 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_config.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_config.c @@ -41,13 +41,8 @@ #include <linux/key.h> #include "../include/obd.h" -#include "../include/obd_class.h" #include "../include/obd_support.h" -#include "../include/lustre_net.h" #include "../include/lustre_import.h" -#include "../include/lustre_log.h" -#include "../include/lustre_disk.h" -#include "../include/lustre_dlm.h" #include "../include/lustre_param.h" #include "../include/lustre_sec.h" @@ -450,46 +445,6 @@ void sptlrpc_rule_set_dump(struct sptlrpc_rule_set *rset) } EXPORT_SYMBOL(sptlrpc_rule_set_dump); -static int sptlrpc_rule_set_extract(struct sptlrpc_rule_set *gen, - struct sptlrpc_rule_set *tgt, - enum lustre_sec_part from, - enum lustre_sec_part to, - struct sptlrpc_rule_set *rset) -{ - struct sptlrpc_rule_set *src[2] = { gen, tgt }; - struct sptlrpc_rule *rule; - int i, n, rc; - - might_sleep(); - - /* merge general rules firstly, then target-specific rules */ - for (i = 0; i < 2; i++) { - if (src[i] == NULL) - continue; - - for (n = 0; n < src[i]->srs_nrule; n++) { - rule = &src[i]->srs_rules[n]; - - if (from != LUSTRE_SP_ANY && - rule->sr_from != LUSTRE_SP_ANY && - rule->sr_from != from) - continue; - if (to != LUSTRE_SP_ANY && - rule->sr_to != LUSTRE_SP_ANY && - rule->sr_to != to) - continue; - - rc = sptlrpc_rule_set_merge(rset, rule); - if (rc) { - CERROR("can't merge: %d\n", rc); - return rc; - } - } - } - - return 0; -} - /********************************** * sptlrpc configuration support * **********************************/ @@ -746,7 +701,7 @@ void sptlrpc_conf_log_update_begin(const char *logname) conf = sptlrpc_conf_get(fsname, 0); if (conf) { - if(conf->sc_local) { + if (conf->sc_local) { LASSERT(conf->sc_updated == 0); sptlrpc_conf_free_rsets(conf); } @@ -815,7 +770,7 @@ void sptlrpc_conf_log_stop(const char *logname) } EXPORT_SYMBOL(sptlrpc_conf_log_stop); -static void inline flavor_set_flags(struct sptlrpc_flavor *sf, +static inline void flavor_set_flags(struct sptlrpc_flavor *sf, enum lustre_sec_part from, enum lustre_sec_part to, unsigned int fl_udesc) @@ -908,7 +863,7 @@ void sptlrpc_conf_client_adapt(struct obd_device *obd) struct obd_import *imp; LASSERT(strcmp(obd->obd_type->typ_name, LUSTRE_MDC_NAME) == 0 || - strcmp(obd->obd_type->typ_name, LUSTRE_OSC_NAME) ==0); + strcmp(obd->obd_type->typ_name, LUSTRE_OSC_NAME) == 0); CDEBUG(D_SEC, "obd %s\n", obd->u.cli.cl_target_uuid.uuid); /* serialize with connect/disconnect import */ @@ -927,288 +882,6 @@ void sptlrpc_conf_client_adapt(struct obd_device *obd) } EXPORT_SYMBOL(sptlrpc_conf_client_adapt); - -static void rule2string(struct sptlrpc_rule *r, char *buf, int buflen) -{ - char dirbuf[8]; - char *net; - char *ptr = buf; - - if (r->sr_netid == LNET_NIDNET(LNET_NID_ANY)) - net = "default"; - else - net = libcfs_net2str(r->sr_netid); - - if (r->sr_from == LUSTRE_SP_ANY && r->sr_to == LUSTRE_SP_ANY) - dirbuf[0] = '\0'; - else - snprintf(dirbuf, sizeof(dirbuf), ".%s2%s", - sptlrpc_part2name(r->sr_from), - sptlrpc_part2name(r->sr_to)); - - ptr += snprintf(buf, buflen, "srpc.flavor.%s%s=", net, dirbuf); - - sptlrpc_flavor2name(&r->sr_flvr, ptr, buflen - (ptr - buf)); - buf[buflen - 1] = '\0'; -} - -static int sptlrpc_record_rule_set(struct llog_handle *llh, - char *target, - struct sptlrpc_rule_set *rset) -{ - struct lustre_cfg_bufs bufs; - struct lustre_cfg *lcfg; - struct llog_rec_hdr rec; - int buflen; - char param[48]; - int i, rc; - - for (i = 0; i < rset->srs_nrule; i++) { - rule2string(&rset->srs_rules[i], param, sizeof(param)); - - lustre_cfg_bufs_reset(&bufs, NULL); - lustre_cfg_bufs_set_string(&bufs, 1, target); - lustre_cfg_bufs_set_string(&bufs, 2, param); - lcfg = lustre_cfg_new(LCFG_SPTLRPC_CONF, &bufs); - LASSERT(lcfg); - - buflen = lustre_cfg_len(lcfg->lcfg_bufcount, - lcfg->lcfg_buflens); - rec.lrh_len = llog_data_len(buflen); - rec.lrh_type = OBD_CFG_REC; - rc = llog_write(NULL, llh, &rec, NULL, 0, (void *)lcfg, -1); - if (rc) - CERROR("failed to write a rec: rc = %d\n", rc); - lustre_cfg_free(lcfg); - } - return 0; -} - -static int sptlrpc_record_rules(struct llog_handle *llh, - struct sptlrpc_conf *conf) -{ - struct sptlrpc_conf_tgt *conf_tgt; - - sptlrpc_record_rule_set(llh, conf->sc_fsname, &conf->sc_rset); - - list_for_each_entry(conf_tgt, &conf->sc_tgts, sct_list) { - sptlrpc_record_rule_set(llh, conf_tgt->sct_name, - &conf_tgt->sct_rset); - } - return 0; -} - -#define LOG_SPTLRPC_TMP "sptlrpc.tmp" -#define LOG_SPTLRPC "sptlrpc" - -static -int sptlrpc_target_local_copy_conf(struct obd_device *obd, - struct sptlrpc_conf *conf) -{ - struct llog_handle *llh = NULL; - struct llog_ctxt *ctxt; - struct lvfs_run_ctxt saved; - struct dentry *dentry; - int rc; - - ctxt = llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT); - if (ctxt == NULL) - return -EINVAL; - - push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - - dentry = ll_lookup_one_len(MOUNT_CONFIGS_DIR, cfs_fs_pwd(current->fs), - strlen(MOUNT_CONFIGS_DIR)); - if (IS_ERR(dentry)) { - rc = PTR_ERR(dentry); - CERROR("cannot lookup %s directory: rc = %d\n", - MOUNT_CONFIGS_DIR, rc); - GOTO(out_ctx, rc); - } - - /* erase the old tmp log */ - rc = llog_erase(NULL, ctxt, NULL, LOG_SPTLRPC_TMP); - if (rc < 0 && rc != -ENOENT) { - CERROR("%s: cannot erase temporary sptlrpc log: rc = %d\n", - obd->obd_name, rc); - GOTO(out_dput, rc); - } - - /* write temporary log */ - rc = llog_open_create(NULL, ctxt, &llh, NULL, LOG_SPTLRPC_TMP); - if (rc) - GOTO(out_dput, rc); - rc = llog_init_handle(NULL, llh, LLOG_F_IS_PLAIN, NULL); - if (rc) - GOTO(out_close, rc); - - rc = sptlrpc_record_rules(llh, conf); - -out_close: - llog_close(NULL, llh); - if (rc == 0) - rc = lustre_rename(dentry, obd->obd_lvfs_ctxt.pwdmnt, - LOG_SPTLRPC_TMP, LOG_SPTLRPC); -out_dput: - l_dput(dentry); -out_ctx: - pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - llog_ctxt_put(ctxt); - CDEBUG(D_SEC, "target %s: write local sptlrpc conf: rc = %d\n", - obd->obd_name, rc); - return rc; -} - -static int local_read_handler(const struct lu_env *env, - struct llog_handle *llh, - struct llog_rec_hdr *rec, void *data) -{ - struct sptlrpc_conf *conf = (struct sptlrpc_conf *) data; - struct lustre_cfg *lcfg = (struct lustre_cfg *)(rec + 1); - int cfg_len, rc; - - if (rec->lrh_type != OBD_CFG_REC) { - CERROR("unhandled lrh_type: %#x\n", rec->lrh_type); - return -EINVAL; - } - - cfg_len = rec->lrh_len - sizeof(struct llog_rec_hdr) - - sizeof(struct llog_rec_tail); - - rc = lustre_cfg_sanity_check(lcfg, cfg_len); - if (rc) { - CERROR("Insane cfg\n"); - return rc; - } - - if (lcfg->lcfg_command != LCFG_SPTLRPC_CONF) { - CERROR("invalid command (%x)\n", lcfg->lcfg_command); - return -EINVAL; - } - - return __sptlrpc_process_config(lcfg, conf); -} - -static -int sptlrpc_target_local_read_conf(struct obd_device *obd, - struct sptlrpc_conf *conf) -{ - struct llog_handle *llh = NULL; - struct llog_ctxt *ctxt; - struct lvfs_run_ctxt saved; - int rc; - - LASSERT(conf->sc_updated == 0 && conf->sc_local == 0); - - ctxt = llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT); - if (ctxt == NULL) { - CERROR("missing llog context\n"); - return -EINVAL; - } - - push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - - rc = llog_open(NULL, ctxt, &llh, NULL, LOG_SPTLRPC, LLOG_OPEN_EXISTS); - if (rc < 0) { - if (rc == -ENOENT) - rc = 0; - GOTO(out_pop, rc); - } - - rc = llog_init_handle(NULL, llh, LLOG_F_IS_PLAIN, NULL); - if (rc) - GOTO(out_close, rc); - - if (llog_get_size(llh) <= 1) { - CDEBUG(D_SEC, "no local sptlrpc copy found\n"); - GOTO(out_close, rc = 0); - } - - rc = llog_process(NULL, llh, local_read_handler, (void *)conf, NULL); - - if (rc == 0) { - conf->sc_local = 1; - } else { - sptlrpc_conf_free_rsets(conf); - } - -out_close: - llog_close(NULL, llh); -out_pop: - pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - llog_ctxt_put(ctxt); - CDEBUG(D_SEC, "target %s: read local sptlrpc conf: rc = %d\n", - obd->obd_name, rc); - return rc; -} - - -/** - * called by target devices, extract sptlrpc rules which applies to - * this target, to be used for future rpc flavor checking. - */ -int sptlrpc_conf_target_get_rules(struct obd_device *obd, - struct sptlrpc_rule_set *rset, - int initial) -{ - struct sptlrpc_conf *conf; - struct sptlrpc_conf_tgt *conf_tgt; - enum lustre_sec_part sp_dst; - char fsname[MTI_NAME_MAXLEN]; - int rc = 0; - - if (strcmp(obd->obd_type->typ_name, LUSTRE_MDT_NAME) == 0) { - sp_dst = LUSTRE_SP_MDT; - } else if (strcmp(obd->obd_type->typ_name, LUSTRE_OST_NAME) == 0) { - sp_dst = LUSTRE_SP_OST; - } else { - CERROR("unexpected obd type %s\n", obd->obd_type->typ_name); - return -EINVAL; - } - CDEBUG(D_SEC, "get rules for target %s\n", obd->obd_uuid.uuid); - - target2fsname(obd->obd_uuid.uuid, fsname, sizeof(fsname)); - - mutex_lock(&sptlrpc_conf_lock); - - conf = sptlrpc_conf_get(fsname, 0); - if (conf == NULL) { - CERROR("missing sptlrpc config log\n"); - GOTO(out, rc); - } - - if (conf->sc_updated == 0) { - /* - * always read from local copy. here another option is - * if we already have a local copy (read from another - * target device hosted on the same node) we simply use that. - */ - if (conf->sc_local) - sptlrpc_conf_free_rsets(conf); - - sptlrpc_target_local_read_conf(obd, conf); - } else { - LASSERT(conf->sc_local == 0); - - /* write a local copy */ - if (initial || conf->sc_modified) - sptlrpc_target_local_copy_conf(obd, conf); - else - CDEBUG(D_SEC, "unchanged, skip updating local copy\n"); - } - - /* extract rule set for this target */ - conf_tgt = sptlrpc_conf_get_tgt(conf, obd->obd_name, 0); - - rc = sptlrpc_rule_set_extract(&conf->sc_rset, - conf_tgt ? &conf_tgt->sct_rset: NULL, - LUSTRE_SP_ANY, sp_dst, rset); -out: - mutex_unlock(&sptlrpc_conf_lock); - return rc; -} -EXPORT_SYMBOL(sptlrpc_conf_target_get_rules); - int sptlrpc_conf_init(void) { mutex_init(&sptlrpc_conf_lock); diff --git a/drivers/staging/lustre/lustre/ptlrpc/sec_null.c b/drivers/staging/lustre/lustre/ptlrpc/sec_null.c index a47791411149..099cec3b669f 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/sec_null.c +++ b/drivers/staging/lustre/lustre/ptlrpc/sec_null.c @@ -471,5 +471,6 @@ void sptlrpc_null_fini(void) rc = sptlrpc_unregister_policy(&null_policy); if (rc) - CERROR("failed to unregister %s: %d\n", null_policy.sp_name,rc); + CERROR("failed to unregister %s: %d\n", + null_policy.sp_name, rc); } diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c b/drivers/staging/lustre/lustre/ptlrpc/service.c index c88eae27bbf4..a8df8a792333 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/service.c +++ b/drivers/staging/lustre/lustre/ptlrpc/service.c @@ -781,13 +781,15 @@ ptlrpc_register_service(struct ptlrpc_service_conf *conf, cpt = cpts != NULL ? cpts[i] : i; OBD_CPT_ALLOC(svcpt, cptable, cpt, sizeof(*svcpt)); - if (svcpt == NULL) - GOTO(failed, rc = -ENOMEM); + if (svcpt == NULL) { + rc = -ENOMEM; + goto failed; + } service->srv_parts[i] = svcpt; rc = ptlrpc_service_part_init(service, svcpt, cpt); if (rc != 0) - GOTO(failed, rc); + goto failed; } ptlrpc_server_nthreads_check(service, conf); @@ -804,7 +806,7 @@ ptlrpc_register_service(struct ptlrpc_service_conf *conf, rc = ptlrpc_service_nrs_setup(service); if (rc != 0) - GOTO(failed, rc); + goto failed; CDEBUG(D_NET, "%s: Started, listening on portal %d\n", service->srv_name, service->srv_req_portal); @@ -813,7 +815,7 @@ ptlrpc_register_service(struct ptlrpc_service_conf *conf, if (rc != 0) { CERROR("Failed to start threads for service %s: %d\n", service->srv_name, rc); - GOTO(failed, rc); + goto failed; } return service; @@ -1172,13 +1174,13 @@ static int ptlrpc_at_add_timed(struct ptlrpc_request *req) __u32 index; if (AT_OFF) - return(0); + return 0; if (req->rq_no_reply) return 0; if ((lustre_msghdr_get_flags(req->rq_reqmsg) & MSGHDR_AT_SUPPORT) == 0) - return(-ENOSYS); + return -ENOSYS; spin_lock(&svcpt->scp_at_lock); LASSERT(list_empty(&req->rq_timed_list)); @@ -1308,8 +1310,10 @@ static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req) if (reqcopy == NULL) return -ENOMEM; OBD_ALLOC_LARGE(reqmsg, req->rq_reqlen); - if (!reqmsg) - GOTO(out_free, rc = -ENOMEM); + if (!reqmsg) { + rc = -ENOMEM; + goto out_free; + } *reqcopy = *req; reqcopy->rq_reply_state = NULL; @@ -1327,24 +1331,29 @@ static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req) if (atomic_read(&req->rq_refcount) == 1) { DEBUG_REQ(D_ADAPTTO, reqcopy, "Normal reply already sent out, " "abort sending early reply\n"); - GOTO(out, rc = -EINVAL); + rc = -EINVAL; + goto out; } /* Connection ref */ reqcopy->rq_export = class_conn2export( lustre_msg_get_handle(reqcopy->rq_reqmsg)); - if (reqcopy->rq_export == NULL) - GOTO(out, rc = -ENODEV); + if (reqcopy->rq_export == NULL) { + rc = -ENODEV; + goto out; + } /* RPC ref */ class_export_rpc_inc(reqcopy->rq_export); if (reqcopy->rq_export->exp_obd && - reqcopy->rq_export->exp_obd->obd_fail) - GOTO(out_put, rc = -ENODEV); + reqcopy->rq_export->exp_obd->obd_fail) { + rc = -ENODEV; + goto out_put; + } rc = lustre_pack_reply_flags(reqcopy, 1, NULL, NULL, LPRFL_EARLY_REPLY); if (rc) - GOTO(out_put, rc); + goto out_put; rc = ptlrpc_send_reply(reqcopy, PTLRPC_REPLY_EARLY); @@ -1849,7 +1858,7 @@ ptlrpc_server_handle_req_in(struct ptlrpc_service_part *svcpt, /* Move it over to the request processing queue */ rc = ptlrpc_server_request_add(svcpt, req); if (rc) - GOTO(err_req, rc); + goto err_req; wake_up(&svcpt->scp_waitq); return 1; @@ -1896,7 +1905,8 @@ ptlrpc_server_handle_request(struct ptlrpc_service_part *svcpt, libcfs_debug_dumplog(); do_gettimeofday(&work_start); - timediff = cfs_timeval_sub(&work_start, &request->rq_arrival_time,NULL); + timediff = cfs_timeval_sub(&work_start, &request->rq_arrival_time, + NULL); if (likely(svc->srv_stats != NULL)) { lprocfs_counter_add(svc->srv_stats, PTLRPC_REQWAIT_CNTR, timediff); @@ -2262,9 +2272,7 @@ static int ptlrpc_main(void *arg) struct ptlrpc_service_part *svcpt = thread->t_svcpt; struct ptlrpc_service *svc = svcpt->scp_service; struct ptlrpc_reply_state *rs; -#ifdef WITH_GROUP_INFO struct group_info *ginfo = NULL; -#endif struct lu_env *env; int counter = 0, rc = 0; @@ -2280,7 +2288,6 @@ static int ptlrpc_main(void *arg) svc->srv_name, thread->t_name, svcpt->scp_cpt); } -#ifdef WITH_GROUP_INFO ginfo = groups_alloc(0); if (!ginfo) { rc = -ENOMEM; @@ -2289,7 +2296,6 @@ static int ptlrpc_main(void *arg) set_current_groups(ginfo); put_group_info(ginfo); -#endif if (svc->srv_ops.so_thr_init != NULL) { rc = svc->srv_ops.so_thr_init(thread); @@ -2790,8 +2796,10 @@ int ptlrpc_hr_init(void) LASSERT(hrp->hrp_nthrs > 0); OBD_CPT_ALLOC(hrp->hrp_thrs, ptlrpc_hr.hr_cpt_table, i, hrp->hrp_nthrs * sizeof(*hrt)); - if (hrp->hrp_thrs == NULL) - GOTO(out, rc = -ENOMEM); + if (hrp->hrp_thrs == NULL) { + rc = -ENOMEM; + goto out; + } for (j = 0; j < hrp->hrp_nthrs; j++) { hrt = &hrp->hrp_thrs[j]; diff --git a/drivers/staging/lustre/lustre/ptlrpc/wiretest.c b/drivers/staging/lustre/lustre/ptlrpc/wiretest.c index 0624420135c2..d6d92046c348 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/wiretest.c +++ b/drivers/staging/lustre/lustre/ptlrpc/wiretest.c @@ -460,54 +460,6 @@ void lustre_assert_wire_constants(void) LASSERTF(OBJ_INDEX_DELETE == 11, "found %lld\n", (long long)OBJ_INDEX_DELETE); - /* Checks for struct som_attrs */ - LASSERTF((int)sizeof(struct som_attrs) == 40, "found %lld\n", - (long long)(int)sizeof(struct som_attrs)); - LASSERTF((int)offsetof(struct som_attrs, som_compat) == 0, "found %lld\n", - (long long)(int)offsetof(struct som_attrs, som_compat)); - LASSERTF((int)sizeof(((struct som_attrs *)0)->som_compat) == 4, "found %lld\n", - (long long)(int)sizeof(((struct som_attrs *)0)->som_compat)); - LASSERTF((int)offsetof(struct som_attrs, som_incompat) == 4, "found %lld\n", - (long long)(int)offsetof(struct som_attrs, som_incompat)); - LASSERTF((int)sizeof(((struct som_attrs *)0)->som_incompat) == 4, "found %lld\n", - (long long)(int)sizeof(((struct som_attrs *)0)->som_incompat)); - LASSERTF((int)offsetof(struct som_attrs, som_ioepoch) == 8, "found %lld\n", - (long long)(int)offsetof(struct som_attrs, som_ioepoch)); - LASSERTF((int)sizeof(((struct som_attrs *)0)->som_ioepoch) == 8, "found %lld\n", - (long long)(int)sizeof(((struct som_attrs *)0)->som_ioepoch)); - LASSERTF((int)offsetof(struct som_attrs, som_size) == 16, "found %lld\n", - (long long)(int)offsetof(struct som_attrs, som_size)); - LASSERTF((int)sizeof(((struct som_attrs *)0)->som_size) == 8, "found %lld\n", - (long long)(int)sizeof(((struct som_attrs *)0)->som_size)); - LASSERTF((int)offsetof(struct som_attrs, som_blocks) == 24, "found %lld\n", - (long long)(int)offsetof(struct som_attrs, som_blocks)); - LASSERTF((int)sizeof(((struct som_attrs *)0)->som_blocks) == 8, "found %lld\n", - (long long)(int)sizeof(((struct som_attrs *)0)->som_blocks)); - LASSERTF((int)offsetof(struct som_attrs, som_mountid) == 32, "found %lld\n", - (long long)(int)offsetof(struct som_attrs, som_mountid)); - LASSERTF((int)sizeof(((struct som_attrs *)0)->som_mountid) == 8, "found %lld\n", - (long long)(int)sizeof(((struct som_attrs *)0)->som_mountid)); - - /* Checks for struct hsm_attrs */ - LASSERTF((int)sizeof(struct hsm_attrs) == 24, "found %lld\n", - (long long)(int)sizeof(struct hsm_attrs)); - LASSERTF((int)offsetof(struct hsm_attrs, hsm_compat) == 0, "found %lld\n", - (long long)(int)offsetof(struct hsm_attrs, hsm_compat)); - LASSERTF((int)sizeof(((struct hsm_attrs *)0)->hsm_compat) == 4, "found %lld\n", - (long long)(int)sizeof(((struct hsm_attrs *)0)->hsm_compat)); - LASSERTF((int)offsetof(struct hsm_attrs, hsm_flags) == 4, "found %lld\n", - (long long)(int)offsetof(struct hsm_attrs, hsm_flags)); - LASSERTF((int)sizeof(((struct hsm_attrs *)0)->hsm_flags) == 4, "found %lld\n", - (long long)(int)sizeof(((struct hsm_attrs *)0)->hsm_flags)); - LASSERTF((int)offsetof(struct hsm_attrs, hsm_arch_id) == 8, "found %lld\n", - (long long)(int)offsetof(struct hsm_attrs, hsm_arch_id)); - LASSERTF((int)sizeof(((struct hsm_attrs *)0)->hsm_arch_id) == 8, "found %lld\n", - (long long)(int)sizeof(((struct hsm_attrs *)0)->hsm_arch_id)); - LASSERTF((int)offsetof(struct hsm_attrs, hsm_arch_ver) == 16, "found %lld\n", - (long long)(int)offsetof(struct hsm_attrs, hsm_arch_ver)); - LASSERTF((int)sizeof(((struct hsm_attrs *)0)->hsm_arch_ver) == 8, "found %lld\n", - (long long)(int)sizeof(((struct hsm_attrs *)0)->hsm_arch_ver)); - /* Checks for struct ost_id */ LASSERTF((int)sizeof(struct ost_id) == 16, "found %lld\n", (long long)(int)sizeof(struct ost_id)); |