]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/nfs/callback_proc.c
Merge tag 'for-v3.9' of git://git.infradead.org/battery-2.6
[karo-tx-linux.git] / fs / nfs / callback_proc.c
index 15b9879d6fbb1ccd23178af143a42ee4fd3fe374..264d1aa935f2b3e52e3e08bd26ee99c30912c8f6 100644 (file)
@@ -14,6 +14,7 @@
 #include "delegation.h"
 #include "internal.h"
 #include "pnfs.h"
+#include "nfs4session.h"
 
 #ifdef NFS_DEBUG
 #define NFSDBG_FACILITY NFSDBG_CALLBACK
@@ -205,7 +206,7 @@ static u32 initiate_bulk_draining(struct nfs_client *clp,
 
                list_for_each_entry(lo, &server->layouts, plh_layouts) {
                        ino = igrab(lo->plh_inode);
-                       if (ino)
+                       if (!ino)
                                continue;
                        spin_lock(&ino->i_lock);
                        /* Is this layout in the process of being freed? */
@@ -561,23 +562,16 @@ __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, void *dummy,
        if (!cps->clp) /* set in cb_sequence */
                goto out;
 
-       dprintk_rcu("NFS: CB_RECALL_SLOT request from %s target max slots %d\n",
+       dprintk_rcu("NFS: CB_RECALL_SLOT request from %s target highest slotid %d\n",
                rpc_peeraddr2str(cps->clp->cl_rpcclient, RPC_DISPLAY_ADDR),
-               args->crsa_target_max_slots);
+               args->crsa_target_highest_slotid);
 
        fc_tbl = &cps->clp->cl_session->fc_slot_table;
 
-       status = htonl(NFS4ERR_BAD_HIGH_SLOT);
-       if (args->crsa_target_max_slots > fc_tbl->max_slots ||
-           args->crsa_target_max_slots < 1)
-               goto out;
-
        status = htonl(NFS4_OK);
-       if (args->crsa_target_max_slots == fc_tbl->max_slots)
-               goto out;
 
-       nfs41_set_target_slotid(fc_tbl, args->crsa_target_max_slots);
-       nfs41_handle_recall_slot(cps->clp);
+       nfs41_set_target_slotid(fc_tbl, args->crsa_target_highest_slotid);
+       nfs41_server_notify_target_slotid_update(cps->clp);
 out:
        dprintk("%s: exit with status = %d\n", __func__, ntohl(status));
        return status;