aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/blocklayout/blocklayout.h
diff options
context:
space:
mode:
authorFred Isaman <iisaman@citi.umich.edu>2011-07-30 20:52:49 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2011-07-31 12:18:17 -0400
commitc1c2a4cd352269f1fb585b4a5c63abe24dd946c6 (patch)
tree0fc7470702b0fc3e7d156ac49285ec58de797fa3 /fs/nfs/blocklayout/blocklayout.h
parent6d742ba538f98164f3c5e05cdcadb4ec6ddf504f (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.h30
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
41struct block_mount_id { 44struct 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
64struct my_tree {
65 sector_t mtt_step_size; /* Internal sector alignment */
66 struct list_head mtt_stub; /* Should be a radix tree */
67};
68
59struct pnfs_inval_markings { 69struct 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
75struct 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 {
76static inline void 94static inline void
77BL_INIT_INVAL_MARKS(struct pnfs_inval_markings *marks, sector_t blocksize) 95BL_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
82enum extentclass4 { 104enum extentclass4 {
@@ -156,8 +178,12 @@ void bl_free_block_dev(struct pnfs_block_dev *bdev);
156struct pnfs_block_extent * 178struct pnfs_block_extent *
157bl_find_get_extent(struct pnfs_block_layout *bl, sector_t isect, 179bl_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);
181int bl_mark_sectors_init(struct pnfs_inval_markings *marks,
182 sector_t offset, sector_t length,
183 sector_t **pages);
159void bl_put_extent(struct pnfs_block_extent *be); 184void bl_put_extent(struct pnfs_block_extent *be);
160struct pnfs_block_extent *bl_alloc_extent(void); 185struct pnfs_block_extent *bl_alloc_extent(void);
186int bl_is_sector_init(struct pnfs_inval_markings *marks, sector_t isect);
161int bl_add_merge_extent(struct pnfs_block_layout *bl, 187int bl_add_merge_extent(struct pnfs_block_layout *bl,
162 struct pnfs_block_extent *new); 188 struct pnfs_block_extent *new);
163 189