Whamcloud - gitweb
land b_unify on b_devel
authorphil <phil>
Fri, 25 Jul 2003 21:18:41 +0000 (21:18 +0000)
committerphil <phil>
Fri, 25 Jul 2003 21:18:41 +0000 (21:18 +0000)
 - 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

14 files changed:
lnet/klnds/socklnd/socklnd.c
lnet/klnds/socklnd/socklnd.h
lnet/klnds/socklnd/socklnd_cb.c
lnet/libcfs/debug.c
lustre/llite/llite_internal.h
lustre/mdc/mdc_lib.c
lustre/obdclass/obdo.c
lustre/obdclass/simple.c
lustre/obdfilter/filter_log.c
lustre/osc/osc_lib.c
lustre/portals/knals/socknal/socknal.c
lustre/portals/knals/socknal/socknal.h
lustre/portals/knals/socknal/socknal_cb.c
lustre/portals/libcfs/debug.c

index 91d971c..c9681a4 100644 (file)
@@ -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);
index 86cdeb0..188d1f2 100644 (file)
 
 #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;
index 6147d8a..ef74bc9 100644 (file)
@@ -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 */
index f37cd96..2606819 100644 (file)
@@ -48,6 +48,7 @@
 # define DEBUG_SUBSYSTEM S_PORTALS
 
 #include <linux/kp30.h>
+#include <linux/portals_compat25.h>
 
 #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",                
index fd37709..848b77e 100644 (file)
@@ -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 */
index a17f7a1..014a42d 100644 (file)
@@ -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,
index 4532534..51f7156 100644 (file)
@@ -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)
index bd1363a..1aceaeb 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <linux/obd.h>
 #include <linux/lustre_lib.h>
+#include <linux/lustre_compat25.h>
 
 /* 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);
 
index d91e1e8..fe896d0 100644 (file)
@@ -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);
index c8cd6ad..db22668 100644 (file)
@@ -28,6 +28,7 @@
 # include <linux/obd_ost.h>
 # include <linux/lustre_net.h>
 # include <linux/lustre_dlm.h>
+# include <linux/lustre_lib.h>
 
 /* 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) &&
index 91d971c..c9681a4 100644 (file)
@@ -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);
index 86cdeb0..188d1f2 100644 (file)
 
 #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;
index 6147d8a..ef74bc9 100644 (file)
@@ -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 */
index f37cd96..2606819 100644 (file)
@@ -48,6 +48,7 @@
 # define DEBUG_SUBSYSTEM S_PORTALS
 
 #include <linux/kp30.h>
+#include <linux/portals_compat25.h>
 
 #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",