lockdep_assert_held(&clp->cl_lock);
 
+       atomic_inc(&stp->st_stid.sc_count);
        stp->st_stid.sc_type = NFS4_LOCK_STID;
        stp->st_stateowner = &lo->lo_owner;
        get_nfs4_file(fp);
        lockdep_assert_held(&clp->cl_lock);
 
        list_for_each_entry(lst, &lo->lo_owner.so_stateids, st_perstateowner) {
-               if (lst->st_stid.sc_file == fp)
+               if (lst->st_stid.sc_file == fp) {
+                       atomic_inc(&lst->st_stid.sc_count);
                        return lst;
+               }
        }
        return NULL;
 }
 {
        struct nfs4_openowner *open_sop = NULL;
        struct nfs4_lockowner *lock_sop = NULL;
-       struct nfs4_ol_stateid *lock_stp;
+       struct nfs4_ol_stateid *lock_stp = NULL;
        struct nfs4_file *fp;
        struct file *filp = NULL;
        struct file_lock *file_lock = NULL;
                        goto out;
                status = lookup_or_create_lock_state(cstate, open_stp, lock,
                                                        &lock_stp, &new_state);
-       } else
+       } else {
                status = nfs4_preprocess_seqid_op(cstate,
                                       lock->lk_old_lock_seqid,
                                       &lock->lk_old_lock_stateid,
                                       NFS4_LOCK_STID, &lock_stp, nn);
+               /* FIXME: move into nfs4_preprocess_seqid_op */
+               if (!status)
+                       atomic_inc(&lock_stp->st_stid.sc_count);
+       }
        if (status)
                goto out;
        lock_sop = lockowner(lock_stp->st_stateowner);
 out:
        if (filp)
                fput(filp);
+       if (lock_stp)
+               nfs4_put_stid(&lock_stp->st_stid);
        if (status && new_state)
                release_lock_stateid(lock_stp);
        nfsd4_bump_seqid(cstate, status);