file.c 15 KB

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