compat: backport system_nrt_wq
[~emulex/for-vlad/old/compat.git] / compat / compat-2.6.27.c
index 7fffe8e..25bee28 100644 (file)
@@ -9,14 +9,13 @@
  */
 
 #include <linux/compat.h>
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
-
 #include <linux/pci.h>
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
 #include <linux/mmc/sdio.h>
 #include <linux/mmc/sdio_func.h>
 #include <linux/mmc/card.h>
 #include <linux/mmc/host.h>
+#endif
 
 /* rfkill notification chain */
 #define RFKILL_STATE_CHANGED            0x0001  /* state of a normal rfkill
@@ -67,6 +66,7 @@ bool pci_pme_capable(struct pci_dev *dev, pci_power_t state)
 }
 EXPORT_SYMBOL(pci_pme_capable);
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
 /**
  *     mmc_align_data_size - pads a transfer size to a more optimal value
  *     @card: the MMC card associated with the data transfer
@@ -201,7 +201,39 @@ unsigned int sdio_align_size(struct sdio_func *func, unsigned int sz)
        return orig_sz;
 }
 EXPORT_SYMBOL_GPL(sdio_align_size);
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) */
+
+#ifdef CONFIG_DEBUG_FS
+/*
+ * Backport of debugfs_remove_recursive() without using the internals globals
+ * which are used by the kernel's version with:
+ * simple_release_fs(&debugfs_mount, &debugfs_mount_count);
+ */
+void debugfs_remove_recursive(struct dentry *dentry)
+{
+       struct dentry *last = NULL;
 
+       /* Sanity checks */
+       if (!dentry || !dentry->d_parent || !dentry->d_parent->d_inode)
+               return;
 
-#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) */
+       while (dentry != last) {
+               struct dentry *child = dentry;
+
+               /* Find a child without children */
+               while (!list_empty(&child->d_subdirs))
+                       child = list_entry(child->d_subdirs.next,
+                                          struct dentry,
+                                          d_u.d_child);
+
+               /* Bail out if we already tried to remove that entry */
+               if (child == last)
+                       return;
+
+               last = child;
+               debugfs_remove(child);
+       }
+}
+EXPORT_SYMBOL_GPL(debugfs_remove_recursive);
+#endif /* CONFIG_DEBUG_FS */