|
@@ -8,8 +8,21 @@
|
|
|
|
|
|
struct iomap_ops;
|
|
|
|
|
|
-/* We use lowest available exceptional entry bit for locking */
|
|
|
+/*
|
|
|
+ * We use lowest available bit in exceptional entry for locking, other two
|
|
|
+ * bits to determine entry type. In total 3 special bits.
|
|
|
+ */
|
|
|
+#define RADIX_DAX_SHIFT (RADIX_TREE_EXCEPTIONAL_SHIFT + 3)
|
|
|
#define RADIX_DAX_ENTRY_LOCK (1 << RADIX_TREE_EXCEPTIONAL_SHIFT)
|
|
|
+#define RADIX_DAX_PTE (1 << (RADIX_TREE_EXCEPTIONAL_SHIFT + 1))
|
|
|
+#define RADIX_DAX_PMD (1 << (RADIX_TREE_EXCEPTIONAL_SHIFT + 2))
|
|
|
+#define RADIX_DAX_TYPE_MASK (RADIX_DAX_PTE | RADIX_DAX_PMD)
|
|
|
+#define RADIX_DAX_TYPE(entry) ((unsigned long)entry & RADIX_DAX_TYPE_MASK)
|
|
|
+#define RADIX_DAX_SECTOR(entry) (((unsigned long)entry >> RADIX_DAX_SHIFT))
|
|
|
+#define RADIX_DAX_ENTRY(sector, pmd) ((void *)((unsigned long)sector << \
|
|
|
+ RADIX_DAX_SHIFT | (pmd ? RADIX_DAX_PMD : RADIX_DAX_PTE) | \
|
|
|
+ RADIX_TREE_EXCEPTIONAL_ENTRY))
|
|
|
+
|
|
|
|
|
|
ssize_t dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
|
|
|
struct iomap_ops *ops);
|