From: green Date: Mon, 26 Apr 2004 17:05:12 +0000 (+0000) Subject: Update to HEAD. X-Git-Tag: v1_7_100~1^120~7 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=13c644c670efba551644b1ae2a2244ce3d04602b;p=fs%2Flustre-release.git Update to HEAD. --- diff --git a/lnet/klnds/qswlnd/qswlnd.h b/lnet/klnds/qswlnd/qswlnd.h index b1b9a45..1cd42db 100644 --- a/lnet/klnds/qswlnd/qswlnd.h +++ b/lnet/klnds/qswlnd/qswlnd.h @@ -71,8 +71,10 @@ #define DEBUG_SUBSYSTEM S_QSWNAL #include +#include #include #include +#include #define KQSW_CHECKSUM 0 #if KQSW_CHECKSUM @@ -153,8 +155,7 @@ typedef struct int krx_rpc_reply_sent; /* rpc reply sent */ atomic_t krx_refcount; /* how to tell when rpc is done */ kpr_fwd_desc_t krx_fwd; /* embedded forwarding descriptor */ - struct page *krx_pages[KQSW_NRXMSGPAGES_LARGE]; /* pages allocated */ - struct iovec krx_iov[KQSW_NRXMSGPAGES_LARGE]; /* iovec for forwarding */ + ptl_kiov_t krx_kiov[KQSW_NRXMSGPAGES_LARGE]; /* buffer frags */ } kqswnal_rx_t; typedef struct @@ -194,17 +195,19 @@ typedef struct typedef struct { + /* dynamic tunables... */ + int kqn_optimized_gets; /* optimized GETs? */ +#if CONFIG_SYSCTL + struct ctl_table_header *kqn_sysctl; /* sysctl interface */ +#endif +} kqswnal_tunables_t; + +typedef struct +{ char kqn_init; /* what's been initialised */ char kqn_shuttingdown; /* I'm trying to shut down */ - atomic_t kqn_nthreads; /* # threads not terminated */ - atomic_t kqn_nthreads_running;/* # threads still running */ - - int kqn_optimized_gets; /* optimized GETs? */ - int kqn_copy_small_fwd; /* fwd small msgs from pre-allocated buffer? */ + atomic_t kqn_nthreads; /* # threads running */ -#if CONFIG_SYSCTL - struct ctl_table_header *kqn_sysctl; /* sysctl interface */ -#endif kqswnal_rx_t *kqn_rxds; /* all the receive descriptors */ kqswnal_tx_t *kqn_txds; /* all the transmit descriptors */ @@ -214,6 +217,7 @@ typedef struct spinlock_t kqn_idletxd_lock; /* serialise idle txd access */ wait_queue_head_t kqn_idletxd_waitq; /* sender blocks here waiting for idle txd */ struct list_head kqn_idletxd_fwdq; /* forwarded packets block here waiting for idle txd */ + atomic_t kqn_pending_txs; /* # transmits being prepped */ spinlock_t kqn_sched_lock; /* serialise packet schedulers */ wait_queue_head_t kqn_sched_waitq; /* scheduler blocks here */ @@ -223,6 +227,7 @@ typedef struct struct list_head kqn_delayedtxds; /* delayed transmits */ spinlock_t kqn_statelock; /* cb_cli/cb_sti */ + wait_queue_head_t kqn_yield_waitq; /* where yield waits */ nal_cb_t *kqn_cb; /* -> kqswnal_lib */ #if MULTIRAIL_EKC EP_SYS *kqn_ep; /* elan system */ @@ -246,12 +251,13 @@ typedef struct /* kqn_init state */ #define KQN_INIT_NOTHING 0 /* MUST BE ZERO so zeroed state is initialised OK */ #define KQN_INIT_DATA 1 -#define KQN_INIT_PTL 2 +#define KQN_INIT_LIB 2 #define KQN_INIT_ALL 3 -extern nal_cb_t kqswnal_lib; -extern nal_t kqswnal_api; -extern kqswnal_data_t kqswnal_data; +extern nal_cb_t kqswnal_lib; +extern nal_t kqswnal_api; +extern kqswnal_tunables_t kqswnal_tunables; +extern kqswnal_data_t kqswnal_data; /* global pre-prepared replies to keep off the stack */ extern EP_STATUSBLK kqswnal_rpc_success; diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h index 0b6da9f..4cb1628 100644 --- a/lustre/include/liblustre.h +++ b/lustre/include/liblustre.h @@ -25,6 +25,7 @@ #define LIBLUSTRE_H__ #include +#include #ifndef __CYGWIN__ #include #include @@ -51,7 +52,7 @@ #define PAGE_SHIFT 12 #define PAGE_SIZE (1UL << PAGE_SHIFT) #define PAGE_MASK (~(PAGE_SIZE-1)) -#define loff_t __u64 +#define loff_t long long #define ERESTART 2001 typedef unsigned short umode_t; @@ -120,7 +121,6 @@ static inline void *kmalloc(int size, int prot) typedef struct { void *cwd; - }mm_segment_t; typedef int (read_proc_t)(char *page, char **start, off_t off, @@ -130,60 +130,12 @@ struct file; /* forward ref */ typedef int (write_proc_t)(struct file *file, const char *buffer, unsigned long count, void *data); -/* byteorder */ -#define __swab16(x) \ -({ \ - __u16 __x = (x); \ - ((__u16)( \ - (((__u16)(__x) & (__u16)0x00ffU) << 8) | \ - (((__u16)(__x) & (__u16)0xff00U) >> 8) )); \ -}) - -#define __swab32(x) \ -({ \ - __u32 __x = (x); \ - ((__u32)( \ - (((__u32)(__x) & (__u32)0x000000ffUL) << 24) | \ - (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) | \ - (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) | \ - (((__u32)(__x) & (__u32)0xff000000UL) >> 24) )); \ -}) - -#define __swab64(x) \ -({ \ - __u64 __x = (x); \ - ((__u64)( \ - (__u64)(((__u64)(__x) & (__u64)0x00000000000000ffULL) << 56) | \ - (__u64)(((__u64)(__x) & (__u64)0x000000000000ff00ULL) << 40) | \ - (__u64)(((__u64)(__x) & (__u64)0x0000000000ff0000ULL) << 24) | \ - (__u64)(((__u64)(__x) & (__u64)0x00000000ff000000ULL) << 8) | \ - (__u64)(((__u64)(__x) & (__u64)0x000000ff00000000ULL) >> 8) | \ - (__u64)(((__u64)(__x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ - (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \ - (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \ -}) - -#define __swab16s(x) __swab16(*(x)) -#define __swab32s(x) __swab32(*(x)) -#define __swab64s(x) __swab64(*(x)) - -#define __LITTLE_ENDIAN__ -#ifdef __LITTLE_ENDIAN__ -# define le16_to_cpu(x) ((__u16)(x)) -# define cpu_to_le16(x) ((__u16)(x)) -# define le32_to_cpu(x) ((__u32)(x)) -# define cpu_to_le32(x) ((__u32)(x)) -# define le64_to_cpu(x) ((__u64)(x)) -# define cpu_to_le64(x) ((__u64)(x)) -#else -# define le16_to_cpu(x) __swab16(x) -# define cpu_to_le16(x) __swab16(x) -# define le32_to_cpu(x) __swab32(x) -# define cpu_to_le32(x) __swab32(x) -# define le64_to_cpu(x) __swab64(x) -# define cpu_to_le64(x) __swab64(x) -# error "do more check here!!!" -#endif +# define le16_to_cpu(x) __le16_to_cpu(x) +# define cpu_to_le16(x) __cpu_to_le16(x) +# define le32_to_cpu(x) __le32_to_cpu(x) +# define cpu_to_le32(x) __cpu_to_le32(x) +# define le64_to_cpu(x) __le64_to_cpu(x) +# define cpu_to_le64(x) __cpu_to_le64(x) #define NIPQUAD(addr) \ ((unsigned char *)&addr)[0], \ @@ -191,17 +143,17 @@ typedef int (write_proc_t)(struct file *file, const char *buffer, ((unsigned char *)&addr)[2], \ ((unsigned char *)&addr)[3] -#if defined(__LITTLE_ENDIAN__) +#if defined(__LITTLE_ENDIAN) #define HIPQUAD(addr) \ ((unsigned char *)&addr)[3], \ ((unsigned char *)&addr)[2], \ ((unsigned char *)&addr)[1], \ ((unsigned char *)&addr)[0] -#elif defined(__BIG_ENDIAN__) +#elif defined(__BIG_ENDIAN) #define HIPQUAD NIPQUAD #else -#error "Please fix asm/byteorder.h" -#endif /* __LITTLE_ENDIAN__ */ +#error "Undefined byteorder??" +#endif /* __LITTLE_ENDIAN */ /* bits ops */ static __inline__ int set_bit(int nr,long * addr) @@ -284,12 +236,22 @@ static inline int request_module(char *name) return (-EINVAL); } -#define __MOD_INC_USE_COUNT(m) do {int a = 1; a++; } while (0) -#define __MOD_DEC_USE_COUNT(m) do {int a = 1; a++; } while (0) -#define MOD_INC_USE_COUNT do {int a = 1; a++; } while (0) -#define MOD_DEC_USE_COUNT do {int a = 1; a++; } while (0) -#define try_module_get __MOD_INC_USE_COUNT -#define module_put __MOD_DEC_USE_COUNT +#define __MOD_INC_USE_COUNT(m) do {} while (0) +#define __MOD_DEC_USE_COUNT(m) do {} while (0) +#define MOD_INC_USE_COUNT do {} while (0) +#define MOD_DEC_USE_COUNT do {} while (0) +static inline void __module_get(struct module *module) +{ +} + +static inline int try_module_get(struct module *module) +{ + return 1; +} + +static inline void module_put(struct module *module) +{ +} /* module initialization */ extern int init_obdclass(void); @@ -303,14 +265,15 @@ extern int echo_client_init(void); /* general stuff */ -#define jiffies 0 #define EXPORT_SYMBOL(S) -typedef int spinlock_t; +typedef struct { } spinlock_t; typedef __u64 kdev_t; -#define SPIN_LOCK_UNLOCKED 0 +#define SPIN_LOCK_UNLOCKED (spinlock_t) { } +#define LASSERT_SPIN_LOCKED(lock) do {} while(0) + static inline void spin_lock(spinlock_t *l) {return;} static inline void spin_unlock(spinlock_t *l) {return;} static inline void spin_lock_init(spinlock_t *l) {return;} @@ -318,22 +281,10 @@ static inline void local_irq_save(unsigned long flag) {return;} static inline void local_irq_restore(unsigned long flag) {return;} static inline int spin_is_locked(spinlock_t *l) {return 1;} -static inline void spin_lock_bh(spinlock_t *l) -{ - return; -} -static inline void spin_unlock_bh(spinlock_t *l) -{ - return; -} -static inline void spin_unlock_irqrestore(spinlock_t *a, unsigned long b) -{ - return; -} -static inline void spin_lock_irqsave(spinlock_t *a, unsigned long b) -{ - return; -} +static inline void spin_lock_bh(spinlock_t *l) {} +static inline void spin_unlock_bh(spinlock_t *l) {} +static inline void spin_lock_irqsave(spinlock_t *a, unsigned long b) {} +static inline void spin_unlock_irqrestore(spinlock_t *a, unsigned long b) {} #define min(x,y) ((x)<(y) ? (x) : (y)) #define max(x,y) ((x)>(y) ? (x) : (y)) @@ -434,8 +385,12 @@ struct page { #endif }; +/* 2.4 defines */ +#define PAGE_LIST_ENTRY list +#define PAGE_LIST(page) ((page)->list) + #define kmap(page) (page)->addr -#define kunmap(a) do { int foo = 1; foo++; } while (0) +#define kunmap(a) do {} while (0) static inline struct page *alloc_pages(int mask, unsigned long order) { @@ -529,6 +484,7 @@ struct iattr { #define IT_GETXATTR 0x0040 #define IT_EXEC 0x0080 #define IT_PIN 0x0100 +#define IT_CHDIR 0x0200 #define IT_FL_LOCKED 0x0001 #define IT_FL_FOLLOWED 0x0002 /* set by vfs_follow_link */ @@ -571,8 +527,6 @@ struct vfsmount { void *pwd; }; -#define cpu_to_le32(x) ((__u32)(x)) - /* semaphores */ struct rw_semaphore { int count; @@ -583,14 +537,15 @@ struct semaphore { int count; }; -#define down(a) do {(a)->count++;} while (0) -#define up(a) do {(a)->count--;} while (0) -#define down_read(a) do {(a)->count++;} while (0) -#define up_read(a) do {(a)->count--;} while (0) -#define down_write(a) do {(a)->count++;} while (0) -#define up_write(a) do {(a)->count--;} while (0) -#define sema_init(a,b) do { (a)->count = b; } while (0) -#define init_rwsem(a) do {} while (0) +/* use the macro's argument to avoid unused warnings */ +#define down(a) do { (void)a; } while (0) +#define up(a) do { (void)a; } while (0) +#define down_read(a) do { (void)a; } while (0) +#define up_read(a) do { (void)a; } while (0) +#define down_write(a) do { (void)a; } while (0) +#define up_write(a) do { (void)a; } while (0) +#define sema_init(a,b) do { (void)a; } while (0) +#define init_rwsem(a) do { (void)a; } while (0) #define DECLARE_MUTEX(name) \ struct semaphore name = { 1 } static inline void init_MUTEX (struct semaphore *sem) @@ -638,6 +593,10 @@ extern struct task_struct *current; #define del_wait_queue(p) do { list_del(&(p)->sleeping); } while (0) #define remove_wait_queue(q,p) do { list_del(&(p)->sleeping); } while (0) +#define DECLARE_WAIT_QUEUE_HEAD(HEAD) \ + wait_queue_head_t HEAD = { \ + .sleepers = LIST_HEAD_INIT(HEAD.sleepers) \ + } #define init_waitqueue_head(l) INIT_LIST_HEAD(&(l)->sleepers) #define wake_up(l) do { int a; a++; } while (0) #define TASK_INTERRUPTIBLE 0 @@ -658,31 +617,36 @@ extern struct task_struct *current; #define in_interrupt() (0) -#define schedule() do { int a; a++; } while (0) +#define schedule() do {} while (0) static inline int schedule_timeout(signed long t) { return 0; } -#define lock_kernel() do { int a; a++; } while (0) -#define daemonize(l) do { int a; a++; } while (0) -#define sigfillset(l) do { int a; a++; } while (0) -#define recalc_sigpending(l) do { int a; a++; } while (0) +#define lock_kernel() do {} while (0) +#define daemonize(l) do {} while (0) +#define sigfillset(l) do {} while (0) +#define recalc_sigpending(l) do {} while (0) #define kernel_thread(l,m,n) LBUG() #define USERMODEHELPER(path, argv, envp) (0) - -static inline int call_usermodehelper(char *prog, char **argv, char **evnp, int unknown) -{ - return 0; -} - - #define SIGNAL_MASK_ASSERT() - #define KERN_INFO - +#include +#if HZ != 1 +#error "liblustre's jiffies currently expects HZ to be 1" +#endif +#define jiffies \ +({ \ + unsigned long _ret = 0; \ + struct timeval tv; \ + if (gettimeofday(&tv, NULL) == 0) \ + _ret = tv.tv_sec; \ + _ret; \ +}) +#define time_after(a, b) ((long)(b) - (long)(a) > 0) +#define time_before(a, b) time_after(b,a) struct timer_list { struct list_head tl_list; @@ -715,12 +679,6 @@ static inline void del_timer(struct timer_list *l) free(l); } -#define time_after(a, b) \ -({ \ - printf("Error: inapproiate call time_after()\n"); \ - 1; \ -}) - typedef struct { volatile int counter; } atomic_t; #define atomic_read(a) ((a)->counter) @@ -791,4 +749,3 @@ int liblustre_wait_event(int timeout); #endif - diff --git a/lustre/mds/mds_unlink_open.c b/lustre/mds/mds_unlink_open.c index 330be73..87e9a27 100644 --- a/lustre/mds/mds_unlink_open.c +++ b/lustre/mds/mds_unlink_open.c @@ -180,7 +180,8 @@ static int mds_unlink_orphan(struct obd_device *obd, struct dentry *dchild, rc = 0; } - handle = fsfilt_start(obd, pending_dir, FSFILT_OP_UNLINK_LOG, NULL); + handle = fsfilt_start_log(obd, pending_dir, FSFILT_OP_UNLINK, NULL, + le32_to_cpu(lmm->lmm_stripe_count)); if (IS_ERR(handle)) { rc = PTR_ERR(handle); CERROR("error fsfilt_start: %d\n", rc); diff --git a/lustre/portals/knals/qswnal/qswnal.h b/lustre/portals/knals/qswnal/qswnal.h index b1b9a45..1cd42db 100644 --- a/lustre/portals/knals/qswnal/qswnal.h +++ b/lustre/portals/knals/qswnal/qswnal.h @@ -71,8 +71,10 @@ #define DEBUG_SUBSYSTEM S_QSWNAL #include +#include #include #include +#include #define KQSW_CHECKSUM 0 #if KQSW_CHECKSUM @@ -153,8 +155,7 @@ typedef struct int krx_rpc_reply_sent; /* rpc reply sent */ atomic_t krx_refcount; /* how to tell when rpc is done */ kpr_fwd_desc_t krx_fwd; /* embedded forwarding descriptor */ - struct page *krx_pages[KQSW_NRXMSGPAGES_LARGE]; /* pages allocated */ - struct iovec krx_iov[KQSW_NRXMSGPAGES_LARGE]; /* iovec for forwarding */ + ptl_kiov_t krx_kiov[KQSW_NRXMSGPAGES_LARGE]; /* buffer frags */ } kqswnal_rx_t; typedef struct @@ -194,17 +195,19 @@ typedef struct typedef struct { + /* dynamic tunables... */ + int kqn_optimized_gets; /* optimized GETs? */ +#if CONFIG_SYSCTL + struct ctl_table_header *kqn_sysctl; /* sysctl interface */ +#endif +} kqswnal_tunables_t; + +typedef struct +{ char kqn_init; /* what's been initialised */ char kqn_shuttingdown; /* I'm trying to shut down */ - atomic_t kqn_nthreads; /* # threads not terminated */ - atomic_t kqn_nthreads_running;/* # threads still running */ - - int kqn_optimized_gets; /* optimized GETs? */ - int kqn_copy_small_fwd; /* fwd small msgs from pre-allocated buffer? */ + atomic_t kqn_nthreads; /* # threads running */ -#if CONFIG_SYSCTL - struct ctl_table_header *kqn_sysctl; /* sysctl interface */ -#endif kqswnal_rx_t *kqn_rxds; /* all the receive descriptors */ kqswnal_tx_t *kqn_txds; /* all the transmit descriptors */ @@ -214,6 +217,7 @@ typedef struct spinlock_t kqn_idletxd_lock; /* serialise idle txd access */ wait_queue_head_t kqn_idletxd_waitq; /* sender blocks here waiting for idle txd */ struct list_head kqn_idletxd_fwdq; /* forwarded packets block here waiting for idle txd */ + atomic_t kqn_pending_txs; /* # transmits being prepped */ spinlock_t kqn_sched_lock; /* serialise packet schedulers */ wait_queue_head_t kqn_sched_waitq; /* scheduler blocks here */ @@ -223,6 +227,7 @@ typedef struct struct list_head kqn_delayedtxds; /* delayed transmits */ spinlock_t kqn_statelock; /* cb_cli/cb_sti */ + wait_queue_head_t kqn_yield_waitq; /* where yield waits */ nal_cb_t *kqn_cb; /* -> kqswnal_lib */ #if MULTIRAIL_EKC EP_SYS *kqn_ep; /* elan system */ @@ -246,12 +251,13 @@ typedef struct /* kqn_init state */ #define KQN_INIT_NOTHING 0 /* MUST BE ZERO so zeroed state is initialised OK */ #define KQN_INIT_DATA 1 -#define KQN_INIT_PTL 2 +#define KQN_INIT_LIB 2 #define KQN_INIT_ALL 3 -extern nal_cb_t kqswnal_lib; -extern nal_t kqswnal_api; -extern kqswnal_data_t kqswnal_data; +extern nal_cb_t kqswnal_lib; +extern nal_t kqswnal_api; +extern kqswnal_tunables_t kqswnal_tunables; +extern kqswnal_data_t kqswnal_data; /* global pre-prepared replies to keep off the stack */ extern EP_STATUSBLK kqswnal_rpc_success; diff --git a/lustre/ptlbd/server.c b/lustre/ptlbd/server.c index c7ac53b..f25b811 100644 --- a/lustre/ptlbd/server.c +++ b/lustre/ptlbd/server.c @@ -36,9 +36,10 @@ static int ptlbd_sv_already_setup = 1; -static int ptlbd_sv_setup(struct obd_device *obddev, obd_count len, void *buf) +static int ptlbd_sv_setup(struct obd_device *obd, obd_count len, void *buf) { - struct ptlbd_obd *ptlbd = &obddev->u.ptlbd; + struct ptlbd_obd *ptlbd = &obd->u.ptlbd; + struct lprocfs_static_vars lvars; int rc; ENTRY; @@ -48,17 +49,20 @@ static int ptlbd_sv_setup(struct obd_device *obddev, obd_count len, void *buf) if ( IS_ERR(ptlbd->filp) ) RETURN(PTR_ERR(ptlbd->filp)); + lprocfs_init_vars(ptlbd_sv, &lvars); + lprocfs_obd_setup(obd, lvars.obd_vars); + ptlbd->ptlbd_service = ptlrpc_init_svc(PTLBD_NBUFS, PTLBD_BUFSIZE, PTLBD_MAXREQSIZE, PTLBD_REQUEST_PORTAL, PTLBD_REPLY_PORTAL, ptlbd_handle, "ptlbd_sv", - obddev->obd_proc_entry); + obd->obd_proc_entry); - if (ptlbd->ptlbd_service == NULL) + if (ptlbd->ptlbd_service == NULL) GOTO(out_filp, rc = -ENOMEM); - rc = ptlrpc_start_n_threads(obddev, ptlbd->ptlbd_service, 1, "ptldb"); - if (rc != 0) + rc = ptlrpc_start_n_threads(obd, ptlbd->ptlbd_service, 1, "ptldb"); + if (rc != 0) GOTO(out_thread, rc); ptlbd_sv_already_setup = 1; @@ -69,13 +73,14 @@ out_thread: ptlrpc_unregister_service(ptlbd->ptlbd_service); out_filp: filp_close(ptlbd->filp, NULL); + lprocfs_obd_cleanup(obd); RETURN(rc); } -static int ptlbd_sv_cleanup(struct obd_device *obddev, int flags) +static int ptlbd_sv_cleanup(struct obd_device *obd, int flags) { - struct ptlbd_obd *ptlbd = &obddev->u.ptlbd; + struct ptlbd_obd *ptlbd = &obd->u.ptlbd; ENTRY; /* XXX check for state */ @@ -86,15 +91,18 @@ static int ptlbd_sv_cleanup(struct obd_device *obddev, int flags) filp_close(ptlbd->filp, NULL); ptlbd_sv_already_setup = 0; + + lprocfs_obd_cleanup(obd); + RETURN(0); } static struct obd_ops ptlbd_sv_obd_ops = { - o_owner: THIS_MODULE, - o_setup: ptlbd_sv_setup, - o_cleanup: ptlbd_sv_cleanup, - o_connect: class_connect, - o_disconnect: class_disconnect, + .o_owner = THIS_MODULE, + .o_setup = ptlbd_sv_setup, + .o_cleanup = ptlbd_sv_cleanup, + .o_connect = class_connect, + .o_disconnect = class_disconnect, }; static struct lprocfs_vars lprocfs_obd_vars[] = { {0} };