OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [fs/] [xfs/] [xfs_rtalloc.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * Copyright (c) 2000-2003 Silicon Graphics, Inc.  All Rights Reserved.
3
 *
4
 * This program is free software; you can redistribute it and/or modify it
5
 * under the terms of version 2 of the GNU General Public License as
6
 * published by the Free Software Foundation.
7
 *
8
 * This program is distributed in the hope that it would be useful, but
9
 * WITHOUT ANY WARRANTY; without even the implied warranty of
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * Further, this software is distributed without any warranty that it is
13
 * free of the rightful claim of any third person regarding infringement
14
 * or the like.  Any license provided herein, whether implied or
15
 * otherwise, applies only to this software file.  Patent licenses, if
16
 * any, provided herein do not apply to combinations of this program with
17
 * other software, or any other product whatsoever.
18
 *
19
 * You should have received a copy of the GNU General Public License along
20
 * with this program; if not, write the Free Software Foundation, Inc., 59
21
 * Temple Place - Suite 330, Boston MA 02111-1307, USA.
22
 *
23
 * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24
 * Mountain View, CA  94043, or:
25
 *
26
 * http://www.sgi.com
27
 *
28
 * For further information regarding this notice, see:
29
 *
30
 * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
31
 */
32
#ifndef __XFS_RTALLOC_H__
33
#define __XFS_RTALLOC_H__
34
 
35
struct xfs_mount;
36
struct xfs_trans;
37
 
38
#define XFS_IS_REALTIME_INODE(ip) ((ip)->i_d.di_flags & XFS_DIFLAG_REALTIME)
39
 
40
/* Min and max rt extent sizes, specified in bytes */
41
#define XFS_MAX_RTEXTSIZE       (1024 * 1024 * 1024)    /* 1GB */
42
#define XFS_DFL_RTEXTSIZE       (64 * 1024)             /* 64KB */
43
#define XFS_MIN_RTEXTSIZE       (4 * 1024)              /* 4KB */
44
 
45
/*
46
 * Constants for bit manipulations.
47
 */
48
#define XFS_NBBYLOG     3               /* log2(NBBY) */
49
#define XFS_WORDLOG     2               /* log2(sizeof(xfs_rtword_t)) */
50
#define XFS_NBWORDLOG   (XFS_NBBYLOG + XFS_WORDLOG)
51
#define XFS_NBWORD      (1 << XFS_NBWORDLOG)
52
#define XFS_WORDMASK    ((1 << XFS_WORDLOG) - 1)
53
 
54
#define XFS_BLOCKSIZE(mp)       ((mp)->m_sb.sb_blocksize)
55
#define XFS_BLOCKMASK(mp)       ((mp)->m_blockmask)
56
#define XFS_BLOCKWSIZE(mp)      ((mp)->m_blockwsize)
57
#define XFS_BLOCKWMASK(mp)      ((mp)->m_blockwmask)
58
 
59
/*
60
 * Summary and bit manipulation macros.
61
 */
62
#define XFS_SUMOFFS(mp,ls,bb)   ((int)((ls) * (mp)->m_sb.sb_rbmblocks + (bb)))
63
#define XFS_SUMOFFSTOBLOCK(mp,s)        \
64
        (((s) * (uint)sizeof(xfs_suminfo_t)) >> (mp)->m_sb.sb_blocklog)
65
#define XFS_SUMPTR(mp,bp,so)    \
66
        ((xfs_suminfo_t *)((char *)XFS_BUF_PTR(bp) + \
67
                (((so) * (uint)sizeof(xfs_suminfo_t)) & XFS_BLOCKMASK(mp))))
68
 
69
#define XFS_BITTOBLOCK(mp,bi)   ((bi) >> (mp)->m_blkbit_log)
70
#define XFS_BLOCKTOBIT(mp,bb)   ((bb) << (mp)->m_blkbit_log)
71
#define XFS_BITTOWORD(mp,bi)    \
72
        ((int)(((bi) >> XFS_NBWORDLOG) & XFS_BLOCKWMASK(mp)))
73
 
74
#define XFS_RTMIN(a,b)  ((a) < (b) ? (a) : (b))
75
#define XFS_RTMAX(a,b)  ((a) > (b) ? (a) : (b))
76
 
77
#define XFS_RTLOBIT(w)  xfs_lowbit32(w)
78
#define XFS_RTHIBIT(w)  xfs_highbit32(w)
79
 
80
#if XFS_BIG_BLKNOS
81
#define XFS_RTBLOCKLOG(b)       xfs_highbit64(b)
82
#else
83
#define XFS_RTBLOCKLOG(b)       xfs_highbit32(b)
84
#endif
85
 
86
 
87
#ifdef __KERNEL__
88
 
89
#ifdef CONFIG_XFS_RT
90
/*
91
 * Function prototypes for exported functions.
92
 */
93
 
94
/*
95
 * Allocate an extent in the realtime subvolume, with the usual allocation
96
 * parameters.  The length units are all in realtime extents, as is the
97
 * result block number.
98
 */
99
int                                     /* error */
100
xfs_rtallocate_extent(
101
        struct xfs_trans        *tp,    /* transaction pointer */
102
        xfs_rtblock_t           bno,    /* starting block number to allocate */
103
        xfs_extlen_t            minlen, /* minimum length to allocate */
104
        xfs_extlen_t            maxlen, /* maximum length to allocate */
105
        xfs_extlen_t            *len,   /* out: actual length allocated */
106
        xfs_alloctype_t         type,   /* allocation type XFS_ALLOCTYPE... */
107
        int                     wasdel, /* was a delayed allocation extent */
108
        xfs_extlen_t            prod,   /* extent product factor */
109
        xfs_rtblock_t           *rtblock); /* out: start block allocated */
110
 
111
/*
112
 * Free an extent in the realtime subvolume.  Length is expressed in
113
 * realtime extents, as is the block number.
114
 */
115
int                                     /* error */
116
xfs_rtfree_extent(
117
        struct xfs_trans        *tp,    /* transaction pointer */
118
        xfs_rtblock_t           bno,    /* starting block number to free */
119
        xfs_extlen_t            len);   /* length of extent freed */
120
 
121
/*
122
 * Initialize realtime fields in the mount structure.
123
 */
124
int                                     /* error */
125
xfs_rtmount_init(
126
        struct xfs_mount        *mp);   /* file system mount structure */
127
 
128
/*
129
 * Get the bitmap and summary inodes into the mount structure
130
 * at mount time.
131
 */
132
int                                     /* error */
133
xfs_rtmount_inodes(
134
        struct xfs_mount        *mp);   /* file system mount structure */
135
 
136
/*
137
 * Pick an extent for allocation at the start of a new realtime file.
138
 * Use the sequence number stored in the atime field of the bitmap inode.
139
 * Translate this to a fraction of the rtextents, and return the product
140
 * of rtextents and the fraction.
141
 * The fraction sequence is 0, 1/2, 1/4, 3/4, 1/8, ..., 7/8, 1/16, ...
142
 */
143
int                                     /* error */
144
xfs_rtpick_extent(
145
        struct xfs_mount        *mp,    /* file system mount point */
146
        struct xfs_trans        *tp,    /* transaction pointer */
147
        xfs_extlen_t            len,    /* allocation length (rtextents) */
148
        xfs_rtblock_t           *pick); /* result rt extent */
149
 
150
/*
151
 * Debug code: print out the value of a range in the bitmap.
152
 */
153
void
154
xfs_rtprint_range(
155
        struct xfs_mount        *mp,    /* file system mount structure */
156
        struct xfs_trans        *tp,    /* transaction pointer */
157
        xfs_rtblock_t           start,  /* starting block to print */
158
        xfs_extlen_t            len);   /* length to print */
159
 
160
/*
161
 * Debug code: print the summary file.
162
 */
163
void
164
xfs_rtprint_summary(
165
        struct xfs_mount        *mp,    /* file system mount structure */
166
        struct xfs_trans        *tp);   /* transaction pointer */
167
 
168
/*
169
 * Grow the realtime area of the filesystem.
170
 */
171
int
172
xfs_growfs_rt(
173
        struct xfs_mount        *mp,    /* file system mount structure */
174
        xfs_growfs_rt_t         *in);   /* user supplied growfs struct */
175
 
176
#else
177
# define xfs_rtallocate_extent(t,b,min,max,l,a,f,p,rb)  (ENOSYS)
178
# define xfs_rtfree_extent(t,b,l)                       (ENOSYS)
179
# define xfs_rtpick_extent(m,t,l,rb)                    (ENOSYS)
180
# define xfs_growfs_rt(mp,in)                           (ENOSYS)
181
# define xfs_rtmount_init(m)    (((mp)->m_sb.sb_rblocks == 0)? 0 : (ENOSYS))
182
# define xfs_rtmount_inodes(m)  (((mp)->m_sb.sb_rblocks == 0)? 0 : (ENOSYS))
183
#endif  /* CONFIG_XFS_RT */
184
 
185
#endif  /* __KERNEL__ */
186
 
187
#endif  /* __XFS_RTALLOC_H__ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.