Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
ocfs2
refcounttree.h
Go to the documentation of this file.
1
/* -*- mode: c; c-basic-offset: 8; -*-
2
* vim: noexpandtab sw=8 ts=8 sts=0:
3
*
4
* refcounttree.h
5
*
6
* Copyright (C) 2009 Oracle. All rights reserved.
7
*
8
* This program is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU General Public
10
* License version 2 as published by the Free Software Foundation.
11
*
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* General Public License for more details.
16
*/
17
#ifndef OCFS2_REFCOUNTTREE_H
18
#define OCFS2_REFCOUNTTREE_H
19
20
struct
ocfs2_refcount_tree
{
21
struct
rb_node
rf_node
;
22
u64
rf_blkno
;
23
u32
rf_generation
;
24
struct
kref
rf_getcnt
;
25
struct
rw_semaphore
rf_sem
;
26
struct
ocfs2_lock_res
rf_lockres
;
27
int
rf_removed
;
28
29
/* the following 4 fields are used by caching_info. */
30
spinlock_t
rf_lock
;
31
struct
ocfs2_caching_info
rf_ci
;
32
struct
mutex
rf_io_mutex
;
33
struct
super_block
*
rf_sb
;
34
};
35
36
void
ocfs2_purge_refcount_trees
(
struct
ocfs2_super
*osb);
37
int
ocfs2_lock_refcount_tree
(
struct
ocfs2_super
*osb,
u64
ref_blkno,
int
rw
,
38
struct
ocfs2_refcount_tree
**
tree
,
39
struct
buffer_head **ref_bh);
40
void
ocfs2_unlock_refcount_tree
(
struct
ocfs2_super
*osb,
41
struct
ocfs2_refcount_tree
*
tree
,
42
int
rw
);
43
44
int
ocfs2_decrease_refcount
(
struct
inode
*
inode
,
45
handle_t *
handle
,
u32
cpos,
u32
len,
46
struct
ocfs2_alloc_context
*meta_ac,
47
struct
ocfs2_cached_dealloc_ctxt
*dealloc,
48
int
delete
);
49
int
ocfs2_prepare_refcount_change_for_del
(
struct
inode
*
inode
,
50
u64
refcount_loc,
51
u64
phys_blkno,
52
u32
clusters,
53
int
*credits,
54
int
*ref_blocks);
55
int
ocfs2_refcount_cow
(
struct
inode
*
inode
,
56
struct
file
*filep,
struct
buffer_head *di_bh,
57
u32
cpos,
u32
write_len,
u32
max_cpos);
58
59
typedef
int
(
ocfs2_post_refcount_func
)(
struct
inode
*
inode
,
60
handle_t *
handle
,
61
void
*para);
62
/*
63
* Some refcount caller need to do more work after we modify the data b-tree
64
* during refcount operation(including CoW and add refcount flag), and make the
65
* transaction complete. So it must give us this structure so that we can do it
66
* within our transaction.
67
*
68
*/
69
struct
ocfs2_post_refcount
{
70
int
credits
;
/* credits it need for journal. */
71
ocfs2_post_refcount_func
*
func
;
/* real function. */
72
void
*
para
;
73
};
74
75
int
ocfs2_refcounted_xattr_delete_need
(
struct
inode *inode,
76
struct
ocfs2_caching_info
*ref_ci,
77
struct
buffer_head *ref_root_bh,
78
struct
ocfs2_xattr_value_root
*
xv
,
79
int
*meta_add,
int
*credits);
80
int
ocfs2_refcount_cow_xattr
(
struct
inode *inode,
81
struct
ocfs2_dinode
*di,
82
struct
ocfs2_xattr_value_buf
*vb,
83
struct
ocfs2_refcount_tree
*ref_tree,
84
struct
buffer_head *ref_root_bh,
85
u32
cpos,
u32
write_len,
86
struct
ocfs2_post_refcount
*
post
);
87
int
ocfs2_duplicate_clusters_by_page
(handle_t *
handle
,
88
struct
file
*
file
,
89
u32
cpos,
u32
old_cluster,
90
u32
new_cluster,
u32
new_len);
91
int
ocfs2_duplicate_clusters_by_jbd
(handle_t *
handle
,
92
struct
file
*
file
,
93
u32
cpos,
u32
old_cluster,
94
u32
new_cluster,
u32
new_len);
95
int
ocfs2_cow_sync_writeback
(
struct
super_block
*
sb
,
96
struct
inode *inode,
97
u32
cpos,
u32
num_clusters);
98
int
ocfs2_add_refcount_flag
(
struct
inode *inode,
99
struct
ocfs2_extent_tree
*data_et,
100
struct
ocfs2_caching_info
*ref_ci,
101
struct
buffer_head *ref_root_bh,
102
u32
cpos,
u32
p_cluster,
u32
num_clusters,
103
struct
ocfs2_cached_dealloc_ctxt
*dealloc,
104
struct
ocfs2_post_refcount
*
post
);
105
int
ocfs2_remove_refcount_tree
(
struct
inode *inode,
struct
buffer_head *di_bh);
106
int
ocfs2_try_remove_refcount_tree
(
struct
inode *inode,
107
struct
buffer_head *di_bh);
108
int
ocfs2_increase_refcount
(handle_t *
handle
,
109
struct
ocfs2_caching_info
*ci,
110
struct
buffer_head *ref_root_bh,
111
u64
cpos,
u32
len,
112
struct
ocfs2_alloc_context
*meta_ac,
113
struct
ocfs2_cached_dealloc_ctxt
*dealloc);
114
int
ocfs2_reflink_ioctl
(
struct
inode *inode,
115
const
char
__user *oldname,
116
const
char
__user *newname,
117
bool
preserve);
118
#endif
/* OCFS2_REFCOUNTTREE_H */
Generated on Thu Jan 10 2013 14:49:34 for Linux Kernel by
1.8.2