{
        struct orangefs_inode_s *parent = ORANGEFS_I(dir);
        struct orangefs_kernel_op_s *new_op;
+       struct orangefs_object_kref ref;
        struct inode *inode;
        struct iattr iattr;
        int ret;
        if (ret < 0)
                goto out;
 
-       inode = orangefs_new_inode(dir->i_sb, dir, S_IFREG | mode, 0,
-                               &new_op->downcall.resp.create.refn);
+       ref = new_op->downcall.resp.create.refn;
+       op_release(new_op);
+
+       inode = orangefs_new_inode(dir->i_sb, dir, S_IFREG | mode, 0, &ref);
        if (IS_ERR(inode)) {
                gossip_err("%s: Failed to allocate inode for file :%pd:\n",
                           __func__,
        mark_inode_dirty_sync(dir);
        ret = 0;
 out:
-       op_release(new_op);
        gossip_debug(GOSSIP_NAME_DEBUG,
                     "%s: %pd: returning %d\n",
                     __func__,
 {
        struct orangefs_inode_s *parent = ORANGEFS_I(dir);
        struct orangefs_kernel_op_s *new_op;
+       struct orangefs_object_kref ref;
        struct inode *inode;
        struct iattr iattr;
        int mode = 755;
                goto out;
        }
 
-       inode = orangefs_new_inode(dir->i_sb, dir, S_IFLNK | mode, 0,
-                               &new_op->downcall.resp.sym.refn);
+       ref = new_op->downcall.resp.sym.refn;
+       op_release(new_op);
+
+       inode = orangefs_new_inode(dir->i_sb, dir, S_IFLNK | mode, 0, &ref);
        if (IS_ERR(inode)) {
                gossip_err
                    ("*** Failed to allocate orangefs symlink inode\n");
        mark_inode_dirty_sync(dir);
        ret = 0;
 out:
-       op_release(new_op);
        return ret;
 }
 
 {
        struct orangefs_inode_s *parent = ORANGEFS_I(dir);
        struct orangefs_kernel_op_s *new_op;
+       struct orangefs_object_kref ref;
        struct inode *inode;
        struct iattr iattr;
        int ret;
                goto out;
        }
 
-       inode = orangefs_new_inode(dir->i_sb, dir, S_IFDIR | mode, 0,
-                               &new_op->downcall.resp.mkdir.refn);
+       ref = new_op->downcall.resp.mkdir.refn;
+       op_release(new_op);
+
+       inode = orangefs_new_inode(dir->i_sb, dir, S_IFDIR | mode, 0, &ref);
        if (IS_ERR(inode)) {
                gossip_err("*** Failed to allocate orangefs dir inode\n");
                ret = PTR_ERR(inode);
        orangefs_inode_setattr(dir, &iattr);
        mark_inode_dirty_sync(dir);
 out:
-       op_release(new_op);
        return ret;
 }