aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nilfs2/direct.c46
-rw-r--r--fs/nilfs2/direct.h16
2 files changed, 10 insertions, 52 deletions
diff --git a/fs/nilfs2/direct.c b/fs/nilfs2/direct.c
index 2a546c8f784..33467adf094 100644
--- a/fs/nilfs2/direct.c
+++ b/fs/nilfs2/direct.c
@@ -90,8 +90,8 @@ static int nilfs_direct_prepare_insert(struct nilfs_direct *direct,
90{ 90{
91 int ret; 91 int ret;
92 92
93 if (direct->d_ops->dop_find_target != NULL) 93 if (NILFS_BMAP_USE_VBN(&direct->d_bmap))
94 req->bpr_ptr = direct->d_ops->dop_find_target(direct, key); 94 req->bpr_ptr = nilfs_direct_find_target_v(direct, key);
95 ret = nilfs_bmap_prepare_alloc_ptr(&direct->d_bmap, req); 95 ret = nilfs_bmap_prepare_alloc_ptr(&direct->d_bmap, req);
96 if (ret < 0) 96 if (ret < 0)
97 return ret; 97 return ret;
@@ -116,8 +116,8 @@ static void nilfs_direct_commit_insert(struct nilfs_direct *direct,
116 if (!nilfs_bmap_dirty(&direct->d_bmap)) 116 if (!nilfs_bmap_dirty(&direct->d_bmap))
117 nilfs_bmap_set_dirty(&direct->d_bmap); 117 nilfs_bmap_set_dirty(&direct->d_bmap);
118 118
119 if (direct->d_ops->dop_set_target != NULL) 119 if (NILFS_BMAP_USE_VBN(&direct->d_bmap))
120 direct->d_ops->dop_set_target(direct, key, req->bpr_ptr); 120 nilfs_direct_set_target_v(direct, key, req->bpr_ptr);
121} 121}
122 122
123static int nilfs_direct_insert(struct nilfs_bmap *bmap, __u64 key, __u64 ptr) 123static int nilfs_direct_insert(struct nilfs_bmap *bmap, __u64 key, __u64 ptr)
@@ -297,12 +297,10 @@ static int nilfs_direct_propagate_v(struct nilfs_direct *direct,
297static int nilfs_direct_propagate(const struct nilfs_bmap *bmap, 297static int nilfs_direct_propagate(const struct nilfs_bmap *bmap,
298 struct buffer_head *bh) 298 struct buffer_head *bh)
299{ 299{
300 struct nilfs_direct *direct; 300 struct nilfs_direct *direct = (struct nilfs_direct *)bmap;
301 301
302 direct = (struct nilfs_direct *)bmap; 302 return NILFS_BMAP_USE_VBN(bmap) ?
303 return (direct->d_ops->dop_propagate != NULL) ? 303 nilfs_direct_propagate_v(direct, bh) : 0;
304 direct->d_ops->dop_propagate(direct, bh) :
305 0;
306} 304}
307 305
308static int nilfs_direct_assign_v(struct nilfs_direct *direct, 306static int nilfs_direct_assign_v(struct nilfs_direct *direct,
@@ -362,8 +360,9 @@ static int nilfs_direct_assign(struct nilfs_bmap *bmap,
362 return -EINVAL; 360 return -EINVAL;
363 } 361 }
364 362
365 return direct->d_ops->dop_assign(direct, key, ptr, bh, 363 return NILFS_BMAP_USE_VBN(bmap) ?
366 blocknr, binfo); 364 nilfs_direct_assign_v(direct, key, ptr, bh, blocknr, binfo) :
365 nilfs_direct_assign_p(direct, key, ptr, bh, blocknr, binfo);
367} 366}
368 367
369static const struct nilfs_bmap_operations nilfs_direct_ops = { 368static const struct nilfs_bmap_operations nilfs_direct_ops = {
@@ -386,33 +385,8 @@ static const struct nilfs_bmap_operations nilfs_direct_ops = {
386}; 385};
387 386
388 387
389static const struct nilfs_direct_operations nilfs_direct_ops_v = {
390 .dop_find_target = nilfs_direct_find_target_v,
391 .dop_set_target = nilfs_direct_set_target_v,
392 .dop_propagate = nilfs_direct_propagate_v,
393 .dop_assign = nilfs_direct_assign_v,
394};
395
396static const struct nilfs_direct_operations nilfs_direct_ops_p = {
397 .dop_find_target = NULL,
398 .dop_set_target = NULL,
399 .dop_propagate = NULL,
400 .dop_assign = nilfs_direct_assign_p,
401};
402
403int nilfs_direct_init(struct nilfs_bmap *bmap) 388int nilfs_direct_init(struct nilfs_bmap *bmap)
404{ 389{
405 struct nilfs_direct *direct = (struct nilfs_direct *)bmap;
406
407 bmap->b_ops = &nilfs_direct_ops; 390 bmap->b_ops = &nilfs_direct_ops;
408 switch (bmap->b_inode->i_ino) {
409 case NILFS_DAT_INO:
410 direct->d_ops = &nilfs_direct_ops_p;
411 break;
412 default:
413 direct->d_ops = &nilfs_direct_ops_v;
414 break;
415 }
416
417 return 0; 391 return 0;
418} 392}
diff --git a/fs/nilfs2/direct.h b/fs/nilfs2/direct.h
index d645f13b9ae..a5ffd66e25d 100644
--- a/fs/nilfs2/direct.h
+++ b/fs/nilfs2/direct.h
@@ -31,18 +31,6 @@
31struct nilfs_direct; 31struct nilfs_direct;
32 32
33/** 33/**
34 * struct nilfs_direct_operations - direct mapping operation table
35 */
36struct nilfs_direct_operations {
37 __u64 (*dop_find_target)(const struct nilfs_direct *, __u64);
38 void (*dop_set_target)(struct nilfs_direct *, __u64, __u64);
39 int (*dop_propagate)(struct nilfs_direct *, struct buffer_head *);
40 int (*dop_assign)(struct nilfs_direct *, __u64, __u64,
41 struct buffer_head **, sector_t,
42 union nilfs_binfo *);
43};
44
45/**
46 * struct nilfs_direct_node - direct node 34 * struct nilfs_direct_node - direct node
47 * @dn_flags: flags 35 * @dn_flags: flags
48 * @dn_pad: padding 36 * @dn_pad: padding
@@ -55,13 +43,9 @@ struct nilfs_direct_node {
55/** 43/**
56 * struct nilfs_direct - direct mapping 44 * struct nilfs_direct - direct mapping
57 * @d_bmap: bmap structure 45 * @d_bmap: bmap structure
58 * @d_ops: direct mapping operation table
59 */ 46 */
60struct nilfs_direct { 47struct nilfs_direct {
61 struct nilfs_bmap d_bmap; 48 struct nilfs_bmap d_bmap;
62
63 /* direct-mapping-specific members */
64 const struct nilfs_direct_operations *d_ops;
65}; 49};
66 50
67 51