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
nilfs2
alloc.h
Go to the documentation of this file.
1
/*
2
* alloc.h - persistent object (dat entry/disk inode) allocator/deallocator
3
*
4
* Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
*
20
* Original code was written by Koji Sato <
[email protected]
>.
21
* Two allocators were unified by Ryusuke Konishi <
[email protected]
>,
22
* Amagai Yoshiji <
[email protected]
>.
23
*/
24
25
#ifndef _NILFS_ALLOC_H
26
#define _NILFS_ALLOC_H
27
28
#include <linux/types.h>
29
#include <
linux/buffer_head.h
>
30
#include <linux/fs.h>
31
39
static
inline
unsigned
long
40
nilfs_palloc_entries_per_group(
const
struct
inode
*
inode
)
41
{
42
return
1
UL
<< (inode->
i_blkbits
+ 3
/* log2(8 = CHAR_BITS) */
);
43
}
44
45
int
nilfs_palloc_init_blockgroup
(
struct
inode
*,
unsigned
);
46
int
nilfs_palloc_get_entry_block
(
struct
inode
*,
__u64
,
int
,
47
struct
buffer_head **);
48
void
*
nilfs_palloc_block_get_entry
(
const
struct
inode
*,
__u64
,
49
const
struct
buffer_head *,
void
*);
50
58
struct
nilfs_palloc_req
{
59
__u64
pr_entry_nr
;
60
struct
buffer_head *
pr_desc_bh
;
61
struct
buffer_head *
pr_bitmap_bh
;
62
struct
buffer_head *
pr_entry_bh
;
63
};
64
65
int
nilfs_palloc_prepare_alloc_entry
(
struct
inode
*,
66
struct
nilfs_palloc_req
*);
67
void
nilfs_palloc_commit_alloc_entry
(
struct
inode
*,
68
struct
nilfs_palloc_req
*);
69
void
nilfs_palloc_abort_alloc_entry
(
struct
inode
*,
struct
nilfs_palloc_req
*);
70
void
nilfs_palloc_commit_free_entry
(
struct
inode
*,
struct
nilfs_palloc_req
*);
71
int
nilfs_palloc_prepare_free_entry
(
struct
inode
*,
struct
nilfs_palloc_req
*);
72
void
nilfs_palloc_abort_free_entry
(
struct
inode
*,
struct
nilfs_palloc_req
*);
73
int
nilfs_palloc_freev
(
struct
inode
*,
__u64
*,
size_t
);
74
75
#define nilfs_set_bit_atomic ext2_set_bit_atomic
76
#define nilfs_clear_bit_atomic ext2_clear_bit_atomic
77
#define nilfs_find_next_zero_bit find_next_zero_bit_le
78
84
struct
nilfs_bh_assoc
{
85
unsigned
long
blkoff
;
86
struct
buffer_head *
bh
;
87
};
88
96
struct
nilfs_palloc_cache
{
97
spinlock_t
lock
;
98
struct
nilfs_bh_assoc
prev_desc
;
99
struct
nilfs_bh_assoc
prev_bitmap
;
100
struct
nilfs_bh_assoc
prev_entry
;
101
};
102
103
void
nilfs_palloc_setup_cache
(
struct
inode
*
inode
,
104
struct
nilfs_palloc_cache
*
cache
);
105
void
nilfs_palloc_clear_cache
(
struct
inode
*
inode
);
106
void
nilfs_palloc_destroy_cache
(
struct
inode
*
inode
);
107
108
#endif
/* _NILFS_ALLOC_H */
Generated on Thu Jan 10 2013 14:48:57 for Linux Kernel by
1.8.2