--- iscsitarget-0.4.15/kernel/block-io.c.orig 2008-02-09 13:48:28.243958477 +0900 +++ iscsitarget-0.4.15/kernel/block-io.c 2008-02-09 13:49:54.196668212 +0900 @@ -28,15 +28,10 @@ struct completion tio_complete; }; -static int -blockio_bio_endio(struct bio *bio, unsigned int bytes_done, int error) +static void blockio_bio_endio(struct bio *bio, int error) { struct tio_work *tio_work = bio->bi_private; - /* Ignore partials */ - if (bio->bi_size) - return 1; - error = test_bit(BIO_UPTODATE, &bio->bi_flags) ? error : -EIO; if (error) @@ -47,8 +42,6 @@ complete(&tio_work->tio_complete); bio_put(bio); - - return 0; } /* --- iscsitarget-0.4.15/kernel/config.c.orig 2008-02-09 13:50:04.041207988 +0900 +++ iscsitarget-0.4.15/kernel/config.c 2008-02-09 13:50:26.006411524 +0900 @@ -40,7 +40,7 @@ int i; struct proc_dir_entry *ent; - if (!(proc_iet_dir = proc_mkdir("net/iet", 0))) + if (!(proc_iet_dir = proc_mkdir("iet", init_net.proc_net))) goto err; proc_iet_dir->owner = THIS_MODULE; --- iscsitarget-0.4.15/kernel/digest.c.orig 2008-02-09 13:23:22.245438102 +0900 +++ iscsitarget-0.4.15/kernel/digest.c 2008-02-09 13:52:19.636637610 +0900 @@ -161,22 +161,15 @@ } } -/* Copied from linux-iscsi initiator and slightly adjusted */ -#define SETSG(sg, p, l) do { \ - (sg).page = virt_to_page((p)); \ - (sg).offset = ((unsigned long)(p) & ~PAGE_CACHE_MASK); \ - (sg).length = (l); \ -} while (0) - static void digest_header(struct hash_desc *hash, struct iscsi_pdu *pdu, u8 *crc) { struct scatterlist sg[2]; unsigned int nbytes = sizeof(struct iscsi_hdr); - SETSG(sg[0], &pdu->bhs, nbytes); + sg_set_buf(&sg[0], &pdu->bhs, nbytes); if (pdu->ahssize) { - SETSG(sg[1], pdu->ahs, pdu->ahssize); + sg_set_buf(&sg[1], pdu->ahs, pdu->ahssize); nbytes += pdu->ahssize; } @@ -228,9 +221,7 @@ else length = size; - sg[i].page = tio->pvec[idx + i]; - sg[i].offset = offset; - sg[i].length = length; + sg_set_page(&sg[i], tio->pvec[idx + i], length, offset); size -= length; offset = 0; } --- iscsitarget-0.4.15/kernel/event.c.orig 2008-02-09 13:52:25.456956998 +0900 +++ iscsitarget-0.4.15/kernel/event.c 2008-02-09 13:56:53.303633278 +0900 @@ -28,7 +28,7 @@ return 0; } -static int event_recv_skb(struct sk_buff *skb) +static void event_recv_skb(struct sk_buff *skb) { int err; struct nlmsghdr *nlh; @@ -37,7 +37,7 @@ while (skb->len >= NLMSG_SPACE(0)) { nlh = (struct nlmsghdr *)skb->data; if (nlh->nlmsg_len < sizeof(*nlh) || skb->len < nlh->nlmsg_len) - return 0; + break; rlen = NLMSG_ALIGN(nlh->nlmsg_len); if (rlen > skb->len) rlen = skb->len; @@ -47,19 +47,6 @@ netlink_ack(skb, nlh, 0); skb_pull(skb, rlen); } - return 0; -} - -static void event_recv(struct sock *sk, int length) -{ - struct sk_buff *skb; - - while ((skb = skb_dequeue(&sk->sk_receive_queue))) { - if (event_recv_skb(skb) && skb->len) - skb_queue_head(&sk->sk_receive_queue, skb); - else - kfree_skb(skb); - } } static int notify(void *data, int len, int gfp_mask) @@ -95,7 +82,8 @@ int event_init(void) { - nl = netlink_kernel_create(NETLINK_IET, 1, event_recv, THIS_MODULE); + nl = netlink_kernel_create(&init_net, NETLINK_IET, 1, event_recv_skb, + NULL, THIS_MODULE); if (!nl) return -ENOMEM; else --- iscsitarget-0.4.15/kernel/iscsi.c.orig 2008-02-09 14:08:53.503096492 +0900 +++ iscsitarget-0.4.15/kernel/iscsi.c 2008-02-09 14:12:10.053866224 +0900 @@ -726,13 +726,18 @@ case READ_10: case WRITE_10: case WRITE_VERIFY: - *off = be32_to_cpu(*(u32 *)&cmd[2]); + *off = (u32)cmd[2] << 24 | (u32)cmd[3] << 16 | + (u32)cmd[4] << 8 | (u32)cmd[5]; *len = (cmd[7] << 8) + cmd[8]; break; case READ_16: case WRITE_16: - *off = be64_to_cpu(*(u64 *)&cmd[2]); - *len = be32_to_cpu(*(u32 *)&cmd[10]); + *off = (u64)cmd[2] << 56 | (u64)cmd[3] << 48 | + (u64)cmd[4] << 40 | (u64)cmd[5] << 32 | + (u64)cmd[6] << 24 | (u64)cmd[7] << 16 | + (u64)cmd[8] << 8 | (u64)cmd[9]; + *len = (u32)cmd[10] << 24 | (u32)cmd[11] << 16 | + (u32)cmd[12] << 8 | (u32)cmd[13]; break; default: BUG(); @@ -1191,10 +1196,56 @@ } } +static inline char *tmf_desc(int fun) +{ + static char *tmf_desc[] = { + "Unknown Function", + "Abort Task", + "Abort Task Set", + "Clear ACA", + "Clear Task Set", + "Logical Unit Reset", + "Target Warm Reset", + "Target Cold Reset", + "Task Reassign", + }; + + if ((fun < ISCSI_FUNCTION_ABORT_TASK) || + (fun > ISCSI_FUNCTION_TASK_REASSIGN)) + fun = 0; + + return tmf_desc[fun]; +} + +static inline char *rsp_desc(int rsp) +{ + static char *rsp_desc[] = { + "Function Complete", + "Unknown Task", + "Unknown LUN", + "Task Allegiant", + "Failover Unsupported", + "Function Unsupported", + "No Authorization", + "Function Rejected", + "Unknown Response", + }; + + if (((rsp < ISCSI_RESPONSE_FUNCTION_COMPLETE) || + (rsp > ISCSI_RESPONSE_NO_AUTHORIZATION)) && + (rsp != ISCSI_RESPONSE_FUNCTION_REJECTED)) + rsp = 8; + else if (rsp == ISCSI_RESPONSE_FUNCTION_REJECTED) + rsp = 7; + + return rsp_desc[rsp]; +} + static void execute_task_management(struct iscsi_cmnd *req) { struct iscsi_conn *conn = req->conn; - struct iscsi_target *target = conn->session->target; + struct iscsi_session *session = conn->session; + struct iscsi_target *target = session->target; struct iscsi_cmnd *rsp; struct iscsi_task_mgt_hdr *req_hdr = (struct iscsi_task_mgt_hdr *)&req->pdu.bhs; struct iscsi_task_rsp_hdr *rsp_hdr; @@ -1209,8 +1260,6 @@ rsp_hdr->itt = req_hdr->itt; rsp_hdr->response = ISCSI_RESPONSE_FUNCTION_COMPLETE; - eprintk("%x %d %x\n", cmnd_itt(req), function, req_hdr->rtt); - switch (function) { case ISCSI_FUNCTION_ABORT_TASK: case ISCSI_FUNCTION_ABORT_TASK_SET: @@ -1708,8 +1757,7 @@ if ((err = event_init()) < 0) goto err; - iscsi_cmnd_cache = kmem_cache_create("iscsi_cmnd", sizeof(struct iscsi_cmnd), - 0, 0, NULL, NULL); + iscsi_cmnd_cache = KMEM_CACHE(iscsi_cmnd, 0); if (!iscsi_cmnd_cache) goto err; --- iscsitarget-0.4.15/kernel/tio.c.orig 2008-02-09 14:06:25.394980772 +0900 +++ iscsitarget-0.4.15/kernel/tio.c 2008-02-09 14:06:35.715546210 +0900 @@ -110,8 +110,7 @@ int tio_init(void) { - tio_cache = kmem_cache_create("tio", sizeof(struct tio), - 0, 0, NULL, NULL); + tio_cache = KMEM_CACHE(tio, 0); return tio_cache ? 0 : -ENOMEM; }