int rc;
 
        /* need attr_sd for attr, its parent for kobj */
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return -ENODEV;
 
        rc = -EIO;
        if (attr->read)
                rc = attr->read(kobj, attr, buffer, off, count);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
 
        return rc;
 }
        int rc;
 
        /* need attr_sd for attr, its parent for kobj */
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return -ENODEV;
 
        rc = -EIO;
        if (attr->write)
                rc = attr->write(kobj, attr, buffer, offset, count);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
 
        return rc;
 }
        if (!bb->vm_ops || !bb->vm_ops->open)
                return;
 
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return;
 
        bb->vm_ops->open(vma);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
 }
 
 static void bin_vma_close(struct vm_area_struct *vma)
        if (!bb->vm_ops || !bb->vm_ops->close)
                return;
 
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return;
 
        bb->vm_ops->close(vma);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
 }
 
 static int bin_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
        if (!bb->vm_ops || !bb->vm_ops->fault)
                return VM_FAULT_SIGBUS;
 
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return VM_FAULT_SIGBUS;
 
        ret = bb->vm_ops->fault(vma, vmf);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
        return ret;
 }
 
        if (!bb->vm_ops->page_mkwrite)
                return 0;
 
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return VM_FAULT_SIGBUS;
 
        ret = bb->vm_ops->page_mkwrite(vma, vmf);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
        return ret;
 }
 
        if (!bb->vm_ops || !bb->vm_ops->access)
                return -EINVAL;
 
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return -EINVAL;
 
        ret = bb->vm_ops->access(vma, addr, buf, len, write);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
        return ret;
 }
 
        if (!bb->vm_ops || !bb->vm_ops->set_policy)
                return 0;
 
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return -EINVAL;
 
        ret = bb->vm_ops->set_policy(vma, new);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
        return ret;
 }
 
        if (!bb->vm_ops || !bb->vm_ops->get_policy)
                return vma->vm_policy;
 
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return vma->vm_policy;
 
        pol = bb->vm_ops->get_policy(vma, addr);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
        return pol;
 }
 
        if (!bb->vm_ops || !bb->vm_ops->migrate)
                return 0;
 
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return 0;
 
        ret = bb->vm_ops->migrate(vma, from, to, flags);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
        return ret;
 }
 #endif
 
        /* need attr_sd for attr, its parent for kobj */
        rc = -ENODEV;
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                goto out_unlock;
 
        rc = -EINVAL;
        bb->vm_ops = vma->vm_ops;
        vma->vm_ops = &bin_vm_ops;
 out_put:
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
 out_unlock:
        mutex_unlock(&bb->mutex);
 
        int error;
 
        /* binary file operations requires both @sd and its parent */
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return -ENODEV;
 
        error = -EACCES;
        mutex_unlock(&sysfs_bin_lock);
 
        /* open succeeded, put active references */
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
        return 0;
 
  err_out:
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
        kfree(bb);
        return error;
 }
 
  *     RETURNS:
  *     Pointer to @sd on success, NULL on failure.
  */
-static struct sysfs_dirent *sysfs_get_active(struct sysfs_dirent *sd)
+struct sysfs_dirent *sysfs_get_active(struct sysfs_dirent *sd)
 {
        if (unlikely(!sd))
                return NULL;
  *     Put an active reference to @sd.  This function is noop if @sd
  *     is NULL.
  */
-static void sysfs_put_active(struct sysfs_dirent *sd)
+void sysfs_put_active(struct sysfs_dirent *sd)
 {
        struct completion *cmpl;
        int v;
        complete(cmpl);
 }
 
-/**
- *     sysfs_get_active_two - get active references to sysfs_dirent and parent
- *     @sd: sysfs_dirent of interest
- *
- *     Get active reference to @sd and its parent.  Parent's active
- *     reference is grabbed first.  This function is noop if @sd is
- *     NULL.
- *
- *     RETURNS:
- *     Pointer to @sd on success, NULL on failure.
- */
-struct sysfs_dirent *sysfs_get_active_two(struct sysfs_dirent *sd)
-{
-       if (sd) {
-               if (sd->s_parent && unlikely(!sysfs_get_active(sd->s_parent)))
-                       return NULL;
-               if (unlikely(!sysfs_get_active(sd))) {
-                       sysfs_put_active(sd->s_parent);
-                       return NULL;
-               }
-       }
-       return sd;
-}
-
-/**
- *     sysfs_put_active_two - put active references to sysfs_dirent and parent
- *     @sd: sysfs_dirent of interest
- *
- *     Put active references to @sd and its parent.  This function is
- *     noop if @sd is NULL.
- */
-void sysfs_put_active_two(struct sysfs_dirent *sd)
-{
-       if (sd) {
-               sysfs_put_active(sd);
-               sysfs_put_active(sd->s_parent);
-       }
-}
-
 /**
  *     sysfs_deactivate - deactivate sysfs_dirent
  *     @sd: sysfs_dirent to deactivate
 
                return -ENOMEM;
 
        /* need attr_sd for attr and ops, its parent for kobj */
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return -ENODEV;
 
        buffer->event = atomic_read(&attr_sd->s_attr.open->event);
        count = ops->show(kobj, attr_sd->s_attr.attr, buffer->page);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
 
        /*
         * The code works fine with PAGE_SIZE return but it's likely to
        int rc;
 
        /* need attr_sd for attr and ops, its parent for kobj */
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return -ENODEV;
 
        rc = ops->store(kobj, attr_sd->s_attr.attr, buffer->page, count);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
 
        return rc;
 }
                memmove(last_sysfs_file, p, strlen(p) + 1);
 
        /* need attr_sd for attr and ops, its parent for kobj */
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                return -ENODEV;
 
        /* every kobject with an attribute needs a ktype assigned */
                goto err_free;
 
        /* open succeeded, put active references */
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
        return 0;
 
  err_free:
        kfree(buffer);
  err_out:
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
        return error;
 }
 
        struct sysfs_open_dirent *od = attr_sd->s_attr.open;
 
        /* need parent for the kobj, grab both */
-       if (!sysfs_get_active_two(attr_sd))
+       if (!sysfs_get_active(attr_sd))
                goto trigger;
 
        poll_wait(filp, &od->poll, wait);
 
-       sysfs_put_active_two(attr_sd);
+       sysfs_put_active(attr_sd);
 
        if (buffer->event != atomic_read(&od->event))
                goto trigger;