Auto-update from upstream
[linux-2.6] / fs / xfs / xfs_rw.h
1 /*
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_RW_H__
33 #define __XFS_RW_H__
34
35 struct xfs_buf;
36 struct xfs_inode;
37 struct xfs_mount;
38
39 /*
40  * Maximum count of bmaps used by read and write paths.
41  */
42 #define XFS_MAX_RW_NBMAPS       4
43
44 /*
45  * Counts of readahead buffers to use based on physical memory size.
46  * None of these should be more than XFS_MAX_RW_NBMAPS.
47  */
48 #define XFS_RW_NREADAHEAD_16MB  2
49 #define XFS_RW_NREADAHEAD_32MB  3
50 #define XFS_RW_NREADAHEAD_K32   4
51 #define XFS_RW_NREADAHEAD_K64   4
52
53 /*
54  * Maximum size of a buffer that we\'ll map.  Making this
55  * too big will degrade performance due to the number of
56  * pages which need to be gathered.  Making it too small
57  * will prevent us from doing large I/O\'s to hardware that
58  * needs it.
59  *
60  * This is currently set to 512 KB.
61  */
62 #define XFS_MAX_BMAP_LEN_BB     1024
63 #define XFS_MAX_BMAP_LEN_BYTES  524288
64
65 /*
66  * Convert the given file system block to a disk block.
67  * We have to treat it differently based on whether the
68  * file is a real time file or not, because the bmap code
69  * does.
70  */
71 #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_FSB_TO_DB)
72 xfs_daddr_t xfs_fsb_to_db(struct xfs_inode *ip, xfs_fsblock_t fsb);
73 #define XFS_FSB_TO_DB(ip,fsb)   xfs_fsb_to_db(ip,fsb)
74 #else
75 #define XFS_FSB_TO_DB(ip,fsb) \
76                 (((ip)->i_d.di_flags & XFS_DIFLAG_REALTIME) ? \
77                  (xfs_daddr_t)XFS_FSB_TO_BB((ip)->i_mount, (fsb)) : \
78                  XFS_FSB_TO_DADDR((ip)->i_mount, (fsb)))
79 #endif
80
81 #define XFS_FSB_TO_DB_IO(io,fsb) \
82                 (((io)->io_flags & XFS_IOCORE_RT) ? \
83                  XFS_FSB_TO_BB((io)->io_mount, (fsb)) : \
84                  XFS_FSB_TO_DADDR((io)->io_mount, (fsb)))
85
86 /*
87  * Prototypes for functions in xfs_rw.c.
88  */
89
90 int
91 xfs_write_clear_setuid(
92         struct xfs_inode        *ip);
93
94 int
95 xfs_bwrite(
96         struct xfs_mount        *mp,
97         struct xfs_buf          *bp);
98
99 int
100 xfs_bioerror(
101         struct xfs_buf          *b);
102
103 int
104 xfs_bioerror_relse(
105         struct xfs_buf          *b);
106
107 int
108 xfs_read_buf(
109         struct xfs_mount        *mp,
110         xfs_buftarg_t           *target,
111         xfs_daddr_t             blkno,
112         int                     len,
113         uint                    flags,
114         struct xfs_buf          **bpp);
115
116 void
117 xfs_ioerror_alert(
118         char                    *func,
119         struct xfs_mount        *mp,
120         xfs_buf_t               *bp,
121         xfs_daddr_t             blkno);
122
123
124 /*
125  * Prototypes for functions in xfs_vnodeops.c.
126  */
127
128 int
129 xfs_rwlock(
130         bhv_desc_t              *bdp,
131         vrwlock_t               write_lock);
132
133 void
134 xfs_rwunlock(
135         bhv_desc_t              *bdp,
136         vrwlock_t               write_lock);
137
138 int
139 xfs_change_file_space(
140         bhv_desc_t              *bdp,
141         int                     cmd,
142         xfs_flock64_t           *bf,
143         xfs_off_t               offset,
144         cred_t                  *credp,
145         int                     flags);
146
147 int
148 xfs_set_dmattrs(
149         bhv_desc_t              *bdp,
150         u_int                   evmask,
151         u_int16_t               state,
152         cred_t                  *credp);
153
154 #endif /* __XFS_RW_H__ */