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__ */
155