diff options
author | Fred Isaman <iisaman@citi.umich.edu> | 2011-07-30 20:52:49 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2011-07-31 12:18:17 -0400 |
commit | c1c2a4cd352269f1fb585b4a5c63abe24dd946c6 (patch) | |
tree | 0fc7470702b0fc3e7d156ac49285ec58de797fa3 /fs/nfs/blocklayout/blocklayout.h | |
parent | 6d742ba538f98164f3c5e05cdcadb4ec6ddf504f (diff) |
pnfsblock: add extent manipulation functions
Adds working implementations of various support functions
to handle INVAL extents, needed by writes, such as
bl_mark_sectors_init and bl_is_sector_init.
[pnfsblock: fix 64-bit compiler warnings for extent manipulation]
Signed-off-by: Fred Isaman <iisaman@citi.umich.edu>
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
Signed-off-by: Benny Halevy <bhalevy@tonian.com>
[Implement release_inval_marks]
Signed-off-by: Zhang Jingwang <zhangjingwang@nrchpc.ac.cn>
Signed-off-by: Jim Rees <rees@umich.edu>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/blocklayout/blocklayout.h')
-rw-r--r-- | fs/nfs/blocklayout/blocklayout.h | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/fs/nfs/blocklayout/blocklayout.h b/fs/nfs/blocklayout/blocklayout.h index 3e1b5fc152d7..fcf47b55b5ce 100644 --- a/fs/nfs/blocklayout/blocklayout.h +++ b/fs/nfs/blocklayout/blocklayout.h | |||
@@ -38,6 +38,9 @@ | |||
38 | 38 | ||
39 | #include "../pnfs.h" | 39 | #include "../pnfs.h" |
40 | 40 | ||
41 | #define PAGE_CACHE_SECTORS (PAGE_CACHE_SIZE >> SECTOR_SHIFT) | ||
42 | #define PAGE_CACHE_SECTOR_SHIFT (PAGE_CACHE_SHIFT - SECTOR_SHIFT) | ||
43 | |||
41 | struct block_mount_id { | 44 | struct block_mount_id { |
42 | spinlock_t bm_lock; /* protects list */ | 45 | spinlock_t bm_lock; /* protects list */ |
43 | struct list_head bm_devlist; /* holds pnfs_block_dev */ | 46 | struct list_head bm_devlist; /* holds pnfs_block_dev */ |
@@ -56,8 +59,23 @@ enum exstate4 { | |||
56 | PNFS_BLOCK_NONE_DATA = 3 /* unmapped, it's a hole */ | 59 | PNFS_BLOCK_NONE_DATA = 3 /* unmapped, it's a hole */ |
57 | }; | 60 | }; |
58 | 61 | ||
62 | #define MY_MAX_TAGS (15) /* tag bitnums used must be less than this */ | ||
63 | |||
64 | struct my_tree { | ||
65 | sector_t mtt_step_size; /* Internal sector alignment */ | ||
66 | struct list_head mtt_stub; /* Should be a radix tree */ | ||
67 | }; | ||
68 | |||
59 | struct pnfs_inval_markings { | 69 | struct pnfs_inval_markings { |
60 | /* STUB */ | 70 | spinlock_t im_lock; |
71 | struct my_tree im_tree; /* Sectors that need LAYOUTCOMMIT */ | ||
72 | sector_t im_block_size; /* Server blocksize in sectors */ | ||
73 | }; | ||
74 | |||
75 | struct pnfs_inval_tracking { | ||
76 | struct list_head it_link; | ||
77 | int it_sector; | ||
78 | int it_tags; | ||
61 | }; | 79 | }; |
62 | 80 | ||
63 | /* sector_t fields are all in 512-byte sectors */ | 81 | /* sector_t fields are all in 512-byte sectors */ |
@@ -76,7 +94,11 @@ struct pnfs_block_extent { | |||
76 | static inline void | 94 | static inline void |
77 | BL_INIT_INVAL_MARKS(struct pnfs_inval_markings *marks, sector_t blocksize) | 95 | BL_INIT_INVAL_MARKS(struct pnfs_inval_markings *marks, sector_t blocksize) |
78 | { | 96 | { |
79 | /* STUB */ | 97 | spin_lock_init(&marks->im_lock); |
98 | INIT_LIST_HEAD(&marks->im_tree.mtt_stub); | ||
99 | marks->im_block_size = blocksize; | ||
100 | marks->im_tree.mtt_step_size = min((sector_t)PAGE_CACHE_SECTORS, | ||
101 | blocksize); | ||
80 | } | 102 | } |
81 | 103 | ||
82 | enum extentclass4 { | 104 | enum extentclass4 { |
@@ -156,8 +178,12 @@ void bl_free_block_dev(struct pnfs_block_dev *bdev); | |||
156 | struct pnfs_block_extent * | 178 | struct pnfs_block_extent * |
157 | bl_find_get_extent(struct pnfs_block_layout *bl, sector_t isect, | 179 | bl_find_get_extent(struct pnfs_block_layout *bl, sector_t isect, |
158 | struct pnfs_block_extent **cow_read); | 180 | struct pnfs_block_extent **cow_read); |
181 | int bl_mark_sectors_init(struct pnfs_inval_markings *marks, | ||
182 | sector_t offset, sector_t length, | ||
183 | sector_t **pages); | ||
159 | void bl_put_extent(struct pnfs_block_extent *be); | 184 | void bl_put_extent(struct pnfs_block_extent *be); |
160 | struct pnfs_block_extent *bl_alloc_extent(void); | 185 | struct pnfs_block_extent *bl_alloc_extent(void); |
186 | int bl_is_sector_init(struct pnfs_inval_markings *marks, sector_t isect); | ||
161 | int bl_add_merge_extent(struct pnfs_block_layout *bl, | 187 | int bl_add_merge_extent(struct pnfs_block_layout *bl, |
162 | struct pnfs_block_extent *new); | 188 | struct pnfs_block_extent *new); |
163 | 189 | ||