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;
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 */
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 ||
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);
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;
/* 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... */
/* ...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 */
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);
* "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);
#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 */
{
/* 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 */
/* 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;
ksock_ltx_t *
ksocknal_get_ltx (int may_block)
{
- long flags;
+ unsigned long flags;
ksock_ltx_t *ltx = NULL;
for (;;) {
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);
}
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);
}
void
ksocknal_tx_done (ksock_tx_t *tx)
{
- long flags;
+ unsigned long flags;
ksock_ltx_t *ltx;
ENTRY;
}
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;
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",
{
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;
}
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;
goto out; /* (later) */
default:
+ break;
}
/* Not Reached */
/* 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;
/* 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"),
" 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 */
# define DEBUG_SUBSYSTEM S_PORTALS
#include <linux/kp30.h>
+#include <linux/portals_compat25.h>
#define DEBUG_OVERFLOW 1024
static char *debug_buf = NULL;
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)) {
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",
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;
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);
void ll_read_inode2(struct inode *inode, void *opaque);
void ll_umount_begin(struct super_block *sb);
-
-
#endif /* LLITE_INTERNAL_H */
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);
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;
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,
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;
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)
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);
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);
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);
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,
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);
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))
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)
#include <linux/obd.h>
#include <linux/lustre_lib.h>
+#include <linux/lustre_compat25.h>
/* Debugging check only needed during development */
#ifdef OBD_CTXT_DEBUG
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);
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);
# 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)
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) &&
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;
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 */
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 ||
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);
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;
/* 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... */
/* ...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 */
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);
* "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);
#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 */
{
/* 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 */
/* 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;
ksock_ltx_t *
ksocknal_get_ltx (int may_block)
{
- long flags;
+ unsigned long flags;
ksock_ltx_t *ltx = NULL;
for (;;) {
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);
}
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);
}
void
ksocknal_tx_done (ksock_tx_t *tx)
{
- long flags;
+ unsigned long flags;
ksock_ltx_t *ltx;
ENTRY;
}
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;
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",
{
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;
}
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;
goto out; /* (later) */
default:
+ break;
}
/* Not Reached */
/* 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;
/* 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"),
" 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 */
# define DEBUG_SUBSYSTEM S_PORTALS
#include <linux/kp30.h>
+#include <linux/portals_compat25.h>
#define DEBUG_OVERFLOW 1024
static char *debug_buf = NULL;
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)) {
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",