From: phil Date: Fri, 25 Jul 2003 21:18:41 +0000 (+0000) Subject: land b_unify on b_devel X-Git-Tag: v1_7_0_51~2^14~30 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=eb8e498ea3f164f58060cfec4b317af5b1dce035;p=fs%2Flustre-release.git land b_unify on b_devel - patches for 2.6 - linus-approved APIs - lots of little reorg and fixes for 2.4/2.6 compatibility - better code to manage MDC lock cancellation and dentry memory pressure --- diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c index 91d971c..c9681a4 100644 --- a/lnet/klnds/socklnd/socklnd.c +++ b/lnet/klnds/socklnd/socklnd.c @@ -166,7 +166,7 @@ ksocknal_add_sock (ptl_nid_t nid, int fd, int bind_irq) struct socket *sock = NULL; ksock_sched_t *sched = NULL; unsigned int irq = 0; - struct net_device *dev = NULL; + struct dst_entry *dst; int ret; int idx; ENTRY; @@ -187,12 +187,16 @@ ksocknal_add_sock (ptl_nid_t nid, int fd, int bind_irq) if (!conn) GOTO(error, ret); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) sock->sk->allocation = GFP_NOFS; /* don't call info fs for alloc */ +#else +#warning Zach, Eric: fix me!! +#endif conn->ksnc_file = file; conn->ksnc_sock = sock; - conn->ksnc_saved_data_ready = sock->sk->data_ready; - conn->ksnc_saved_write_space = sock->sk->write_space; + conn->ksnc_saved_data_ready = sock->sk->sk_data_ready; + conn->ksnc_saved_write_space = sock->sk->sk_write_space; conn->ksnc_peernid = nid; atomic_set (&conn->ksnc_refcount, 1); /* 1 ref for socklist */ @@ -204,22 +208,18 @@ ksocknal_add_sock (ptl_nid_t nid, int fd, int bind_irq) conn->ksnc_tx_ready = 0; conn->ksnc_tx_scheduled = 0; -#warning check it is OK to derefence sk->dst_cache->dev like this... - lock_sock (conn->ksnc_sock->sk); - - if (conn->ksnc_sock->sk->dst_cache != NULL) { - dev = conn->ksnc_sock->sk->dst_cache->dev; - if (dev != NULL) { - irq = dev->irq; + dst = sk_dst_get (conn->ksnc_sock->sk); + if (dst != NULL) { + if (dst->dev != NULL) { + irq = dst->dev->irq; if (irq >= NR_IRQS) { CERROR ("Unexpected IRQ %x\n", irq); irq = 0; } } + dst_release (dst); } - release_sock (conn->ksnc_sock->sk); - write_lock_irqsave (&ksocknal_data.ksnd_socklist_lock, flags); if (irq == 0 || @@ -268,9 +268,9 @@ ksocknal_add_sock (ptl_nid_t nid, int fd, int bind_irq) ksocknal_bind_irq (irq, sched - ksocknal_data.ksnd_schedulers); /* NOW it's safe to get called back when socket is ready... */ - sock->sk->user_data = conn; - sock->sk->data_ready = ksocknal_data_ready; - sock->sk->write_space = ksocknal_write_space; + sock->sk->sk_user_data = conn; + sock->sk->sk_data_ready = ksocknal_data_ready; + sock->sk->sk_write_space = ksocknal_write_space; /* ...which I call right now to get things going */ ksocknal_data_ready (sock->sk, 0); @@ -292,7 +292,7 @@ error: int ksocknal_close_sock(ptl_nid_t nid) { - long flags; + unsigned long flags; ksock_conn_t *conn; LIST_HEAD (death_row); struct list_head *tmp; @@ -329,8 +329,8 @@ ksocknal_close_sock(ptl_nid_t nid) /* NB I _have_ to restore the callback, rather than storing * a noop, since the socket could survive past this module * being unloaded!! */ - conn->ksnc_sock->sk->data_ready = conn->ksnc_saved_data_ready; - conn->ksnc_sock->sk->write_space = conn->ksnc_saved_write_space; + conn->ksnc_sock->sk->sk_data_ready = conn->ksnc_saved_data_ready; + conn->ksnc_sock->sk->sk_write_space = conn->ksnc_saved_write_space; /* OK; no more callbacks, but they could be in progress now, * so wait for them to complete... */ @@ -339,7 +339,7 @@ ksocknal_close_sock(ptl_nid_t nid) /* ...however if I get the lock before a callback gets it, * this will make them noop */ - conn->ksnc_sock->sk->user_data = NULL; + conn->ksnc_sock->sk->sk_user_data = NULL; /* And drop the scheduler's connection count while I've got * the exclusive lock */ @@ -385,8 +385,8 @@ ksocknal_push_conn (ksock_conn_t *conn) oldmm = get_fs (); set_fs (KERNEL_DS); - rc = sk->prot->setsockopt (sk, SOL_TCP, TCP_NODELAY, - (char *)&val, sizeof (val)); + rc = sk->sk_prot->setsockopt (sk, SOL_TCP, TCP_NODELAY, + (char *)&val, sizeof (val)); LASSERT (rc == 0); set_fs (oldmm); @@ -505,16 +505,11 @@ _ksocknal_put_conn (ksock_conn_t *conn) * "That's a summons, mate..." */ LASSERT (atomic_read (&conn->ksnc_refcount) == 0); - LASSERT (conn->ksnc_sock->sk->data_ready != ksocknal_data_ready); - LASSERT (conn->ksnc_sock->sk->write_space != ksocknal_write_space); - LASSERT (conn->ksnc_sock->sk->user_data == NULL); + LASSERT (conn->ksnc_sock->sk->sk_data_ready != ksocknal_data_ready); + LASSERT (conn->ksnc_sock->sk->sk_write_space != ksocknal_write_space); + LASSERT (conn->ksnc_sock->sk->sk_user_data == NULL); LASSERT (!conn->ksnc_rx_scheduled); - if (!in_interrupt()) { - ksocknal_close_conn (conn); - return; - } - spin_lock_irqsave (&ksocknal_data.ksnd_reaper_lock, flags); list_add (&conn->ksnc_list, &ksocknal_data.ksnd_reaper_list); diff --git a/lnet/klnds/socklnd/socklnd.h b/lnet/klnds/socklnd/socklnd.h index 86cdeb0..188d1f2 100644 --- a/lnet/klnds/socklnd/socklnd.h +++ b/lnet/klnds/socklnd/socklnd.h @@ -78,7 +78,16 @@ #define SOCKNAL_RESCHED 100 /* # scheduler loops before reschedule */ -#define SOCKNAL_TX_LOW_WATER(sk) (((sk)->sndbuf*8)/10) +#define SOCKNAL_TX_LOW_WATER(sk) (((sk)->sk_sndbuf*8)/10) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,72)) +# define sk_data_ready data_ready +# define sk_write_space write_space +# define sk_user_data user_data +# define sk_prot prot +# define sk_sndbuf sndbuf +# define sk_socket socket +#endif typedef struct /* pool of forwarding buffers */ { @@ -240,7 +249,7 @@ typedef struct /* READER */ struct list_head ksnc_rx_list; /* where I enq waiting input or a forwarding descriptor */ - volatile int ksnc_rx_ready; /* data ready to read */ + int ksnc_rx_ready; /* data ready to read */ int ksnc_rx_scheduled; /* being progressed */ int ksnc_rx_state; /* what is being read */ int ksnc_rx_nob_left; /* # bytes to next hdr/body */ @@ -256,7 +265,7 @@ typedef struct /* WRITER */ struct list_head ksnc_tx_list; /* where I enq waiting for output space */ struct list_head ksnc_tx_queue; /* packets waiting to be sent */ - volatile int ksnc_tx_ready; /* write space */ + int ksnc_tx_ready; /* write space */ int ksnc_tx_scheduled; /* being progressed */ } ksock_conn_t; diff --git a/lnet/klnds/socklnd/socklnd_cb.c b/lnet/klnds/socklnd/socklnd_cb.c index 6147d8a..ef74bc9 100644 --- a/lnet/klnds/socklnd/socklnd_cb.c +++ b/lnet/klnds/socklnd/socklnd_cb.c @@ -141,7 +141,7 @@ ksocknal_dist(nal_cb_t *nal, ptl_nid_t nid, unsigned long *dist) ksock_ltx_t * ksocknal_get_ltx (int may_block) { - long flags; + unsigned long flags; ksock_ltx_t *ltx = NULL; for (;;) { @@ -253,7 +253,7 @@ ksocknal_send_iov (struct socket *sock, ksock_tx_t *tx, int more) mm_segment_t oldmm = get_fs(); set_fs (KERNEL_DS); - rc = sock->sk->prot->sendmsg(sock->sk, &msg, fragsize); + rc = sock_sendmsg(sock, &msg, fragsize); set_fs (oldmm); } @@ -322,7 +322,7 @@ ksocknal_send_kiov (struct socket *sock, ksock_tx_t *tx, int more) mm_segment_t oldmm = get_fs(); set_fs (KERNEL_DS); - rc = sock->sk->prot->sendmsg(sock->sk, &msg, fragsize); + rc = sock_sendmsg(sock, &msg, fragsize); set_fs (oldmm); kunmap (page); } @@ -527,7 +527,7 @@ ksocknal_zc_callback (zccd_t *zcd) void ksocknal_tx_done (ksock_tx_t *tx) { - long flags; + unsigned long flags; ksock_ltx_t *ltx; ENTRY; @@ -559,7 +559,7 @@ ksocknal_tx_done (ksock_tx_t *tx) } void -ksocknal_process_transmit (ksock_sched_t *sched, long *irq_flags) +ksocknal_process_transmit (ksock_sched_t *sched, unsigned long *irq_flags) { ksock_conn_t *conn; ksock_tx_t *tx; @@ -883,7 +883,7 @@ ksocknal_fmb_callback (void *arg, int error) ptl_hdr_t *hdr = (ptl_hdr_t *) page_address(fmb->fmb_pages[0]); ksock_conn_t *conn = NULL; ksock_sched_t *sched; - long flags; + unsigned long flags; if (error != 0) CERROR("Failed to route packet from "LPX64" to "LPX64": %d\n", @@ -931,7 +931,7 @@ ksocknal_get_idle_fmb (ksock_conn_t *conn) { int payload_nob = conn->ksnc_rx_nob_left; int packet_nob = sizeof (ptl_hdr_t) + payload_nob; - long flags; + unsigned long flags; ksock_fmb_pool_t *pool; ksock_fmb_t *fmb; @@ -1175,7 +1175,7 @@ ksocknal_new_packet (ksock_conn_t *conn, int nob_to_skip) } void -ksocknal_process_receive (ksock_sched_t *sched, long *irq_flags) +ksocknal_process_receive (ksock_sched_t *sched, unsigned long *irq_flags) { ksock_conn_t *conn; ksock_fmb_t *fmb; @@ -1297,6 +1297,7 @@ ksocknal_process_receive (ksock_sched_t *sched, long *irq_flags) goto out; /* (later) */ default: + break; } /* Not Reached */ @@ -1466,10 +1467,10 @@ ksocknal_data_ready (struct sock *sk, int n) /* interleave correctly with closing sockets... */ read_lock (&ksocknal_data.ksnd_socklist_lock); - conn = sk->user_data; + conn = sk->sk_user_data; if (conn == NULL) { /* raced with ksocknal_close_sock */ - LASSERT (sk->data_ready != &ksocknal_data_ready); - sk->data_ready (sk, n); + LASSERT (sk->sk_data_ready != &ksocknal_data_ready); + sk->sk_data_ready (sk, n); } else if (!conn->ksnc_rx_ready) { /* new news */ /* Set ASAP in case of concurrent calls to me */ conn->ksnc_rx_ready = 1; @@ -1510,11 +1511,11 @@ ksocknal_write_space (struct sock *sk) /* interleave correctly with closing sockets... */ read_lock (&ksocknal_data.ksnd_socklist_lock); - conn = sk->user_data; + conn = sk->sk_user_data; CDEBUG(D_NET, "sk %p wspace %d low water %d conn %p%s%s%s\n", sk, tcp_wspace(sk), SOCKNAL_TX_LOW_WATER(sk), conn, - (conn == NULL) ? "" : (test_bit (0, &conn->ksnc_tx_ready) ? + (conn == NULL) ? "" : (conn->ksnc_tx_ready ? " ready" : " blocked"), (conn == NULL) ? "" : (conn->ksnc_tx_scheduled ? " scheduled" : " idle"), @@ -1522,10 +1523,10 @@ ksocknal_write_space (struct sock *sk) " empty" : " queued")); if (conn == NULL) { /* raced with ksocknal_close_sock */ - LASSERT (sk->write_space != &ksocknal_write_space); - sk->write_space (sk); + LASSERT (sk->sk_write_space != &ksocknal_write_space); + sk->sk_write_space (sk); } else if (tcp_wspace(sk) >= SOCKNAL_TX_LOW_WATER(sk)) { /* got enough space */ - clear_bit (SOCK_NOSPACE, &sk->socket->flags); + clear_bit (SOCK_NOSPACE, &sk->sk_socket->flags); if (!conn->ksnc_tx_ready) { /* new news */ /* Set ASAP in case of concurrent calls to me */ diff --git a/lnet/libcfs/debug.c b/lnet/libcfs/debug.c index f37cd96..2606819 100644 --- a/lnet/libcfs/debug.c +++ b/lnet/libcfs/debug.c @@ -48,6 +48,7 @@ # define DEBUG_SUBSYSTEM S_PORTALS #include +#include #define DEBUG_OVERFLOW 1024 static char *debug_buf = NULL; @@ -233,7 +234,7 @@ int portals_do_debug_dumplog(void *arg) reparent_to_init(); journal_info = current->journal_info; current->journal_info = NULL; - sprintf(debug_file_name, "%s.%ld", debug_file_path, CURRENT_TIME); + sprintf(debug_file_name, "%s.%ld", debug_file_path, CURRENT_SECONDS); file = filp_open(debug_file_name, O_CREAT|O_TRUNC|O_RDWR, 0644); if (!file || IS_ERR(file)) { @@ -811,7 +812,7 @@ void portals_run_lbug_upcall(char *file, const char *fn, const int line) envp[1] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; envp[2] = NULL; - rc = call_usermodehelper(argv[0], argv, envp); + rc = USERMODEHELPER(argv[0], argv, envp); if (rc < 0) { CERROR("Error invoking lbug upcall %s %s %s %s %s: %d; check " "/proc/sys/portals/upcall\n", diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h index fd37709..848b77e 100644 --- a/lustre/llite/llite_internal.h +++ b/lustre/llite/llite_internal.h @@ -15,6 +15,8 @@ struct ll_sb_info; struct lustre_handle; struct lov_stripe_md; +extern spinlock_t inode_lock; + extern void lprocfs_unregister_mountpoint(struct ll_sb_info *sbi); extern struct proc_dir_entry *proc_lustre_fs_root; @@ -141,6 +143,7 @@ void ll_options(char *options, char **ost, char **mds, int *flags); void ll_lli_init(struct ll_inode_info *lli); int ll_fill_super(struct super_block *sb, void *data, int silent); void ll_put_super(struct super_block *sb); +struct inode *ll_inode_from_lock(struct ldlm_lock *lock); void ll_clear_inode(struct inode *inode); int ll_attr2inode(struct inode *inode, struct iattr *attr, int trunc); int ll_inode_setattr(struct inode *inode, struct iattr *attr, int do_trunc); @@ -154,6 +157,4 @@ void it_set_disposition(struct lookup_intent *it, int flag); void ll_read_inode2(struct inode *inode, void *opaque); void ll_umount_begin(struct super_block *sb); - - #endif /* LLITE_INTERNAL_H */ diff --git a/lustre/mdc/mdc_lib.c b/lustre/mdc/mdc_lib.c index a17f7a1..014a42d 100644 --- a/lustre/mdc/mdc_lib.c +++ b/lustre/mdc/mdc_lib.c @@ -74,17 +74,14 @@ void mdc_create_pack(struct ptlrpc_request *req, int offset, rec->cr_fsuid = current->fsuid; rec->cr_fsgid = current->fsgid; rec->cr_cap = current->cap_effective; - ll_ino2fid(&rec->cr_fid, op_data->ino1, op_data->gen1, op_data->typ1); + rec->cr_fid = op_data->fid1; memset(&rec->cr_replayfid, 0, sizeof(rec->cr_replayfid)); rec->cr_mode = mode; rec->cr_rdev = rdev; rec->cr_uid = uid; rec->cr_gid = gid; rec->cr_time = time; - if (in_group_p(op_data->gid1)) - rec->cr_suppgid = op_data->gid1; - else - rec->cr_suppgid = -1; + rec->cr_suppgid = op_data->ctxt.gid1; tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, op_data->namelen + 1); LOGL0(op_data->name, op_data->namelen, tmp); @@ -111,8 +108,7 @@ void mdc_open_pack(struct ptlrpc_request *req, int offset, rec->cr_fsgid = current->fsgid; rec->cr_cap = current->cap_effective; if (op_data != NULL) - ll_ino2fid(&rec->cr_fid, op_data->ino1, - op_data->gen1, op_data->typ1); + rec->cr_fid = op_data->fid1; memset(&rec->cr_replayfid, 0, sizeof(rec->cr_replayfid)); rec->cr_mode = mode; rec->cr_flags = flags; @@ -120,10 +116,7 @@ void mdc_open_pack(struct ptlrpc_request *req, int offset, rec->cr_uid = uid; rec->cr_gid = gid; rec->cr_time = time; - if (in_group_p(op_data->gid1)) - rec->cr_suppgid = op_data->gid1; - else - rec->cr_suppgid = -1; + rec->cr_suppgid = op_data->ctxt.gid1; if (op_data->name) { tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, @@ -148,7 +141,7 @@ void mdc_setattr_pack(struct ptlrpc_request *req, rec->sa_fsuid = current->fsuid; rec->sa_fsgid = current->fsgid; rec->sa_cap = current->cap_effective; - ll_ino2fid(&rec->sa_fid, data->ino1, data->gen1, data->typ1); + rec->sa_fid = data->fid1; if (iattr) { rec->sa_valid = iattr->ia_valid; @@ -160,14 +153,11 @@ void mdc_setattr_pack(struct ptlrpc_request *req, rec->sa_mtime = LTIME_S(iattr->ia_mtime); rec->sa_ctime = LTIME_S(iattr->ia_ctime); rec->sa_attr_flags = iattr->ia_attr_flags; - if ((iattr->ia_valid & ATTR_GID) && in_group_p(iattr->ia_gid)) rec->sa_suppgid = iattr->ia_gid; else if ((iattr->ia_valid & ATTR_MODE) && - in_group_p(data->gid1)) - rec->sa_suppgid = data->gid1; - else - rec->sa_suppgid = -1; + in_group_p(iattr->ia_gid)) + rec->sa_suppgid = data->ctxt.gid1; } if (ealen == 0) @@ -194,14 +184,10 @@ void mdc_unlink_pack(struct ptlrpc_request *req, int offset, rec->ul_fsuid = current->fsuid; rec->ul_fsgid = current->fsgid; rec->ul_cap = current->cap_effective; - rec->ul_mode = data->mode; - if (in_group_p(data->gid1)) - rec->ul_suppgid = data->gid1; - else - rec->ul_suppgid = -1; - ll_ino2fid(&rec->ul_fid1, data->ino1, data->gen1, data->typ1); - if (data->ino2) - ll_ino2fid(&rec->ul_fid2, data->ino2, data->gen2, data->typ2); + rec->ul_mode = data->create_mode; + rec->ul_suppgid = data->ctxt.gid1; + rec->ul_fid1 = data->fid1; + rec->ul_fid2 = data->fid2; tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, data->namelen + 1); LASSERT (tmp != NULL); @@ -220,16 +206,10 @@ void mdc_link_pack(struct ptlrpc_request *req, int offset, rec->lk_fsuid = current->fsuid; rec->lk_fsgid = current->fsgid; rec->lk_cap = current->cap_effective; - if (in_group_p(data->gid1)) - rec->lk_suppgid1 = data->gid1; - else - rec->lk_suppgid1 = -1; - if (in_group_p(data->gid2)) - rec->lk_suppgid2 = data->gid2; - else - rec->lk_suppgid2 = -1; - ll_ino2fid(&rec->lk_fid1, data->ino1, data->gen1, data->typ1); - ll_ino2fid(&rec->lk_fid2, data->ino2, data->gen2, data->typ2); + rec->lk_suppgid1 = data->ctxt.gid1; + rec->lk_suppgid2 = data->ctxt.gid2; + rec->lk_fid1 = data->fid1; + rec->lk_fid2 = data->fid2; tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, data->namelen + 1); LOGL0(data->name, data->namelen, tmp); @@ -249,16 +229,16 @@ void mdc_rename_pack(struct ptlrpc_request *req, int offset, rec->rn_fsuid = current->fsuid; rec->rn_fsgid = current->fsgid; rec->rn_cap = current->cap_effective; - if (in_group_p(data->gid1)) - rec->rn_suppgid1 = data->gid1; + if (in_group_p(data->ctxt.gid1)) + rec->rn_suppgid1 = data->ctxt.gid1; else rec->rn_suppgid1 = -1; - if (in_group_p(data->gid2)) - rec->rn_suppgid2 = data->gid2; + if (in_group_p(data->ctxt.gid2)) + rec->rn_suppgid2 = data->ctxt.gid2; else rec->rn_suppgid2 = -1; - ll_ino2fid(&rec->rn_fid1, data->ino1, data->gen1, data->typ1); - ll_ino2fid(&rec->rn_fid2, data->ino2, data->gen2, data->typ2); + rec->rn_fid1 = data->fid1; + rec->rn_fid2 = data->fid2; tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, oldlen + 1); LOGL0(old, oldlen, tmp); @@ -280,12 +260,9 @@ void mdc_getattr_pack(struct ptlrpc_request *req, int valid, int offset, b->capability = current->cap_effective; b->valid = valid; b->flags = flags; - if (in_group_p(data->gid1)) - b->suppgid = data->gid1; - else - b->suppgid = -1; + b->suppgid = data->ctxt.gid1; - ll_ino2fid(&b->fid1, data->ino1, data->gen1, data->typ1); + b->fid1 = data->fid1; if (data->name) { char *tmp; tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, diff --git a/lustre/obdclass/obdo.c b/lustre/obdclass/obdo.c index 4532534..51f7156 100644 --- a/lustre/obdclass/obdo.c +++ b/lustre/obdclass/obdo.c @@ -125,7 +125,8 @@ void obdo_from_inode(struct obdo *dst, struct inode *src, obd_flag valid) if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, "valid %x, new time %lu/%lu\n", - valid, src->i_mtime, src->i_ctime); + valid, LTIME_S(src->i_mtime), + LTIME_S(src->i_ctime)); if (valid & OBD_MD_FLATIME) { dst->o_atime = LTIME_S(src->i_atime); @@ -194,7 +195,8 @@ void obdo_refresh_inode(struct inode *dst, struct obdo *src, obd_flag valid) if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, "valid %x, cur time %lu/%lu, new %lu/%lu\n", - src->o_valid, dst->i_mtime, dst->i_ctime, + src->o_valid, LTIME_S(dst->i_mtime), + LTIME_S(dst->i_ctime), (long)src->o_mtime, (long)src->o_ctime); if (valid & OBD_MD_FLATIME && src->o_atime > LTIME_S(dst->i_atime)) @@ -220,7 +222,8 @@ void obdo_to_inode(struct inode *dst, struct obdo *src, obd_flag valid) if (valid & (OBD_MD_FLCTIME | OBD_MD_FLMTIME)) CDEBUG(D_INODE, "valid %x, cur time %lu/%lu, new %lu/%lu\n", - src->o_valid, dst->i_mtime, dst->i_ctime, + src->o_valid, + LTIME_S(dst->i_mtime), LTIME_S(dst->i_ctime), (long)src->o_mtime, (long)src->o_ctime); if (valid & OBD_MD_FLATIME) diff --git a/lustre/obdclass/simple.c b/lustre/obdclass/simple.c index bd1363a..1aceaeb 100644 --- a/lustre/obdclass/simple.c +++ b/lustre/obdclass/simple.c @@ -31,6 +31,7 @@ #include #include +#include /* Debugging check only needed during development */ #ifdef OBD_CTXT_DEBUG @@ -177,7 +178,7 @@ struct dentry *simple_mknod(struct dentry *dir, char *name, int mode) GOTO(out_up, dchild); } - err = vfs_create(dir->d_inode, dchild, (mode & ~S_IFMT) | S_IFREG); + err = ll_vfs_create(dir->d_inode, dchild, (mode & ~S_IFMT) | S_IFREG, NULL); if (err) GOTO(out_err, err); diff --git a/lustre/obdfilter/filter_log.c b/lustre/obdfilter/filter_log.c index d91e1e8..fe896d0 100644 --- a/lustre/obdfilter/filter_log.c +++ b/lustre/obdfilter/filter_log.c @@ -186,7 +186,7 @@ static struct llog_handle *filter_log_create(struct obd_device *obd) goto retry; } - rc = vfs_create(dparent->d_inode, dchild, S_IFREG); + rc = ll_vfs_create(dparent->d_inode, dchild, S_IFREG, NULL); if (rc) { CERROR("log create failed rc = %d\n", rc); GOTO(out_child, rc); diff --git a/lustre/osc/osc_lib.c b/lustre/osc/osc_lib.c index c8cd6ad..db22668 100644 --- a/lustre/osc/osc_lib.c +++ b/lustre/osc/osc_lib.c @@ -28,6 +28,7 @@ # include # include # include +# include /* convert a pathname into a kdev_t */ static kdev_t path2dev(char *path) @@ -36,11 +37,8 @@ static kdev_t path2dev(char *path) struct nameidata nd; kdev_t dev = KDEVT_INIT(0); - if (!path_init(path, LOOKUP_FOLLOW, &nd)) - return 0; - - if (path_walk(path, &nd)) - return 0; + if (ll_path_lookup(path, LOOKUP_FOLLOW, &nd)) + return val_to_kdev(0); dentry = nd.dentry; if (dentry->d_inode && !is_bad_inode(dentry->d_inode) && diff --git a/lustre/portals/knals/socknal/socknal.c b/lustre/portals/knals/socknal/socknal.c index 91d971c..c9681a4 100644 --- a/lustre/portals/knals/socknal/socknal.c +++ b/lustre/portals/knals/socknal/socknal.c @@ -166,7 +166,7 @@ ksocknal_add_sock (ptl_nid_t nid, int fd, int bind_irq) struct socket *sock = NULL; ksock_sched_t *sched = NULL; unsigned int irq = 0; - struct net_device *dev = NULL; + struct dst_entry *dst; int ret; int idx; ENTRY; @@ -187,12 +187,16 @@ ksocknal_add_sock (ptl_nid_t nid, int fd, int bind_irq) if (!conn) GOTO(error, ret); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) sock->sk->allocation = GFP_NOFS; /* don't call info fs for alloc */ +#else +#warning Zach, Eric: fix me!! +#endif conn->ksnc_file = file; conn->ksnc_sock = sock; - conn->ksnc_saved_data_ready = sock->sk->data_ready; - conn->ksnc_saved_write_space = sock->sk->write_space; + conn->ksnc_saved_data_ready = sock->sk->sk_data_ready; + conn->ksnc_saved_write_space = sock->sk->sk_write_space; conn->ksnc_peernid = nid; atomic_set (&conn->ksnc_refcount, 1); /* 1 ref for socklist */ @@ -204,22 +208,18 @@ ksocknal_add_sock (ptl_nid_t nid, int fd, int bind_irq) conn->ksnc_tx_ready = 0; conn->ksnc_tx_scheduled = 0; -#warning check it is OK to derefence sk->dst_cache->dev like this... - lock_sock (conn->ksnc_sock->sk); - - if (conn->ksnc_sock->sk->dst_cache != NULL) { - dev = conn->ksnc_sock->sk->dst_cache->dev; - if (dev != NULL) { - irq = dev->irq; + dst = sk_dst_get (conn->ksnc_sock->sk); + if (dst != NULL) { + if (dst->dev != NULL) { + irq = dst->dev->irq; if (irq >= NR_IRQS) { CERROR ("Unexpected IRQ %x\n", irq); irq = 0; } } + dst_release (dst); } - release_sock (conn->ksnc_sock->sk); - write_lock_irqsave (&ksocknal_data.ksnd_socklist_lock, flags); if (irq == 0 || @@ -268,9 +268,9 @@ ksocknal_add_sock (ptl_nid_t nid, int fd, int bind_irq) ksocknal_bind_irq (irq, sched - ksocknal_data.ksnd_schedulers); /* NOW it's safe to get called back when socket is ready... */ - sock->sk->user_data = conn; - sock->sk->data_ready = ksocknal_data_ready; - sock->sk->write_space = ksocknal_write_space; + sock->sk->sk_user_data = conn; + sock->sk->sk_data_ready = ksocknal_data_ready; + sock->sk->sk_write_space = ksocknal_write_space; /* ...which I call right now to get things going */ ksocknal_data_ready (sock->sk, 0); @@ -292,7 +292,7 @@ error: int ksocknal_close_sock(ptl_nid_t nid) { - long flags; + unsigned long flags; ksock_conn_t *conn; LIST_HEAD (death_row); struct list_head *tmp; @@ -329,8 +329,8 @@ ksocknal_close_sock(ptl_nid_t nid) /* NB I _have_ to restore the callback, rather than storing * a noop, since the socket could survive past this module * being unloaded!! */ - conn->ksnc_sock->sk->data_ready = conn->ksnc_saved_data_ready; - conn->ksnc_sock->sk->write_space = conn->ksnc_saved_write_space; + conn->ksnc_sock->sk->sk_data_ready = conn->ksnc_saved_data_ready; + conn->ksnc_sock->sk->sk_write_space = conn->ksnc_saved_write_space; /* OK; no more callbacks, but they could be in progress now, * so wait for them to complete... */ @@ -339,7 +339,7 @@ ksocknal_close_sock(ptl_nid_t nid) /* ...however if I get the lock before a callback gets it, * this will make them noop */ - conn->ksnc_sock->sk->user_data = NULL; + conn->ksnc_sock->sk->sk_user_data = NULL; /* And drop the scheduler's connection count while I've got * the exclusive lock */ @@ -385,8 +385,8 @@ ksocknal_push_conn (ksock_conn_t *conn) oldmm = get_fs (); set_fs (KERNEL_DS); - rc = sk->prot->setsockopt (sk, SOL_TCP, TCP_NODELAY, - (char *)&val, sizeof (val)); + rc = sk->sk_prot->setsockopt (sk, SOL_TCP, TCP_NODELAY, + (char *)&val, sizeof (val)); LASSERT (rc == 0); set_fs (oldmm); @@ -505,16 +505,11 @@ _ksocknal_put_conn (ksock_conn_t *conn) * "That's a summons, mate..." */ LASSERT (atomic_read (&conn->ksnc_refcount) == 0); - LASSERT (conn->ksnc_sock->sk->data_ready != ksocknal_data_ready); - LASSERT (conn->ksnc_sock->sk->write_space != ksocknal_write_space); - LASSERT (conn->ksnc_sock->sk->user_data == NULL); + LASSERT (conn->ksnc_sock->sk->sk_data_ready != ksocknal_data_ready); + LASSERT (conn->ksnc_sock->sk->sk_write_space != ksocknal_write_space); + LASSERT (conn->ksnc_sock->sk->sk_user_data == NULL); LASSERT (!conn->ksnc_rx_scheduled); - if (!in_interrupt()) { - ksocknal_close_conn (conn); - return; - } - spin_lock_irqsave (&ksocknal_data.ksnd_reaper_lock, flags); list_add (&conn->ksnc_list, &ksocknal_data.ksnd_reaper_list); diff --git a/lustre/portals/knals/socknal/socknal.h b/lustre/portals/knals/socknal/socknal.h index 86cdeb0..188d1f2 100644 --- a/lustre/portals/knals/socknal/socknal.h +++ b/lustre/portals/knals/socknal/socknal.h @@ -78,7 +78,16 @@ #define SOCKNAL_RESCHED 100 /* # scheduler loops before reschedule */ -#define SOCKNAL_TX_LOW_WATER(sk) (((sk)->sndbuf*8)/10) +#define SOCKNAL_TX_LOW_WATER(sk) (((sk)->sk_sndbuf*8)/10) + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,72)) +# define sk_data_ready data_ready +# define sk_write_space write_space +# define sk_user_data user_data +# define sk_prot prot +# define sk_sndbuf sndbuf +# define sk_socket socket +#endif typedef struct /* pool of forwarding buffers */ { @@ -240,7 +249,7 @@ typedef struct /* READER */ struct list_head ksnc_rx_list; /* where I enq waiting input or a forwarding descriptor */ - volatile int ksnc_rx_ready; /* data ready to read */ + int ksnc_rx_ready; /* data ready to read */ int ksnc_rx_scheduled; /* being progressed */ int ksnc_rx_state; /* what is being read */ int ksnc_rx_nob_left; /* # bytes to next hdr/body */ @@ -256,7 +265,7 @@ typedef struct /* WRITER */ struct list_head ksnc_tx_list; /* where I enq waiting for output space */ struct list_head ksnc_tx_queue; /* packets waiting to be sent */ - volatile int ksnc_tx_ready; /* write space */ + int ksnc_tx_ready; /* write space */ int ksnc_tx_scheduled; /* being progressed */ } ksock_conn_t; diff --git a/lustre/portals/knals/socknal/socknal_cb.c b/lustre/portals/knals/socknal/socknal_cb.c index 6147d8a..ef74bc9 100644 --- a/lustre/portals/knals/socknal/socknal_cb.c +++ b/lustre/portals/knals/socknal/socknal_cb.c @@ -141,7 +141,7 @@ ksocknal_dist(nal_cb_t *nal, ptl_nid_t nid, unsigned long *dist) ksock_ltx_t * ksocknal_get_ltx (int may_block) { - long flags; + unsigned long flags; ksock_ltx_t *ltx = NULL; for (;;) { @@ -253,7 +253,7 @@ ksocknal_send_iov (struct socket *sock, ksock_tx_t *tx, int more) mm_segment_t oldmm = get_fs(); set_fs (KERNEL_DS); - rc = sock->sk->prot->sendmsg(sock->sk, &msg, fragsize); + rc = sock_sendmsg(sock, &msg, fragsize); set_fs (oldmm); } @@ -322,7 +322,7 @@ ksocknal_send_kiov (struct socket *sock, ksock_tx_t *tx, int more) mm_segment_t oldmm = get_fs(); set_fs (KERNEL_DS); - rc = sock->sk->prot->sendmsg(sock->sk, &msg, fragsize); + rc = sock_sendmsg(sock, &msg, fragsize); set_fs (oldmm); kunmap (page); } @@ -527,7 +527,7 @@ ksocknal_zc_callback (zccd_t *zcd) void ksocknal_tx_done (ksock_tx_t *tx) { - long flags; + unsigned long flags; ksock_ltx_t *ltx; ENTRY; @@ -559,7 +559,7 @@ ksocknal_tx_done (ksock_tx_t *tx) } void -ksocknal_process_transmit (ksock_sched_t *sched, long *irq_flags) +ksocknal_process_transmit (ksock_sched_t *sched, unsigned long *irq_flags) { ksock_conn_t *conn; ksock_tx_t *tx; @@ -883,7 +883,7 @@ ksocknal_fmb_callback (void *arg, int error) ptl_hdr_t *hdr = (ptl_hdr_t *) page_address(fmb->fmb_pages[0]); ksock_conn_t *conn = NULL; ksock_sched_t *sched; - long flags; + unsigned long flags; if (error != 0) CERROR("Failed to route packet from "LPX64" to "LPX64": %d\n", @@ -931,7 +931,7 @@ ksocknal_get_idle_fmb (ksock_conn_t *conn) { int payload_nob = conn->ksnc_rx_nob_left; int packet_nob = sizeof (ptl_hdr_t) + payload_nob; - long flags; + unsigned long flags; ksock_fmb_pool_t *pool; ksock_fmb_t *fmb; @@ -1175,7 +1175,7 @@ ksocknal_new_packet (ksock_conn_t *conn, int nob_to_skip) } void -ksocknal_process_receive (ksock_sched_t *sched, long *irq_flags) +ksocknal_process_receive (ksock_sched_t *sched, unsigned long *irq_flags) { ksock_conn_t *conn; ksock_fmb_t *fmb; @@ -1297,6 +1297,7 @@ ksocknal_process_receive (ksock_sched_t *sched, long *irq_flags) goto out; /* (later) */ default: + break; } /* Not Reached */ @@ -1466,10 +1467,10 @@ ksocknal_data_ready (struct sock *sk, int n) /* interleave correctly with closing sockets... */ read_lock (&ksocknal_data.ksnd_socklist_lock); - conn = sk->user_data; + conn = sk->sk_user_data; if (conn == NULL) { /* raced with ksocknal_close_sock */ - LASSERT (sk->data_ready != &ksocknal_data_ready); - sk->data_ready (sk, n); + LASSERT (sk->sk_data_ready != &ksocknal_data_ready); + sk->sk_data_ready (sk, n); } else if (!conn->ksnc_rx_ready) { /* new news */ /* Set ASAP in case of concurrent calls to me */ conn->ksnc_rx_ready = 1; @@ -1510,11 +1511,11 @@ ksocknal_write_space (struct sock *sk) /* interleave correctly with closing sockets... */ read_lock (&ksocknal_data.ksnd_socklist_lock); - conn = sk->user_data; + conn = sk->sk_user_data; CDEBUG(D_NET, "sk %p wspace %d low water %d conn %p%s%s%s\n", sk, tcp_wspace(sk), SOCKNAL_TX_LOW_WATER(sk), conn, - (conn == NULL) ? "" : (test_bit (0, &conn->ksnc_tx_ready) ? + (conn == NULL) ? "" : (conn->ksnc_tx_ready ? " ready" : " blocked"), (conn == NULL) ? "" : (conn->ksnc_tx_scheduled ? " scheduled" : " idle"), @@ -1522,10 +1523,10 @@ ksocknal_write_space (struct sock *sk) " empty" : " queued")); if (conn == NULL) { /* raced with ksocknal_close_sock */ - LASSERT (sk->write_space != &ksocknal_write_space); - sk->write_space (sk); + LASSERT (sk->sk_write_space != &ksocknal_write_space); + sk->sk_write_space (sk); } else if (tcp_wspace(sk) >= SOCKNAL_TX_LOW_WATER(sk)) { /* got enough space */ - clear_bit (SOCK_NOSPACE, &sk->socket->flags); + clear_bit (SOCK_NOSPACE, &sk->sk_socket->flags); if (!conn->ksnc_tx_ready) { /* new news */ /* Set ASAP in case of concurrent calls to me */ diff --git a/lustre/portals/libcfs/debug.c b/lustre/portals/libcfs/debug.c index f37cd96..2606819 100644 --- a/lustre/portals/libcfs/debug.c +++ b/lustre/portals/libcfs/debug.c @@ -48,6 +48,7 @@ # define DEBUG_SUBSYSTEM S_PORTALS #include +#include #define DEBUG_OVERFLOW 1024 static char *debug_buf = NULL; @@ -233,7 +234,7 @@ int portals_do_debug_dumplog(void *arg) reparent_to_init(); journal_info = current->journal_info; current->journal_info = NULL; - sprintf(debug_file_name, "%s.%ld", debug_file_path, CURRENT_TIME); + sprintf(debug_file_name, "%s.%ld", debug_file_path, CURRENT_SECONDS); file = filp_open(debug_file_name, O_CREAT|O_TRUNC|O_RDWR, 0644); if (!file || IS_ERR(file)) { @@ -811,7 +812,7 @@ void portals_run_lbug_upcall(char *file, const char *fn, const int line) envp[1] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; envp[2] = NULL; - rc = call_usermodehelper(argv[0], argv, envp); + rc = USERMODEHELPER(argv[0], argv, envp); if (rc < 0) { CERROR("Error invoking lbug upcall %s %s %s %s %s: %d; check " "/proc/sys/portals/upcall\n",