* GPL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
/*
#ifndef _LUSTRE_LIB_H
#define _LUSTRE_LIB_H
+/** \defgroup lib lib
+ *
+ * @{
+ */
+
#include <libcfs/libcfs.h>
#include <lustre/lustre_idl.h>
#include <lustre_ver.h>
#error Unsupported operating system.
#endif
-/* prng.c */
-unsigned int ll_rand(void); /* returns a random 32-bit integer */
-void ll_srand(unsigned int, unsigned int); /* seed the generator */
-void ll_get_random_bytes(void *buf, int size);
-
/* target.c */
struct ptlrpc_request;
struct obd_export;
int target_pack_pool_reply(struct ptlrpc_request *req);
int target_handle_ping(struct ptlrpc_request *req);
void target_committed_to_req(struct ptlrpc_request *req);
-int target_set_info_rpc(struct obd_import *imp, int opcode,
- obd_count keylen, void *key,
- obd_count vallen, void *val,
- struct ptlrpc_request_set *set);
+int do_set_info_async(struct obd_import *imp,
+ int opcode, int version,
+ obd_count keylen, void *key,
+ obd_count vallen, void *val,
+ struct ptlrpc_request_set *set);
/* quotacheck callback, dqacq/dqrel callback handler */
int target_handle_qc_callback(struct ptlrpc_request *req);
#define OBD_CLIENT_HANDLE_MAGIC 0xd15ea5ed
/* statfs_pack.c */
-void statfs_pack(struct obd_statfs *osfs, struct kstatfs *sfs);
-void statfs_unpack(struct kstatfs *sfs, struct obd_statfs *osfs);
+void statfs_pack(struct obd_statfs *osfs, cfs_kstatfs_t *sfs);
+void statfs_unpack(cfs_kstatfs_t *sfs, struct obd_statfs *osfs);
/* l_lock.c */
struct lustre_lock {
int l_depth;
cfs_task_t *l_owner;
- struct semaphore l_sem;
- spinlock_t l_spin;
+ cfs_semaphore_t l_sem;
+ cfs_spinlock_t l_spin;
};
void l_lock_init(struct lustre_lock *);
static inline int obd_ioctl_packlen(struct obd_ioctl_data *data)
{
- int len = size_round(sizeof(struct obd_ioctl_data));
- len += size_round(data->ioc_inllen1);
- len += size_round(data->ioc_inllen2);
- len += size_round(data->ioc_inllen3);
- len += size_round(data->ioc_inllen4);
+ int len = cfs_size_round(sizeof(struct obd_ioctl_data));
+ len += cfs_size_round(data->ioc_inllen1);
+ len += cfs_size_round(data->ioc_inllen2);
+ len += cfs_size_round(data->ioc_inllen3);
+ len += cfs_size_round(data->ioc_inllen4);
return len;
}
int offset = 0;
ENTRY;
- err = copy_from_user(&hdr, (void *)arg, sizeof(hdr));
+ err = cfs_copy_from_user(&hdr, (void *)arg, sizeof(hdr));
if (err)
RETURN(err);
*len = hdr.ioc_len;
data = (struct obd_ioctl_data *)*buf;
- err = copy_from_user(*buf, (void *)arg, hdr.ioc_len);
+ err = cfs_copy_from_user(*buf, (void *)arg, hdr.ioc_len);
if (err) {
OBD_VFREE(*buf, hdr.ioc_len);
RETURN(err);
if (data->ioc_inllen1) {
data->ioc_inlbuf1 = &data->ioc_bulk[0];
- offset += size_round(data->ioc_inllen1);
+ offset += cfs_size_round(data->ioc_inllen1);
}
if (data->ioc_inllen2) {
data->ioc_inlbuf2 = &data->ioc_bulk[0] + offset;
- offset += size_round(data->ioc_inllen2);
+ offset += cfs_size_round(data->ioc_inllen2);
}
if (data->ioc_inllen3) {
data->ioc_inlbuf3 = &data->ioc_bulk[0] + offset;
- offset += size_round(data->ioc_inllen3);
+ offset += cfs_size_round(data->ioc_inllen3);
}
if (data->ioc_inllen4) {
static inline int obd_ioctl_popdata(void *arg, void *data, int len)
{
- int err = copy_to_user(arg, data, len);
+ int err = cfs_copy_to_user(arg, data, len);
if (err)
err = -EFAULT;
return err;
#define OBD_IOC_CLOSE_UUID _IOWR ('f', 147, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_CHANGELOG_SEND _IOW ('f', 148, OBD_IOC_DATA_TYPE)
#define OBD_IOC_GETDEVICE _IOWR ('f', 149, OBD_IOC_DATA_TYPE)
#define OBD_IOC_FID2PATH _IOWR ('f', 150, OBD_IOC_DATA_TYPE)
#define OBD_IOC_CHANGELOG_REG _IOW ('f', 151, OBD_IOC_DATA_TYPE)
* XXX nikita: some ptlrpc daemon threads have races of that sort.
*
*/
+static inline int back_to_sleep(void *arg)
+{
+ return 0;
+}
#define LWI_ON_SIGNAL_NOOP ((void (*)(void *))(-1))
__blocked = l_w_e_set_sigs(0); \
\
for (;;) { \
- set_current_state(TASK_INTERRUPTIBLE); \
+ unsigned __wstate; \
+ \
+ __wstate = info->lwi_on_signal != NULL && \
+ (__timeout == 0 || __allow_intr) ? \
+ CFS_TASK_INTERRUPTIBLE : CFS_TASK_UNINT; \
+ \
+ cfs_set_current_state(__wstate); \
\
if (condition) \
break; \
\
if (__timeout == 0) { \
- cfs_waitq_wait(&__wait, CFS_TASK_INTERRUPTIBLE); \
+ cfs_waitq_wait(&__wait, __wstate); \
} else { \
cfs_duration_t interval = info->lwi_interval? \
min_t(cfs_duration_t, \
info->lwi_interval,__timeout):\
__timeout; \
cfs_duration_t remaining = cfs_waitq_timedwait(&__wait,\
- CFS_TASK_INTERRUPTIBLE, \
+ __wstate, \
interval); \
__timeout = cfs_time_sub(__timeout, \
cfs_time_sub(interval, remaining));\
\
cfs_block_sigs(__blocked); \
\
- set_current_state(TASK_RUNNING); \
+ cfs_set_current_state(CFS_TASK_RUNNING); \
cfs_waitq_del(&wq, &__wait); \
} while (0)
__ret; \
})
-#define cfs_wait_event(wq, condition) \
+#define l_cfs_wait_event(wq, condition) \
({ \
struct l_wait_info lwi = { 0 }; \
l_wait_event(wq, condition, &lwi); \
#define LIBLUSTRE_CLIENT (1)
#endif
+/** @} lib */
+
#endif /* _LUSTRE_LIB_H */