aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jbd2/commit.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/jbd2/commit.c')
0 files changed, 0 insertions, 0 deletions
> 2006-03-02 05:54:30 -0500 committer Linus Torvalds <torvalds@g5.osdl.org> 2006-03-02 11:33:07 -0500 [PATCH] v9fs: fix atomic create open' href='/cgit/cgit.cgi/litmus-rt-imx6.git/commit/fs/9p/vfs_file.c?id=6a3124a3946c16159c3faf83e62ffdb5d1134b3a'>6a3124a3946c
bd238fb431f3


e69e7fe5b0c8
bd238fb431f3

dd6102fbd917
bd238fb431f3






9523a841b109
bd238fb431f3


9523a841b109
7549ae3e81cc
9523a841b109

dd6102fbd917
2e4bef41a0f7
6a3124a3946c
e69e7fe5b0c8
bd238fb431f3


e03abc0c963a


60e78d2c993e



e03abc0c963a

6a3124a3946c
e69e7fe5b0c8



ee443996a35c


e69e7fe5b0c8
ee443996a35c
e69e7fe5b0c8





d6f787bceeab
e69e7fe5b0c8
bd238fb431f3
e69e7fe5b0c8

f78233dd44a1
e69e7fe5b0c8


28fd129827b0
fc0ecff69816
e69e7fe5b0c8





fbedadc16e5c
ee443996a35c
e69e7fe5b0c8
fbedadc16e5c
e69e7fe5b0c8



fbedadc16e5c







51a87c552dfd
fbedadc16e5c

































e69e7fe5b0c8
fbedadc16e5c
19cba8abd6ca
e69e7fe5b0c8
bd238fb431f3

e69e7fe5b0c8
ea2e7996fc89
bd238fb431f3
fbedadc16e5c





bd238fb431f3

e69e7fe5b0c8
bd238fb431f3
e69e7fe5b0c8


19cba8abd6ca
ee443996a35c
e69e7fe5b0c8






19cba8abd6ca

e69e7fe5b0c8
dfb0ec2e13a9
bd238fb431f3
dfb0ec2e13a9
9523a841b109
fc0f29612643
637d020a02cd
e69e7fe5b0c8
bd238fb431f3

e69e7fe5b0c8
bd238fb431f3
dfb0ec2e13a9









637d020a02cd
dfb0ec2e13a9







637d020a02cd

60e78d2c993e


dfb0ec2e13a9
637d020a02cd
7549ae3e81cc
9523a841b109

dfb0ec2e13a9



e69e7fe5b0c8

7ea8085910ef
7a4439c406c2




7ea8085910ef
7a4439c406c2







d32b687e2e16
e03abc0c963a






14b8869ff4f0
7a4439c406c2
e03abc0c963a

4b6f5d20b04d
e69e7fe5b0c8





14b8869ff4f0
7a4439c406c2
e69e7fe5b0c8
9b6533c9b331










1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307








                                                                        

                                                                  
















                                                                     
                        


                         
                       
                       
                          

                        

                          
 
                 

                     
                  
 

                                                                








                                                          
                


                                        
 

                                                                       
                                                                         






                                                          
                              


                                             
                                        
                                               

                                            
                                                                            
                                                               
         
 


                                                   


                                                                  



                                                         

         
                 



                                              


                           
  
                                                                    





                                                                           
                                                           
 
                                                                  

                                
                                                              


                                                                          
                                                         
                                                                





                   
                                     
                              
                                       
                                             



                                        







                                                                             
                                                                           

































                                                                            
              
                                                                   
                               
 

                           
 
                                                                            
                                 





                                                                         

                               
 
                   


   
                                    
                               






                                         

                                                            
 
                                
                           
                               
                                                           
                                
                                       
 

                                                                      
 
                                 









                                                     
                                                                        







                                                                               

                                                                  


                                                                        
                                 
                                                                
                                                                      

         



                         

 
                                                           




                              
                                                                          







                                              
                                                                   






                                          
                                           
                                 

  
                                                     





                                      
                                           
                                 
  










                                                          
/*
 *  linux/fs/9p/vfs_file.c
 *
 * This file contians vfs file ops for 9P2000.
 *
 *  Copyright (C) 2004 by Eric Van Hensbergen <ericvh@gmail.com>
 *  Copyright (C) 2002 by Ron Minnich <rminnich@lanl.gov>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2
 *  as published by the Free Software Foundation.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to:
 *  Free Software Foundation
 *  51 Franklin Street, Fifth Floor
 *  Boston, MA  02111-1301  USA
 *
 */

#include <linux/module.h>
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/sched.h>
#include <linux/file.h>
#include <linux/stat.h>
#include <linux/string.h>
#include <linux/inet.h>
#include <linux/list.h>
#include <linux/pagemap.h>
#include <asm/uaccess.h>
#include <linux/idr.h>
#include <net/9p/9p.h>
#include <net/9p/client.h>

#include "v9fs.h"
#include "v9fs_vfs.h"
#include "fid.h"
#include "cache.h"

static const struct file_operations v9fs_cached_file_operations;

/**
 * v9fs_file_open - open a file (or directory)
 * @inode: inode to be opened
 * @file: file being opened
 *
 */

int v9fs_file_open(struct inode *inode, struct file *file)
{
	int err;
	struct v9fs_session_info *v9ses;
	struct p9_fid *fid;
	int omode;

	P9_DPRINTK(P9_DEBUG_VFS, "inode: %p file: %p \n", inode, file);
	v9ses = v9fs_inode2v9ses(inode);
	omode = v9fs_uflags2omode(file->f_flags, v9fs_proto_dotu(v9ses));
	fid = file->private_data;
	if (!fid) {
		fid = v9fs_fid_clone(file->f_path.dentry);
		if (IS_ERR(fid))
			return PTR_ERR(fid);

		err = p9_client_open(fid, omode);
		if (err < 0) {
			p9_client_clunk(fid);
			return err;
		}
		if (omode & P9_OTRUNC) {
			i_size_write(inode, 0);
			inode->i_blocks = 0;
		}
		if ((file->f_flags & O_APPEND) && (!v9fs_proto_dotu(v9ses)))
			generic_file_llseek(file, 0, SEEK_END);
	}

	file->private_data = fid;
	if ((fid->qid.version) && (v9ses->cache)) {
		P9_DPRINTK(P9_DEBUG_VFS, "cached");
		/* enable cached file options */
		if(file->f_op == &v9fs_file_operations)
			file->f_op = &v9fs_cached_file_operations;

#ifdef CONFIG_9P_FSCACHE
		v9fs_cache_inode_set_cookie(inode, file);
#endif
	}

	return 0;
}

/**
 * v9fs_file_lock - lock a file (or directory)
 * @filp: file to be locked
 * @cmd: lock command
 * @fl: file lock structure
 *
 * Bugs: this looks like a local only lock, we should extend into 9P
 *       by using open exclusive
 */

static int v9fs_file_lock(struct file *filp, int cmd, struct file_lock *fl)
{
	int res = 0;
	struct inode *inode = filp->f_path.dentry->d_inode;

	P9_DPRINTK(P9_DEBUG_VFS, "filp: %p lock: %p\n", filp, fl);

	/* No mandatory locks */
	if (__mandatory_lock(inode) && fl->fl_type != F_UNLCK)
		return -ENOLCK;

	if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->fl_type != F_UNLCK) {
		filemap_write_and_wait(inode->i_mapping);
		invalidate_mapping_pages(&inode->i_data, 0, -1);
	}

	return res;
}

/**
 * v9fs_file_readn - read from a file
 * @filp: file pointer to read
 * @data: data buffer to read data into
 * @udata: user data buffer to read data into
 * @count: size of buffer
 * @offset: offset at which to read data
 *
 */

ssize_t
v9fs_file_readn(struct file *filp, char *data, char __user *udata, u32 count,
	       u64 offset)
{
	int n, total;
	struct p9_fid *fid = filp->private_data;

	P9_DPRINTK(P9_DEBUG_VFS, "fid %d offset %llu count %d\n", fid->fid,
					(long long unsigned) offset, count);

	n = 0;
	total = 0;
	do {
		n = p9_client_read(fid, data, udata, offset, count);
		if (n <= 0)
			break;

		if (data)
			data += n;
		if (udata)
			udata += n;

		offset += n;
		count -= n;
		total += n;
	} while (count > 0 && n == (fid->clnt->msize - P9_IOHDRSZ));

	if (n < 0)
		total = n;

	return total;