nfsd: move most of nfsfh.h to fs/nfsd
[safe/jmp/linux-2.6] / drivers / staging / pohmelfs / trans.c
index 92054bd..36a2535 100644 (file)
@@ -101,7 +101,8 @@ static int netfs_trans_send_pages(struct netfs_trans *t, struct netfs_state *st)
                        goto err_out;
                }
 
-               msg.msg_flags = MSG_WAITALL|(attached_pages == 1)?0:MSG_MORE;
+               msg.msg_flags = MSG_WAITALL | (attached_pages == 1 ? 0 :
+                               MSG_MORE);
 
                err = kernel_sendpage(st->socket, page, 0, size, msg.msg_flags);
                if (err <= 0) {
@@ -160,14 +161,14 @@ int netfs_trans_send(struct netfs_trans *t, struct netfs_state *st)
 
        err = kernel_sendmsg(st->socket, &msg, (struct kvec *)msg.msg_iov, 1, t->iovec.iov_len);
        if (err <= 0) {
-               printk("%s: failed to send contig transaction: t: %p, gen: %u, size: %u, err: %d.\n",
+               printk("%s: failed to send contig transaction: t: %p, gen: %u, size: %zu, err: %d.\n",
                                __func__, t, t->gen, t->iovec.iov_len, err);
                if (err == 0)
                        err = -ECONNRESET;
                goto err_out_unlock_return;
        }
 
-       dprintk("%s: sent %s transaction: t: %p, gen: %u, size: %u, page_num: %u.\n",
+       dprintk("%s: sent %s transaction: t: %p, gen: %u, size: %zu, page_num: %u.\n",
                        __func__, (t->page_num)?"partial":"full",
                        t, t->gen, t->iovec.iov_len, t->page_num);
 
@@ -177,9 +178,9 @@ int netfs_trans_send(struct netfs_trans *t, struct netfs_state *st)
 
 err_out_unlock_return:
 
-       if (st->need_reset) {
+       if (st->need_reset)
                netfs_state_exit(st);
-       }
+
        netfs_state_unlock_send(st);
 
        dprintk("%s: t: %p, gen: %u, err: %d.\n",
@@ -456,34 +457,26 @@ int netfs_trans_finish_send(struct netfs_trans *t, struct pohmelfs_sb *psb)
                __func__, t, t->gen, t->iovec.iov_len, t->page_num, psb->active_state);
 #endif
        mutex_lock(&psb->state_lock);
+       list_for_each_entry(c, &psb->state_list, config_entry) {
+               st = &c->state;
 
-       if ((t->flags & NETFS_TRANS_SINGLE_DST) && psb->active_state) {
-               st = &psb->active_state->state;
-
-               err = -EPIPE;
-               if (netfs_state_poll(st) & POLLOUT) {
-                       err = netfs_trans_push_dst(t, st);
-                       if (!err) {
-                               err = netfs_trans_send(t, st);
-                               if (err) {
-                                       netfs_trans_drop_last(t, st);
-                               } else {
-                                       pohmelfs_switch_active(psb);
-                                       goto out;
-                               }
-                       }
+               if (t->flags & NETFS_TRANS_SINGLE_DST) {
+                       if (!(st->ctl.perm & POHMELFS_IO_PERM_READ))
+                               continue;
+               } else {
+                       if (!(st->ctl.perm & POHMELFS_IO_PERM_WRITE))
+                               continue;
                }
-               pohmelfs_switch_active(psb);
-       }
 
-       list_for_each_entry(c, &psb->state_list, config_entry) {
-               st = &c->state;
+               if (psb->active_state && (psb->active_state->state.ctl.prio >= st->ctl.prio) &&
+                               (t->flags & NETFS_TRANS_SINGLE_DST))
+                       st = &psb->active_state->state;
 
                err = netfs_trans_push(t, st);
                if (!err && (t->flags & NETFS_TRANS_SINGLE_DST))
                        break;
        }
-out:
+
        mutex_unlock(&psb->state_lock);
 #if 0
        dprintk("%s: fully sent t: %p, gen: %u, size: %u, page_num: %u, err: %d.\n",
@@ -501,8 +494,6 @@ int netfs_trans_finish(struct netfs_trans *t, struct pohmelfs_sb *psb)
 
        t->gen = atomic_inc_return(&psb->trans_gen);
 
-       pohmelfs_ftrans_clean(t->gen);
-
        cmd->size = t->iovec.iov_len - sizeof(struct netfs_cmd) +
                t->attached_size + t->attached_pages * sizeof(struct netfs_cmd);
        cmd->cmd = NETFS_TRANS;
@@ -514,7 +505,7 @@ int netfs_trans_finish(struct netfs_trans *t, struct pohmelfs_sb *psb)
                cmd->csize = psb->crypto_attached_size;
        }
 
-       dprintk("%s: t: %u, size: %u, iov_len: %u, attached_size: %u, attached_pages: %u.\n",
+       dprintk("%s: t: %u, size: %u, iov_len: %zu, attached_size: %u, attached_pages: %u.\n",
                        __func__, t->gen, cmd->size, t->iovec.iov_len, t->attached_size, t->attached_pages);
        err = pohmelfs_trans_crypt(t, psb);
        if (err) {
@@ -597,7 +588,7 @@ void *netfs_trans_add(struct netfs_trans *t, unsigned int size)
        }
 
        if (io->iov_len + size > t->total_size) {
-               dprintk("%s: too big size t: %p, gen: %u, iov_len: %u, size: %u, total: %u.\n",
+               dprintk("%s: too big size t: %p, gen: %u, iov_len: %zu, size: %u, total: %u.\n",
                                __func__, t, t->gen, io->iov_len, size, t->total_size);
                ptr = ERR_PTR(-E2BIG);
                goto out;
@@ -607,7 +598,7 @@ void *netfs_trans_add(struct netfs_trans *t, unsigned int size)
        io->iov_len += size;
 
 out:
-       dprintk("%s: t: %p, gen: %u, size: %u, total: %u.\n",
+       dprintk("%s: t: %p, gen: %u, size: %u, total: %zu.\n",
                __func__, t, t->gen, size, io->iov_len);
        return ptr;
 }