xref: /openbmc/linux/fs/afs/file.c (revision 8bd1369b)
1 /* AFS filesystem file handling
2  *
3  * Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells (dhowells@redhat.com)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version
9  * 2 of the License, or (at your option) any later version.
10  */
11 
12 #include <linux/kernel.h>
13 #include <linux/module.h>
14 #include <linux/init.h>
15 #include <linux/fs.h>
16 #include <linux/pagemap.h>
17 #include <linux/writeback.h>
18 #include <linux/gfp.h>
19 #include <linux/task_io_accounting_ops.h>
20 #include "internal.h"
21 
22 static int afs_file_mmap(struct file *file, struct vm_area_struct *vma);
23 static int afs_readpage(struct file *file, struct page *page);
24 static void afs_invalidatepage(struct page *page, unsigned int offset,
25 			       unsigned int length);
26 static int afs_releasepage(struct page *page, gfp_t gfp_flags);
27 
28 static int afs_readpages(struct file *filp, struct address_space *mapping,
29 			 struct list_head *pages, unsigned nr_pages);
30 
31 const struct file_operations afs_file_operations = {
32 	.open		= afs_open,
33 	.release	= afs_release,
34 	.llseek		= generic_file_llseek,
35 	.read_iter	= generic_file_read_iter,
36 	.write_iter	= afs_file_write,
37 	.mmap		= afs_file_mmap,
38 	.splice_read	= generic_file_splice_read,
39 	.fsync		= afs_fsync,
40 	.lock		= afs_lock,
41 	.flock		= afs_flock,
42 };
43 
44 const struct inode_operations afs_file_inode_operations = {
45 	.getattr	= afs_getattr,
46 	.setattr	= afs_setattr,
47 	.permission	= afs_permission,
48 	.listxattr	= afs_listxattr,
49 };
50 
51 const struct address_space_operations afs_fs_aops = {
52 	.readpage	= afs_readpage,
53 	.readpages	= afs_readpages,
54 	.set_page_dirty	= afs_set_page_dirty,
55 	.launder_page	= afs_launder_page,
56 	.releasepage	= afs_releasepage,
57 	.invalidatepage	= afs_invalidatepage,
58 	.write_begin	= afs_write_begin,
59 	.write_end	= afs_write_end,
60 	.writepage	= afs_writepage,
61 	.writepages	= afs_writepages,
62 };
63 
64 static const struct vm_operations_struct afs_vm_ops = {
65 	.fault		= filemap_fault,
66 	.map_pages	= filemap_map_pages,
67 	.page_mkwrite	= afs_page_mkwrite,
68 };
69 
70 /*
71  * Discard a pin on a writeback key.
72  */
73 void afs_put_wb_key(struct afs_wb_key *wbk)
74 {
75 	if (refcount_dec_and_test(&wbk->usage)) {
76 		key_put(wbk->key);
77 		kfree(wbk);
78 	}
79 }
80 
81 /*
82  * Cache key for writeback.
83  */
84 int afs_cache_wb_key(struct afs_vnode *vnode, struct afs_file *af)
85 {
86 	struct afs_wb_key *wbk, *p;
87 
88 	wbk = kzalloc(sizeof(struct afs_wb_key), GFP_KERNEL);
89 	if (!wbk)
90 		return -ENOMEM;
91 	refcount_set(&wbk->usage, 2);
92 	wbk->key = af->key;
93 
94 	spin_lock(&vnode->wb_lock);
95 	list_for_each_entry(p, &vnode->wb_keys, vnode_link) {
96 		if (p->key == wbk->key)
97 			goto found;
98 	}
99 
100 	key_get(wbk->key);
101 	list_add_tail(&wbk->vnode_link, &vnode->wb_keys);
102 	spin_unlock(&vnode->wb_lock);
103 	af->wb = wbk;
104 	return 0;
105 
106 found:
107 	refcount_inc(&p->usage);
108 	spin_unlock(&vnode->wb_lock);
109 	af->wb = p;
110 	kfree(wbk);
111 	return 0;
112 }
113 
114 /*
115  * open an AFS file or directory and attach a key to it
116  */
117 int afs_open(struct inode *inode, struct file *file)
118 {
119 	struct afs_vnode *vnode = AFS_FS_I(inode);
120 	struct afs_file *af;
121 	struct key *key;
122 	int ret;
123 
124 	_enter("{%x:%u},", vnode->fid.vid, vnode->fid.vnode);
125 
126 	key = afs_request_key(vnode->volume->cell);
127 	if (IS_ERR(key)) {
128 		ret = PTR_ERR(key);
129 		goto error;
130 	}
131 
132 	af = kzalloc(sizeof(*af), GFP_KERNEL);
133 	if (!af) {
134 		ret = -ENOMEM;
135 		goto error_key;
136 	}
137 	af->key = key;
138 
139 	ret = afs_validate(vnode, key);
140 	if (ret < 0)
141 		goto error_af;
142 
143 	if (file->f_mode & FMODE_WRITE) {
144 		ret = afs_cache_wb_key(vnode, af);
145 		if (ret < 0)
146 			goto error_af;
147 	}
148 
149 	if (file->f_flags & O_TRUNC)
150 		set_bit(AFS_VNODE_NEW_CONTENT, &vnode->flags);
151 
152 	file->private_data = af;
153 	_leave(" = 0");
154 	return 0;
155 
156 error_af:
157 	kfree(af);
158 error_key:
159 	key_put(key);
160 error:
161 	_leave(" = %d", ret);
162 	return ret;
163 }
164 
165 /*
166  * release an AFS file or directory and discard its key
167  */
168 int afs_release(struct inode *inode, struct file *file)
169 {
170 	struct afs_vnode *vnode = AFS_FS_I(inode);
171 	struct afs_file *af = file->private_data;
172 
173 	_enter("{%x:%u},", vnode->fid.vid, vnode->fid.vnode);
174 
175 	if ((file->f_mode & FMODE_WRITE))
176 		return vfs_fsync(file, 0);
177 
178 	file->private_data = NULL;
179 	if (af->wb)
180 		afs_put_wb_key(af->wb);
181 	key_put(af->key);
182 	kfree(af);
183 	afs_prune_wb_keys(vnode);
184 	_leave(" = 0");
185 	return 0;
186 }
187 
188 /*
189  * Dispose of a ref to a read record.
190  */
191 void afs_put_read(struct afs_read *req)
192 {
193 	int i;
194 
195 	if (refcount_dec_and_test(&req->usage)) {
196 		for (i = 0; i < req->nr_pages; i++)
197 			if (req->pages[i])
198 				put_page(req->pages[i]);
199 		if (req->pages != req->array)
200 			kfree(req->pages);
201 		kfree(req);
202 	}
203 }
204 
205 #ifdef CONFIG_AFS_FSCACHE
206 /*
207  * deal with notification that a page was read from the cache
208  */
209 static void afs_file_readpage_read_complete(struct page *page,
210 					    void *data,
211 					    int error)
212 {
213 	_enter("%p,%p,%d", page, data, error);
214 
215 	/* if the read completes with an error, we just unlock the page and let
216 	 * the VM reissue the readpage */
217 	if (!error)
218 		SetPageUptodate(page);
219 	unlock_page(page);
220 }
221 #endif
222 
223 /*
224  * Fetch file data from the volume.
225  */
226 int afs_fetch_data(struct afs_vnode *vnode, struct key *key, struct afs_read *desc)
227 {
228 	struct afs_fs_cursor fc;
229 	int ret;
230 
231 	_enter("%s{%x:%u.%u},%x,,,",
232 	       vnode->volume->name,
233 	       vnode->fid.vid,
234 	       vnode->fid.vnode,
235 	       vnode->fid.unique,
236 	       key_serial(key));
237 
238 	ret = -ERESTARTSYS;
239 	if (afs_begin_vnode_operation(&fc, vnode, key)) {
240 		while (afs_select_fileserver(&fc)) {
241 			fc.cb_break = afs_calc_vnode_cb_break(vnode);
242 			afs_fs_fetch_data(&fc, desc);
243 		}
244 
245 		afs_check_for_remote_deletion(&fc, fc.vnode);
246 		afs_vnode_commit_status(&fc, vnode, fc.cb_break);
247 		ret = afs_end_vnode_operation(&fc);
248 	}
249 
250 	if (ret == 0) {
251 		afs_stat_v(vnode, n_fetches);
252 		atomic_long_add(desc->actual_len,
253 				&afs_v2net(vnode)->n_fetch_bytes);
254 	}
255 
256 	_leave(" = %d", ret);
257 	return ret;
258 }
259 
260 /*
261  * read page from file, directory or symlink, given a key to use
262  */
263 int afs_page_filler(void *data, struct page *page)
264 {
265 	struct inode *inode = page->mapping->host;
266 	struct afs_vnode *vnode = AFS_FS_I(inode);
267 	struct afs_read *req;
268 	struct key *key = data;
269 	int ret;
270 
271 	_enter("{%x},{%lu},{%lu}", key_serial(key), inode->i_ino, page->index);
272 
273 	BUG_ON(!PageLocked(page));
274 
275 	ret = -ESTALE;
276 	if (test_bit(AFS_VNODE_DELETED, &vnode->flags))
277 		goto error;
278 
279 	/* is it cached? */
280 #ifdef CONFIG_AFS_FSCACHE
281 	ret = fscache_read_or_alloc_page(vnode->cache,
282 					 page,
283 					 afs_file_readpage_read_complete,
284 					 NULL,
285 					 GFP_KERNEL);
286 #else
287 	ret = -ENOBUFS;
288 #endif
289 	switch (ret) {
290 		/* read BIO submitted (page in cache) */
291 	case 0:
292 		break;
293 
294 		/* page not yet cached */
295 	case -ENODATA:
296 		_debug("cache said ENODATA");
297 		goto go_on;
298 
299 		/* page will not be cached */
300 	case -ENOBUFS:
301 		_debug("cache said ENOBUFS");
302 	default:
303 	go_on:
304 		req = kzalloc(sizeof(struct afs_read) + sizeof(struct page *),
305 			      GFP_KERNEL);
306 		if (!req)
307 			goto enomem;
308 
309 		/* We request a full page.  If the page is a partial one at the
310 		 * end of the file, the server will return a short read and the
311 		 * unmarshalling code will clear the unfilled space.
312 		 */
313 		refcount_set(&req->usage, 1);
314 		req->pos = (loff_t)page->index << PAGE_SHIFT;
315 		req->len = PAGE_SIZE;
316 		req->nr_pages = 1;
317 		req->pages = req->array;
318 		req->pages[0] = page;
319 		get_page(page);
320 
321 		/* read the contents of the file from the server into the
322 		 * page */
323 		ret = afs_fetch_data(vnode, key, req);
324 		afs_put_read(req);
325 
326 		if (ret < 0) {
327 			if (ret == -ENOENT) {
328 				_debug("got NOENT from server"
329 				       " - marking file deleted and stale");
330 				set_bit(AFS_VNODE_DELETED, &vnode->flags);
331 				ret = -ESTALE;
332 			}
333 
334 #ifdef CONFIG_AFS_FSCACHE
335 			fscache_uncache_page(vnode->cache, page);
336 #endif
337 			BUG_ON(PageFsCache(page));
338 
339 			if (ret == -EINTR ||
340 			    ret == -ENOMEM ||
341 			    ret == -ERESTARTSYS ||
342 			    ret == -EAGAIN)
343 				goto error;
344 			goto io_error;
345 		}
346 
347 		SetPageUptodate(page);
348 
349 		/* send the page to the cache */
350 #ifdef CONFIG_AFS_FSCACHE
351 		if (PageFsCache(page) &&
352 		    fscache_write_page(vnode->cache, page, vnode->status.size,
353 				       GFP_KERNEL) != 0) {
354 			fscache_uncache_page(vnode->cache, page);
355 			BUG_ON(PageFsCache(page));
356 		}
357 #endif
358 		unlock_page(page);
359 	}
360 
361 	_leave(" = 0");
362 	return 0;
363 
364 io_error:
365 	SetPageError(page);
366 	goto error;
367 enomem:
368 	ret = -ENOMEM;
369 error:
370 	unlock_page(page);
371 	_leave(" = %d", ret);
372 	return ret;
373 }
374 
375 /*
376  * read page from file, directory or symlink, given a file to nominate the key
377  * to be used
378  */
379 static int afs_readpage(struct file *file, struct page *page)
380 {
381 	struct key *key;
382 	int ret;
383 
384 	if (file) {
385 		key = afs_file_key(file);
386 		ASSERT(key != NULL);
387 		ret = afs_page_filler(key, page);
388 	} else {
389 		struct inode *inode = page->mapping->host;
390 		key = afs_request_key(AFS_FS_S(inode->i_sb)->cell);
391 		if (IS_ERR(key)) {
392 			ret = PTR_ERR(key);
393 		} else {
394 			ret = afs_page_filler(key, page);
395 			key_put(key);
396 		}
397 	}
398 	return ret;
399 }
400 
401 /*
402  * Make pages available as they're filled.
403  */
404 static void afs_readpages_page_done(struct afs_call *call, struct afs_read *req)
405 {
406 #ifdef CONFIG_AFS_FSCACHE
407 	struct afs_vnode *vnode = call->reply[0];
408 #endif
409 	struct page *page = req->pages[req->index];
410 
411 	req->pages[req->index] = NULL;
412 	SetPageUptodate(page);
413 
414 	/* send the page to the cache */
415 #ifdef CONFIG_AFS_FSCACHE
416 	if (PageFsCache(page) &&
417 	    fscache_write_page(vnode->cache, page, vnode->status.size,
418 			       GFP_KERNEL) != 0) {
419 		fscache_uncache_page(vnode->cache, page);
420 		BUG_ON(PageFsCache(page));
421 	}
422 #endif
423 	unlock_page(page);
424 	put_page(page);
425 }
426 
427 /*
428  * Read a contiguous set of pages.
429  */
430 static int afs_readpages_one(struct file *file, struct address_space *mapping,
431 			     struct list_head *pages)
432 {
433 	struct afs_vnode *vnode = AFS_FS_I(mapping->host);
434 	struct afs_read *req;
435 	struct list_head *p;
436 	struct page *first, *page;
437 	struct key *key = afs_file_key(file);
438 	pgoff_t index;
439 	int ret, n, i;
440 
441 	/* Count the number of contiguous pages at the front of the list.  Note
442 	 * that the list goes prev-wards rather than next-wards.
443 	 */
444 	first = list_entry(pages->prev, struct page, lru);
445 	index = first->index + 1;
446 	n = 1;
447 	for (p = first->lru.prev; p != pages; p = p->prev) {
448 		page = list_entry(p, struct page, lru);
449 		if (page->index != index)
450 			break;
451 		index++;
452 		n++;
453 	}
454 
455 	req = kzalloc(sizeof(struct afs_read) + sizeof(struct page *) * n,
456 		      GFP_NOFS);
457 	if (!req)
458 		return -ENOMEM;
459 
460 	refcount_set(&req->usage, 1);
461 	req->page_done = afs_readpages_page_done;
462 	req->pos = first->index;
463 	req->pos <<= PAGE_SHIFT;
464 	req->pages = req->array;
465 
466 	/* Transfer the pages to the request.  We add them in until one fails
467 	 * to add to the LRU and then we stop (as that'll make a hole in the
468 	 * contiguous run.
469 	 *
470 	 * Note that it's possible for the file size to change whilst we're
471 	 * doing this, but we rely on the server returning less than we asked
472 	 * for if the file shrank.  We also rely on this to deal with a partial
473 	 * page at the end of the file.
474 	 */
475 	do {
476 		page = list_entry(pages->prev, struct page, lru);
477 		list_del(&page->lru);
478 		index = page->index;
479 		if (add_to_page_cache_lru(page, mapping, index,
480 					  readahead_gfp_mask(mapping))) {
481 #ifdef CONFIG_AFS_FSCACHE
482 			fscache_uncache_page(vnode->cache, page);
483 #endif
484 			put_page(page);
485 			break;
486 		}
487 
488 		req->pages[req->nr_pages++] = page;
489 		req->len += PAGE_SIZE;
490 	} while (req->nr_pages < n);
491 
492 	if (req->nr_pages == 0) {
493 		kfree(req);
494 		return 0;
495 	}
496 
497 	ret = afs_fetch_data(vnode, key, req);
498 	if (ret < 0)
499 		goto error;
500 
501 	task_io_account_read(PAGE_SIZE * req->nr_pages);
502 	afs_put_read(req);
503 	return 0;
504 
505 error:
506 	if (ret == -ENOENT) {
507 		_debug("got NOENT from server"
508 		       " - marking file deleted and stale");
509 		set_bit(AFS_VNODE_DELETED, &vnode->flags);
510 		ret = -ESTALE;
511 	}
512 
513 	for (i = 0; i < req->nr_pages; i++) {
514 		page = req->pages[i];
515 		if (page) {
516 #ifdef CONFIG_AFS_FSCACHE
517 			fscache_uncache_page(vnode->cache, page);
518 #endif
519 			SetPageError(page);
520 			unlock_page(page);
521 		}
522 	}
523 
524 	afs_put_read(req);
525 	return ret;
526 }
527 
528 /*
529  * read a set of pages
530  */
531 static int afs_readpages(struct file *file, struct address_space *mapping,
532 			 struct list_head *pages, unsigned nr_pages)
533 {
534 	struct key *key = afs_file_key(file);
535 	struct afs_vnode *vnode;
536 	int ret = 0;
537 
538 	_enter("{%d},{%lu},,%d",
539 	       key_serial(key), mapping->host->i_ino, nr_pages);
540 
541 	ASSERT(key != NULL);
542 
543 	vnode = AFS_FS_I(mapping->host);
544 	if (test_bit(AFS_VNODE_DELETED, &vnode->flags)) {
545 		_leave(" = -ESTALE");
546 		return -ESTALE;
547 	}
548 
549 	/* attempt to read as many of the pages as possible */
550 #ifdef CONFIG_AFS_FSCACHE
551 	ret = fscache_read_or_alloc_pages(vnode->cache,
552 					  mapping,
553 					  pages,
554 					  &nr_pages,
555 					  afs_file_readpage_read_complete,
556 					  NULL,
557 					  mapping_gfp_mask(mapping));
558 #else
559 	ret = -ENOBUFS;
560 #endif
561 
562 	switch (ret) {
563 		/* all pages are being read from the cache */
564 	case 0:
565 		BUG_ON(!list_empty(pages));
566 		BUG_ON(nr_pages != 0);
567 		_leave(" = 0 [reading all]");
568 		return 0;
569 
570 		/* there were pages that couldn't be read from the cache */
571 	case -ENODATA:
572 	case -ENOBUFS:
573 		break;
574 
575 		/* other error */
576 	default:
577 		_leave(" = %d", ret);
578 		return ret;
579 	}
580 
581 	while (!list_empty(pages)) {
582 		ret = afs_readpages_one(file, mapping, pages);
583 		if (ret < 0)
584 			break;
585 	}
586 
587 	_leave(" = %d [netting]", ret);
588 	return ret;
589 }
590 
591 /*
592  * invalidate part or all of a page
593  * - release a page and clean up its private data if offset is 0 (indicating
594  *   the entire page)
595  */
596 static void afs_invalidatepage(struct page *page, unsigned int offset,
597 			       unsigned int length)
598 {
599 	struct afs_vnode *vnode = AFS_FS_I(page->mapping->host);
600 	unsigned long priv;
601 
602 	_enter("{%lu},%u,%u", page->index, offset, length);
603 
604 	BUG_ON(!PageLocked(page));
605 
606 	/* we clean up only if the entire page is being invalidated */
607 	if (offset == 0 && length == PAGE_SIZE) {
608 #ifdef CONFIG_AFS_FSCACHE
609 		if (PageFsCache(page)) {
610 			struct afs_vnode *vnode = AFS_FS_I(page->mapping->host);
611 			fscache_wait_on_page_write(vnode->cache, page);
612 			fscache_uncache_page(vnode->cache, page);
613 		}
614 #endif
615 
616 		if (PagePrivate(page)) {
617 			priv = page_private(page);
618 			trace_afs_page_dirty(vnode, tracepoint_string("inval"),
619 					     page->index, priv);
620 			set_page_private(page, 0);
621 			ClearPagePrivate(page);
622 		}
623 	}
624 
625 	_leave("");
626 }
627 
628 /*
629  * release a page and clean up its private state if it's not busy
630  * - return true if the page can now be released, false if not
631  */
632 static int afs_releasepage(struct page *page, gfp_t gfp_flags)
633 {
634 	struct afs_vnode *vnode = AFS_FS_I(page->mapping->host);
635 	unsigned long priv;
636 
637 	_enter("{{%x:%u}[%lu],%lx},%x",
638 	       vnode->fid.vid, vnode->fid.vnode, page->index, page->flags,
639 	       gfp_flags);
640 
641 	/* deny if page is being written to the cache and the caller hasn't
642 	 * elected to wait */
643 #ifdef CONFIG_AFS_FSCACHE
644 	if (!fscache_maybe_release_page(vnode->cache, page, gfp_flags)) {
645 		_leave(" = F [cache busy]");
646 		return 0;
647 	}
648 #endif
649 
650 	if (PagePrivate(page)) {
651 		priv = page_private(page);
652 		trace_afs_page_dirty(vnode, tracepoint_string("rel"),
653 				     page->index, priv);
654 		set_page_private(page, 0);
655 		ClearPagePrivate(page);
656 	}
657 
658 	/* indicate that the page can be released */
659 	_leave(" = T");
660 	return 1;
661 }
662 
663 /*
664  * Handle setting up a memory mapping on an AFS file.
665  */
666 static int afs_file_mmap(struct file *file, struct vm_area_struct *vma)
667 {
668 	int ret;
669 
670 	ret = generic_file_mmap(file, vma);
671 	if (ret == 0)
672 		vma->vm_ops = &afs_vm_ops;
673 	return ret;
674 }
675