Skip to content

Commit e804315

Browse files
jankaraRoss Zwisler
authored andcommitted
dax: Define DAX lock bit for radix tree exceptional entry
We will use lowest available bit in the radix tree exceptional entry for locking of the entry. Define it. Also clean up definitions of DAX entry type bits in DAX exceptional entries to use defined constants instead of hardcoding numbers and cleanup checking of these bits to not rely on how other bits in the entry are set. Reviewed-by: Ross Zwisler <[email protected]> Signed-off-by: Jan Kara <[email protected]> Signed-off-by: Ross Zwisler <[email protected]>
1 parent 348e967 commit e804315

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

fs/dax.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,19 @@
3232
#include <linux/pfn_t.h>
3333
#include <linux/sizes.h>
3434

35-
#define RADIX_DAX_MASK 0xf
36-
#define RADIX_DAX_SHIFT 4
37-
#define RADIX_DAX_PTE (0x4 | RADIX_TREE_EXCEPTIONAL_ENTRY)
38-
#define RADIX_DAX_PMD (0x8 | RADIX_TREE_EXCEPTIONAL_ENTRY)
39-
#define RADIX_DAX_TYPE(entry) ((unsigned long)entry & RADIX_DAX_MASK)
35+
/*
36+
* We use lowest available bit in exceptional entry for locking, other two
37+
* bits to determine entry type. In total 3 special bits.
38+
*/
39+
#define RADIX_DAX_SHIFT (RADIX_TREE_EXCEPTIONAL_SHIFT + 3)
40+
#define RADIX_DAX_PTE (1 << (RADIX_TREE_EXCEPTIONAL_SHIFT + 1))
41+
#define RADIX_DAX_PMD (1 << (RADIX_TREE_EXCEPTIONAL_SHIFT + 2))
42+
#define RADIX_DAX_TYPE_MASK (RADIX_DAX_PTE | RADIX_DAX_PMD)
43+
#define RADIX_DAX_TYPE(entry) ((unsigned long)entry & RADIX_DAX_TYPE_MASK)
4044
#define RADIX_DAX_SECTOR(entry) (((unsigned long)entry >> RADIX_DAX_SHIFT))
4145
#define RADIX_DAX_ENTRY(sector, pmd) ((void *)((unsigned long)sector << \
42-
RADIX_DAX_SHIFT | (pmd ? RADIX_DAX_PMD : RADIX_DAX_PTE)))
46+
RADIX_DAX_SHIFT | (pmd ? RADIX_DAX_PMD : RADIX_DAX_PTE) | \
47+
RADIX_TREE_EXCEPTIONAL_ENTRY))
4348

4449
static long dax_map_atomic(struct block_device *bdev, struct blk_dax_ctl *dax)
4550
{

include/linux/dax.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
#include <linux/mm.h>
66
#include <asm/pgtable.h>
77

8+
/* We use lowest available exceptional entry bit for locking */
9+
#define RADIX_DAX_ENTRY_LOCK (1 << RADIX_TREE_EXCEPTIONAL_SHIFT)
10+
811
ssize_t dax_do_io(struct kiocb *, struct inode *, struct iov_iter *, loff_t,
912
get_block_t, dio_iodone_t, int flags);
1013
int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t);

0 commit comments

Comments
 (0)