locks_remove_posix(filp, (fl_owner_t) stp->st_stateowner);
        put_nfs4_file(stp->st_file);
        kmem_cache_free(stateid_slab, stp);
-       stp = NULL;
 }
 
 static void
        sop->so_time = get_seconds();
 }
 
-static void
-release_state_owner(struct nfs4_stateid *stp, int flag)
-{
-       struct nfs4_stateowner *sop = stp->st_stateowner;
-
-       dprintk("NFSD: release_state_owner\n");
-       release_stateid(stp, flag);
-
-       /* place unused nfs4_stateowners on so_close_lru list to be
-        * released by the laundromat service after the lease period
-        * to enable us to handle CLOSE replay
-        */
-       if (sop->so_confirmed && list_empty(&sop->so_stateids))
-               move_to_close_lru(sop);
-}
-
 static int
 cmp_owner_str(struct nfs4_stateowner *sop, struct xdr_netobj *owner, clientid_t *clid) {
        return ((sop->so_owner.len == owner->len) && 
                                        CHECK_FH | OPEN_STATE | CLOSE_STATE,
                                        &close->cl_stateowner, &stp, NULL)))
                goto out; 
-       /*
-       *  Return success, but first update the stateid.
-       */
        status = nfs_ok;
        update_stateid(&stp->st_stateid);
        memcpy(&close->cl_stateid, &stp->st_stateid, sizeof(stateid_t));
 
-       /* release_state_owner() calls nfsd_close() if needed */
-       release_state_owner(stp, OPEN_STATE);
+       /* release_stateid() calls nfsd_close() if needed */
+       release_stateid(stp, OPEN_STATE);
+
+       /* place unused nfs4_stateowners on so_close_lru list to be
+        * released by the laundromat service after the lease period
+        * to enable us to handle CLOSE replay
+        */
+       if (list_empty(&close->cl_stateowner->so_stateids))
+               move_to_close_lru(close->cl_stateowner);
 out:
        if (close->cl_stateowner) {
                nfs4_get_stateowner(close->cl_stateowner);