X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flustre_lib.h;h=6283648ff1d37eda67d8c2bbe6f62c1035c26e12;hb=303f41aa0ff07a43a31e397a3d163a6b8b6e4864;hp=e9cb2dd5ef7efcc5940f48ee8a1e13e58ed11214;hpb=3c55f5cf85fbb790dfea40f3da76d7b0d17f29ba;p=fs%2Flustre-release.git diff --git a/lustre/include/lustre_lib.h b/lustre/include/lustre_lib.h index e9cb2dd..6283648 100644 --- a/lustre/include/lustre_lib.h +++ b/lustre/include/lustre_lib.h @@ -30,6 +30,9 @@ * Use is subject to license terms. */ /* + * Copyright (c) 2011 Whamcloud, Inc. + */ +/* * This file is part of Lustre, http://www.lustre.org/ * Lustre is a trademark of Sun Microsystems, Inc. * @@ -92,12 +95,16 @@ int target_handle_dqacq_callback(struct ptlrpc_request *req); #define OBD_RECOVERY_MAX_TIME (obd_timeout * 18) /* b13079 */ +struct l_wait_info; + void target_cancel_recovery_timer(struct obd_device *obd); void target_stop_recovery_thread(struct obd_device *obd); void target_cleanup_recovery(struct obd_device *obd); int target_queue_recovery_request(struct ptlrpc_request *req, struct obd_device *obd); void target_send_reply(struct ptlrpc_request *req, int rc, int fail_id); +int target_bulk_io(struct obd_export *exp, struct ptlrpc_bulk_desc *desc, + struct l_wait_info *lwi); /* client.c */ @@ -364,9 +371,7 @@ static inline int obd_ioctl_getdata(char **buf, int *len, void *arg) RETURN(-EINVAL); } - /* XXX allocate this more intelligently, using kmalloc when - * appropriate */ - OBD_VMALLOC(*buf, hdr.ioc_len); + OBD_ALLOC_LARGE(*buf, hdr.ioc_len); if (*buf == NULL) { CERROR("Cannot allocate control buffer of len %d\n", hdr.ioc_len); @@ -377,13 +382,13 @@ static inline int obd_ioctl_getdata(char **buf, int *len, void *arg) err = cfs_copy_from_user(*buf, (void *)arg, hdr.ioc_len); if (err) { - OBD_VFREE(*buf, hdr.ioc_len); + OBD_FREE_LARGE(*buf, hdr.ioc_len); RETURN(err); } if (obd_ioctl_is_invalid(data)) { CERROR("ioctl not correctly formatted\n"); - OBD_VFREE(*buf, hdr.ioc_len); + OBD_FREE_LARGE(*buf, hdr.ioc_len); RETURN(-EINVAL); } @@ -422,7 +427,7 @@ static inline void obd_ioctl_freedata(char *buf, int len) { ENTRY; - OBD_VFREE(buf, len); + OBD_FREE_LARGE(buf, len); EXIT; return; } @@ -489,20 +494,24 @@ static inline void obd_ioctl_freedata(char *buf, int len) #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) -#define OBD_IOC_CHANGELOG_DEREG _IOW ('f', 152, OBD_IOC_DATA_TYPE) -#define OBD_IOC_CHANGELOG_CLEAR _IOW ('f', 153, OBD_IOC_DATA_TYPE) - +/* see also for ioctls 151-153 */ +/* OBD_IOC_LOV_SETSTRIPE: See also LL_IOC_LOV_SETSTRIPE */ #define OBD_IOC_LOV_SETSTRIPE _IOW ('f', 154, OBD_IOC_DATA_TYPE) +/* OBD_IOC_LOV_GETSTRIPE: See also LL_IOC_LOV_GETSTRIPE */ #define OBD_IOC_LOV_GETSTRIPE _IOW ('f', 155, OBD_IOC_DATA_TYPE) +/* OBD_IOC_LOV_SETEA: See also LL_IOC_LOV_SETEA */ #define OBD_IOC_LOV_SETEA _IOW ('f', 156, OBD_IOC_DATA_TYPE) - +/* see for ioctls 157-159 */ +/* OBD_IOC_QUOTACHECK: See also LL_IOC_QUOTACHECK */ #define OBD_IOC_QUOTACHECK _IOW ('f', 160, int) +/* OBD_IOC_POLL_QUOTACHECK: See also LL_IOC_POLL_QUOTACHECK */ #define OBD_IOC_POLL_QUOTACHECK _IOR ('f', 161, struct if_quotacheck *) -#define OBD_IOC_QUOTACTL _IOWR('f', 162, struct if_quotactl *) - -#define OBD_IOC_MOUNTOPT _IOWR('f', 170, OBD_IOC_DATA_TYPE) - +/* OBD_IOC_QUOTACTL: See also LL_IOC_QUOTACTL */ +#define OBD_IOC_QUOTACTL _IOWR('f', 162, struct if_quotactl) +/* see also for ioctls 163-176 */ +#define OBD_IOC_CHANGELOG_REG _IOW ('f', 177, struct obd_ioctl_data) +#define OBD_IOC_CHANGELOG_DEREG _IOW ('f', 178, struct obd_ioctl_data) +#define OBD_IOC_CHANGELOG_CLEAR _IOW ('f', 179, struct obd_ioctl_data) #define OBD_IOC_RECORD _IOWR('f', 180, OBD_IOC_DATA_TYPE) #define OBD_IOC_ENDRECORD _IOWR('f', 181, OBD_IOC_DATA_TYPE) #define OBD_IOC_PARSE _IOWR('f', 182, OBD_IOC_DATA_TYPE) @@ -669,7 +678,7 @@ struct l_wait_info { * wait for @condition to become true, but no longer than timeout, specified * by @info. */ -#define __l_wait_event(wq, condition, info, ret, excl) \ +#define __l_wait_event(wq, condition, info, ret, l_add_wait) \ do { \ cfs_waitlink_t __wait; \ cfs_duration_t __timeout = info->lwi_timeout; \ @@ -681,16 +690,13 @@ do { \ break; \ \ cfs_waitlink_init(&__wait); \ - if (excl) \ - cfs_waitq_add_exclusive(&wq, &__wait); \ - else \ - cfs_waitq_add(&wq, &__wait); \ + l_add_wait(&wq, &__wait); \ \ /* Block all signals (just the non-fatal ones if no timeout). */ \ if (info->lwi_on_signal != NULL && (__timeout == 0 || __allow_intr)) \ - __blocked = l_w_e_set_sigs(LUSTRE_FATAL_SIGS); \ + __blocked = cfs_block_sigsinv(LUSTRE_FATAL_SIGS); \ else \ - __blocked = l_w_e_set_sigs(0); \ + __blocked = cfs_block_sigsinv(0); \ \ for (;;) { \ unsigned __wstate; \ @@ -699,7 +705,7 @@ do { \ (__timeout == 0 || __allow_intr) ? \ CFS_TASK_INTERRUPTIBLE : CFS_TASK_UNINT; \ \ - cfs_set_current_state(__wstate); \ + cfs_set_current_state(CFS_TASK_INTERRUPTIBLE); \ \ if (condition) \ break; \ @@ -724,7 +730,7 @@ do { \ } \ /* Take signals after the timeout expires. */ \ if (info->lwi_on_signal != NULL) \ - (void)l_w_e_set_sigs(LUSTRE_FATAL_SIGS); \ + (void)cfs_block_sigsinv(LUSTRE_FATAL_SIGS);\ } \ } \ \ @@ -756,7 +762,7 @@ do { \ } while (0) #else /* !__KERNEL__ */ -#define __l_wait_event(wq, condition, info, ret, excl) \ +#define __l_wait_event(wq, condition, info, ret, l_add_wait) \ do { \ long __timeout = info->lwi_timeout; \ long __now; \ @@ -808,7 +814,8 @@ do { \ int __ret; \ struct l_wait_info *__info = (info); \ \ - __l_wait_event(wq, condition, __info, __ret, 0); \ + __l_wait_event(wq, condition, __info, \ + __ret, cfs_waitq_add); \ __ret; \ }) @@ -817,16 +824,39 @@ do { \ int __ret; \ struct l_wait_info *__info = (info); \ \ - __l_wait_event(wq, condition, __info, __ret, 1); \ + __l_wait_event(wq, condition, __info, \ + __ret, cfs_waitq_add_exclusive); \ __ret; \ }) -#define l_cfs_wait_event(wq, condition) \ +#define l_wait_event_exclusive_head(wq, condition, info) \ +({ \ + int __ret; \ + struct l_wait_info *__info = (info); \ + \ + __l_wait_event(wq, condition, __info, \ + __ret, cfs_waitq_add_exclusive_head); \ + __ret; \ +}) + +#define l_wait_condition(wq, condition) \ ({ \ struct l_wait_info lwi = { 0 }; \ l_wait_event(wq, condition, &lwi); \ }) +#define l_wait_condition_exclusive(wq, condition) \ +({ \ + struct l_wait_info lwi = { 0 }; \ + l_wait_event_exclusive(wq, condition, &lwi); \ +}) + +#define l_wait_condition_exclusive_head(wq, condition) \ +({ \ + struct l_wait_info lwi = { 0 }; \ + l_wait_event_exclusive_head(wq, condition, &lwi); \ +}) + #ifdef __KERNEL__ #define LIBLUSTRE_CLIENT (0) #else