filemap.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:80k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * linux/mm/filemap.c
  3.  *
  4.  * Copyright (C) 1994-1999  Linus Torvalds
  5.  */
  6. /*
  7.  * This file handles the generic file mmap semantics used by
  8.  * most "normal" filesystems (but you don't /have/ to use this:
  9.  * the NFS filesystem used to do this differently, for example)
  10.  */
  11. #include <linux/module.h>
  12. #include <linux/slab.h>
  13. #include <linux/shm.h>
  14. #include <linux/mman.h>
  15. #include <linux/locks.h>
  16. #include <linux/pagemap.h>
  17. #include <linux/swap.h>
  18. #include <linux/smp_lock.h>
  19. #include <linux/blkdev.h>
  20. #include <linux/file.h>
  21. #include <linux/swapctl.h>
  22. #include <linux/init.h>
  23. #include <linux/mm.h>
  24. #include <linux/iobuf.h>
  25. #include <asm/pgalloc.h>
  26. #include <asm/uaccess.h>
  27. #include <asm/mman.h>
  28. #include <linux/highmem.h>
  29. /*
  30.  * Shared mappings implemented 30.11.1994. It's not fully working yet,
  31.  * though.
  32.  *
  33.  * Shared mappings now work. 15.8.1995  Bruno.
  34.  *
  35.  * finished 'unifying' the page and buffer cache and SMP-threaded the
  36.  * page-cache, 21.05.1999, Ingo Molnar <mingo@redhat.com>
  37.  *
  38.  * SMP-threaded pagemap-LRU 1999, Andrea Arcangeli <andrea@suse.de>
  39.  */
  40. atomic_t page_cache_size = ATOMIC_INIT(0);
  41. unsigned int page_hash_bits;
  42. struct page **page_hash_table;
  43. int vm_max_readahead = 31;
  44. int vm_min_readahead = 3;
  45. EXPORT_SYMBOL(vm_max_readahead);
  46. EXPORT_SYMBOL(vm_min_readahead);
  47. spinlock_cacheline_t pagecache_lock_cacheline  = {SPIN_LOCK_UNLOCKED};
  48. /*
  49.  * NOTE: to avoid deadlocking you must never acquire the pagemap_lru_lock 
  50.  * with the pagecache_lock held.
  51.  *
  52.  * Ordering:
  53.  * swap_lock ->
  54.  * pagemap_lru_lock ->
  55.  * pagecache_lock
  56.  */
  57. spinlock_cacheline_t pagemap_lru_lock_cacheline = {SPIN_LOCK_UNLOCKED};
  58. #define CLUSTER_PAGES (1 << page_cluster)
  59. #define CLUSTER_OFFSET(x) (((x) >> page_cluster) << page_cluster)
  60. static void FASTCALL(add_page_to_hash_queue(struct page * page, struct page **p));
  61. static void add_page_to_hash_queue(struct page * page, struct page **p)
  62. {
  63. struct page *next = *p;
  64. *p = page;
  65. page->next_hash = next;
  66. page->pprev_hash = p;
  67. if (next)
  68. next->pprev_hash = &page->next_hash;
  69. if (page->buffers)
  70. PAGE_BUG(page);
  71. atomic_inc(&page_cache_size);
  72. }
  73. static inline void add_page_to_inode_queue(struct address_space *mapping, struct page * page)
  74. {
  75. struct list_head *head = &mapping->clean_pages;
  76. mapping->nrpages++;
  77. list_add(&page->list, head);
  78. page->mapping = mapping;
  79. }
  80. static inline void remove_page_from_inode_queue(struct page * page)
  81. {
  82. struct address_space * mapping = page->mapping;
  83. mapping->nrpages--;
  84. list_del(&page->list);
  85. page->mapping = NULL;
  86. }
  87. static inline void remove_page_from_hash_queue(struct page * page)
  88. {
  89. struct page *next = page->next_hash;
  90. struct page **pprev = page->pprev_hash;
  91. if (next)
  92. next->pprev_hash = pprev;
  93. *pprev = next;
  94. page->pprev_hash = NULL;
  95. atomic_dec(&page_cache_size);
  96. }
  97. /*
  98.  * Remove a page from the page cache and free it. Caller has to make
  99.  * sure the page is locked and that nobody else uses it - or that usage
  100.  * is safe.
  101.  */
  102. void __remove_inode_page(struct page *page)
  103. {
  104. if (PageDirty(page) && !PageSwapCache(page))
  105. BUG();
  106. remove_page_from_inode_queue(page);
  107. remove_page_from_hash_queue(page);
  108. }
  109. void remove_inode_page(struct page *page)
  110. {
  111. if (!PageLocked(page))
  112. PAGE_BUG(page);
  113. spin_lock(&pagecache_lock);
  114. __remove_inode_page(page);
  115. spin_unlock(&pagecache_lock);
  116. }
  117. static inline int sync_page(struct page *page)
  118. {
  119. struct address_space *mapping = page->mapping;
  120. if (mapping && mapping->a_ops && mapping->a_ops->sync_page)
  121. return mapping->a_ops->sync_page(page);
  122. return 0;
  123. }
  124. /*
  125.  * Add a page to the dirty page list.
  126.  */
  127. void set_page_dirty(struct page *page)
  128. {
  129. if (!test_and_set_bit(PG_dirty, &page->flags)) {
  130. struct address_space *mapping = page->mapping;
  131. if (mapping) {
  132. spin_lock(&pagecache_lock);
  133. mapping = page->mapping;
  134. if (mapping) { /* may have been truncated */
  135. list_del(&page->list);
  136. list_add(&page->list, &mapping->dirty_pages);
  137. }
  138. spin_unlock(&pagecache_lock);
  139. if (mapping && mapping->host)
  140. mark_inode_dirty_pages(mapping->host);
  141. }
  142. }
  143. }
  144. /**
  145.  * invalidate_inode_pages - Invalidate all the unlocked pages of one inode
  146.  * @inode: the inode which pages we want to invalidate
  147.  *
  148.  * This function only removes the unlocked pages, if you want to
  149.  * remove all the pages of one inode, you must call truncate_inode_pages.
  150.  */
  151. void invalidate_inode_pages(struct inode * inode)
  152. {
  153. struct list_head *head, *curr;
  154. struct page * page;
  155. head = &inode->i_mapping->clean_pages;
  156. spin_lock(&pagemap_lru_lock);
  157. spin_lock(&pagecache_lock);
  158. curr = head->next;
  159. while (curr != head) {
  160. page = list_entry(curr, struct page, list);
  161. curr = curr->next;
  162. /* We cannot invalidate something in dirty.. */
  163. if (PageDirty(page))
  164. continue;
  165. /* ..or locked */
  166. if (TryLockPage(page))
  167. continue;
  168. if (page->buffers && !try_to_free_buffers(page, 0))
  169. goto unlock;
  170. if (page_count(page) != 1)
  171. goto unlock;
  172. __lru_cache_del(page);
  173. __remove_inode_page(page);
  174. UnlockPage(page);
  175. page_cache_release(page);
  176. continue;
  177. unlock:
  178. UnlockPage(page);
  179. continue;
  180. }
  181. spin_unlock(&pagecache_lock);
  182. spin_unlock(&pagemap_lru_lock);
  183. }
  184. static int do_flushpage(struct page *page, unsigned long offset)
  185. {
  186. int (*flushpage) (struct page *, unsigned long);
  187. flushpage = page->mapping->a_ops->flushpage;
  188. if (flushpage)
  189. return (*flushpage)(page, offset);
  190. return block_flushpage(page, offset);
  191. }
  192. static inline void truncate_partial_page(struct page *page, unsigned partial)
  193. {
  194. memclear_highpage_flush(page, partial, PAGE_CACHE_SIZE-partial);
  195. if (page->buffers)
  196. do_flushpage(page, partial);
  197. }
  198. static void truncate_complete_page(struct page *page)
  199. {
  200. /* Leave it on the LRU if it gets converted into anonymous buffers */
  201. if (!page->buffers || do_flushpage(page, 0))
  202. lru_cache_del(page);
  203. /*
  204.  * We remove the page from the page cache _after_ we have
  205.  * destroyed all buffer-cache references to it. Otherwise some
  206.  * other process might think this inode page is not in the
  207.  * page cache and creates a buffer-cache alias to it causing
  208.  * all sorts of fun problems ...  
  209.  */
  210. ClearPageDirty(page);
  211. ClearPageUptodate(page);
  212. remove_inode_page(page);
  213. page_cache_release(page);
  214. }
  215. static int FASTCALL(truncate_list_pages(struct list_head *, unsigned long, unsigned *));
  216. static int truncate_list_pages(struct list_head *head, unsigned long start, unsigned *partial)
  217. {
  218. struct list_head *curr;
  219. struct page * page;
  220. int unlocked = 0;
  221.  restart:
  222. curr = head->prev;
  223. while (curr != head) {
  224. unsigned long offset;
  225. page = list_entry(curr, struct page, list);
  226. offset = page->index;
  227. /* Is one of the pages to truncate? */
  228. if ((offset >= start) || (*partial && (offset + 1) == start)) {
  229. int failed;
  230. page_cache_get(page);
  231. failed = TryLockPage(page);
  232. list_del(head);
  233. if (!failed)
  234. /* Restart after this page */
  235. list_add_tail(head, curr);
  236. else
  237. /* Restart on this page */
  238. list_add(head, curr);
  239. spin_unlock(&pagecache_lock);
  240. unlocked = 1;
  241.   if (!failed) {
  242. if (*partial && (offset + 1) == start) {
  243. truncate_partial_page(page, *partial);
  244. *partial = 0;
  245. } else 
  246. truncate_complete_page(page);
  247. UnlockPage(page);
  248. } else
  249.   wait_on_page(page);
  250. page_cache_release(page);
  251. if (current->need_resched) {
  252. __set_current_state(TASK_RUNNING);
  253. schedule();
  254. }
  255. spin_lock(&pagecache_lock);
  256. goto restart;
  257. }
  258. curr = curr->prev;
  259. }
  260. return unlocked;
  261. }
  262. /**
  263.  * truncate_inode_pages - truncate *all* the pages from an offset
  264.  * @mapping: mapping to truncate
  265.  * @lstart: offset from with to truncate
  266.  *
  267.  * Truncate the page cache at a set offset, removing the pages
  268.  * that are beyond that offset (and zeroing out partial pages).
  269.  * If any page is locked we wait for it to become unlocked.
  270.  */
  271. void truncate_inode_pages(struct address_space * mapping, loff_t lstart) 
  272. {
  273. unsigned long start = (lstart + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
  274. unsigned partial = lstart & (PAGE_CACHE_SIZE - 1);
  275. int unlocked;
  276. spin_lock(&pagecache_lock);
  277. do {
  278. unlocked = truncate_list_pages(&mapping->clean_pages, start, &partial);
  279. unlocked |= truncate_list_pages(&mapping->dirty_pages, start, &partial);
  280. unlocked |= truncate_list_pages(&mapping->locked_pages, start, &partial);
  281. } while (unlocked);
  282. /* Traversed all three lists without dropping the lock */
  283. spin_unlock(&pagecache_lock);
  284. }
  285. static inline int invalidate_this_page2(struct page * page,
  286. struct list_head * curr,
  287. struct list_head * head)
  288. {
  289. int unlocked = 1;
  290. /*
  291.  * The page is locked and we hold the pagecache_lock as well
  292.  * so both page_count(page) and page->buffers stays constant here.
  293.  */
  294. if (page_count(page) == 1 + !!page->buffers) {
  295. /* Restart after this page */
  296. list_del(head);
  297. list_add_tail(head, curr);
  298. page_cache_get(page);
  299. spin_unlock(&pagecache_lock);
  300. truncate_complete_page(page);
  301. } else {
  302. if (page->buffers) {
  303. /* Restart after this page */
  304. list_del(head);
  305. list_add_tail(head, curr);
  306. page_cache_get(page);
  307. spin_unlock(&pagecache_lock);
  308. block_invalidate_page(page);
  309. } else
  310. unlocked = 0;
  311. ClearPageDirty(page);
  312. ClearPageUptodate(page);
  313. }
  314. return unlocked;
  315. }
  316. static int FASTCALL(invalidate_list_pages2(struct list_head *));
  317. static int invalidate_list_pages2(struct list_head *head)
  318. {
  319. struct list_head *curr;
  320. struct page * page;
  321. int unlocked = 0;
  322.  restart:
  323. curr = head->prev;
  324. while (curr != head) {
  325. page = list_entry(curr, struct page, list);
  326. if (!TryLockPage(page)) {
  327. int __unlocked;
  328. __unlocked = invalidate_this_page2(page, curr, head);
  329. UnlockPage(page);
  330. unlocked |= __unlocked;
  331. if (!__unlocked) {
  332. curr = curr->prev;
  333. continue;
  334. }
  335. } else {
  336. /* Restart on this page */
  337. list_del(head);
  338. list_add(head, curr);
  339. page_cache_get(page);
  340. spin_unlock(&pagecache_lock);
  341. unlocked = 1;
  342. wait_on_page(page);
  343. }
  344. page_cache_release(page);
  345. if (current->need_resched) {
  346. __set_current_state(TASK_RUNNING);
  347. schedule();
  348. }
  349. spin_lock(&pagecache_lock);
  350. goto restart;
  351. }
  352. return unlocked;
  353. }
  354. /**
  355.  * invalidate_inode_pages2 - Clear all the dirty bits around if it can't
  356.  * free the pages because they're mapped.
  357.  * @mapping: the address_space which pages we want to invalidate
  358.  */
  359. void invalidate_inode_pages2(struct address_space * mapping)
  360. {
  361. int unlocked;
  362. spin_lock(&pagecache_lock);
  363. do {
  364. unlocked = invalidate_list_pages2(&mapping->clean_pages);
  365. unlocked |= invalidate_list_pages2(&mapping->dirty_pages);
  366. unlocked |= invalidate_list_pages2(&mapping->locked_pages);
  367. } while (unlocked);
  368. spin_unlock(&pagecache_lock);
  369. }
  370. static inline struct page * __find_page_nolock(struct address_space *mapping, unsigned long offset, struct page *page)
  371. {
  372. goto inside;
  373. for (;;) {
  374. page = page->next_hash;
  375. inside:
  376. if (!page)
  377. goto not_found;
  378. if (page->mapping != mapping)
  379. continue;
  380. if (page->index == offset)
  381. break;
  382. }
  383. not_found:
  384. return page;
  385. }
  386. static int do_buffer_fdatasync(struct list_head *head, unsigned long start, unsigned long end, int (*fn)(struct page *))
  387. {
  388. struct list_head *curr;
  389. struct page *page;
  390. int retval = 0;
  391. spin_lock(&pagecache_lock);
  392. curr = head->next;
  393. while (curr != head) {
  394. page = list_entry(curr, struct page, list);
  395. curr = curr->next;
  396. if (!page->buffers)
  397. continue;
  398. if (page->index >= end)
  399. continue;
  400. if (page->index < start)
  401. continue;
  402. page_cache_get(page);
  403. spin_unlock(&pagecache_lock);
  404. lock_page(page);
  405. /* The buffers could have been free'd while we waited for the page lock */
  406. if (page->buffers)
  407. retval |= fn(page);
  408. UnlockPage(page);
  409. spin_lock(&pagecache_lock);
  410. curr = page->list.next;
  411. page_cache_release(page);
  412. }
  413. spin_unlock(&pagecache_lock);
  414. return retval;
  415. }
  416. /*
  417.  * Two-stage data sync: first start the IO, then go back and
  418.  * collect the information..
  419.  */
  420. int generic_buffer_fdatasync(struct inode *inode, unsigned long start_idx, unsigned long end_idx)
  421. {
  422. int retval;
  423. /* writeout dirty buffers on pages from both clean and dirty lists */
  424. retval = do_buffer_fdatasync(&inode->i_mapping->dirty_pages, start_idx, end_idx, writeout_one_page);
  425. retval |= do_buffer_fdatasync(&inode->i_mapping->clean_pages, start_idx, end_idx, writeout_one_page);
  426. retval |= do_buffer_fdatasync(&inode->i_mapping->locked_pages, start_idx, end_idx, writeout_one_page);
  427. /* now wait for locked buffers on pages from both clean and dirty lists */
  428. retval |= do_buffer_fdatasync(&inode->i_mapping->dirty_pages, start_idx, end_idx, waitfor_one_page);
  429. retval |= do_buffer_fdatasync(&inode->i_mapping->clean_pages, start_idx, end_idx, waitfor_one_page);
  430. retval |= do_buffer_fdatasync(&inode->i_mapping->locked_pages, start_idx, end_idx, waitfor_one_page);
  431. return retval;
  432. }
  433. /*
  434.  * In-memory filesystems have to fail their
  435.  * writepage function - and this has to be
  436.  * worked around in the VM layer..
  437.  *
  438.  * We
  439.  *  - mark the page dirty again (but do NOT
  440.  *    add it back to the inode dirty list, as
  441.  *    that would livelock in fdatasync)
  442.  *  - activate the page so that the page stealer
  443.  *    doesn't try to write it out over and over
  444.  *    again.
  445.  */
  446. int fail_writepage(struct page *page)
  447. {
  448. /* Only activate on memory-pressure, not fsync.. */
  449. if (PageLaunder(page)) {
  450. activate_page(page);
  451. SetPageReferenced(page);
  452. }
  453. /* Set the page dirty again, unlock */
  454. SetPageDirty(page);
  455. UnlockPage(page);
  456. return 0;
  457. }
  458. EXPORT_SYMBOL(fail_writepage);
  459. /**
  460.  *      filemap_fdatasync - walk the list of dirty pages of the given address space
  461.  *      and writepage() all of them.
  462.  * 
  463.  *      @mapping: address space structure to write
  464.  *
  465.  */
  466. int filemap_fdatasync(struct address_space * mapping)
  467. {
  468. int ret = 0;
  469. int (*writepage)(struct page *) = mapping->a_ops->writepage;
  470. spin_lock(&pagecache_lock);
  471.         while (!list_empty(&mapping->dirty_pages)) {
  472. struct page *page = list_entry(mapping->dirty_pages.prev, struct page, list);
  473. list_del(&page->list);
  474. list_add(&page->list, &mapping->locked_pages);
  475. if (!PageDirty(page))
  476. continue;
  477. page_cache_get(page);
  478. spin_unlock(&pagecache_lock);
  479. lock_page(page);
  480. if (PageDirty(page)) {
  481. int err;
  482. ClearPageDirty(page);
  483. err = writepage(page);
  484. if (err && !ret)
  485. ret = err;
  486. } else
  487. UnlockPage(page);
  488. page_cache_release(page);
  489. spin_lock(&pagecache_lock);
  490. }
  491. spin_unlock(&pagecache_lock);
  492. return ret;
  493. }
  494. /**
  495.  *      filemap_fdatawait - walk the list of locked pages of the given address space
  496.  *      and wait for all of them.
  497.  * 
  498.  *      @mapping: address space structure to wait for
  499.  *
  500.  */
  501. int filemap_fdatawait(struct address_space * mapping)
  502. {
  503. int ret = 0;
  504. spin_lock(&pagecache_lock);
  505.         while (!list_empty(&mapping->locked_pages)) {
  506. struct page *page = list_entry(mapping->locked_pages.next, struct page, list);
  507. list_del(&page->list);
  508. list_add(&page->list, &mapping->clean_pages);
  509. if (!PageLocked(page))
  510. continue;
  511. page_cache_get(page);
  512. spin_unlock(&pagecache_lock);
  513. ___wait_on_page(page);
  514. if (PageError(page))
  515. ret = -EIO;
  516. page_cache_release(page);
  517. spin_lock(&pagecache_lock);
  518. }
  519. spin_unlock(&pagecache_lock);
  520. return ret;
  521. }
  522. /*
  523.  * Add a page to the inode page cache.
  524.  *
  525.  * The caller must have locked the page and 
  526.  * set all the page flags correctly..
  527.  */
  528. void add_to_page_cache_locked(struct page * page, struct address_space *mapping, unsigned long index)
  529. {
  530. if (!PageLocked(page))
  531. BUG();
  532. page->index = index;
  533. page_cache_get(page);
  534. spin_lock(&pagecache_lock);
  535. add_page_to_inode_queue(mapping, page);
  536. add_page_to_hash_queue(page, page_hash(mapping, index));
  537. spin_unlock(&pagecache_lock);
  538. lru_cache_add(page);
  539. }
  540. /*
  541.  * This adds a page to the page cache, starting out as locked,
  542.  * owned by us, but unreferenced, not uptodate and with no errors.
  543.  */
  544. static inline void __add_to_page_cache(struct page * page,
  545. struct address_space *mapping, unsigned long offset,
  546. struct page **hash)
  547. {
  548. unsigned long flags;
  549. flags = page->flags & ~(1 << PG_uptodate | 1 << PG_error | 1 << PG_dirty | 1 << PG_referenced | 1 << PG_arch_1 | 1 << PG_checked);
  550. page->flags = flags | (1 << PG_locked);
  551. page_cache_get(page);
  552. page->index = offset;
  553. add_page_to_inode_queue(mapping, page);
  554. add_page_to_hash_queue(page, hash);
  555. }
  556. void add_to_page_cache(struct page * page, struct address_space * mapping, unsigned long offset)
  557. {
  558. spin_lock(&pagecache_lock);
  559. __add_to_page_cache(page, mapping, offset, page_hash(mapping, offset));
  560. spin_unlock(&pagecache_lock);
  561. lru_cache_add(page);
  562. }
  563. int add_to_page_cache_unique(struct page * page,
  564. struct address_space *mapping, unsigned long offset,
  565. struct page **hash)
  566. {
  567. int err;
  568. struct page *alias;
  569. spin_lock(&pagecache_lock);
  570. alias = __find_page_nolock(mapping, offset, *hash);
  571. err = 1;
  572. if (!alias) {
  573. __add_to_page_cache(page,mapping,offset,hash);
  574. err = 0;
  575. }
  576. spin_unlock(&pagecache_lock);
  577. if (!err)
  578. lru_cache_add(page);
  579. return err;
  580. }
  581. /*
  582.  * This adds the requested page to the page cache if it isn't already there,
  583.  * and schedules an I/O to read in its contents from disk.
  584.  */
  585. static int FASTCALL(page_cache_read(struct file * file, unsigned long offset));
  586. static int page_cache_read(struct file * file, unsigned long offset)
  587. {
  588. struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
  589. struct page **hash = page_hash(mapping, offset);
  590. struct page *page; 
  591. spin_lock(&pagecache_lock);
  592. page = __find_page_nolock(mapping, offset, *hash);
  593. spin_unlock(&pagecache_lock);
  594. if (page)
  595. return 0;
  596. page = page_cache_alloc(mapping);
  597. if (!page)
  598. return -ENOMEM;
  599. if (!add_to_page_cache_unique(page, mapping, offset, hash)) {
  600. int error = mapping->a_ops->readpage(file, page);
  601. page_cache_release(page);
  602. return error;
  603. }
  604. /*
  605.  * We arrive here in the unlikely event that someone 
  606.  * raced with us and added our page to the cache first.
  607.  */
  608. page_cache_release(page);
  609. return 0;
  610. }
  611. /*
  612.  * Read in an entire cluster at once.  A cluster is usually a 64k-
  613.  * aligned block that includes the page requested in "offset."
  614.  */
  615. static int FASTCALL(read_cluster_nonblocking(struct file * file, unsigned long offset,
  616.      unsigned long filesize));
  617. static int read_cluster_nonblocking(struct file * file, unsigned long offset,
  618. unsigned long filesize)
  619. {
  620. unsigned long pages = CLUSTER_PAGES;
  621. offset = CLUSTER_OFFSET(offset);
  622. while ((pages-- > 0) && (offset < filesize)) {
  623. int error = page_cache_read(file, offset);
  624. if (error < 0)
  625. return error;
  626. offset ++;
  627. }
  628. return 0;
  629. }
  630. /*
  631.  * Knuth recommends primes in approximately golden ratio to the maximum
  632.  * integer representable by a machine word for multiplicative hashing.
  633.  * Chuck Lever verified the effectiveness of this technique:
  634.  * http://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf
  635.  *
  636.  * These primes are chosen to be bit-sparse, that is operations on
  637.  * them can use shifts and additions instead of multiplications for
  638.  * machines where multiplications are slow.
  639.  */
  640. #if BITS_PER_LONG == 32
  641. /* 2^31 + 2^29 - 2^25 + 2^22 - 2^19 - 2^16 + 1 */
  642. #define GOLDEN_RATIO_PRIME 0x9e370001UL
  643. #elif BITS_PER_LONG == 64
  644. /*  2^63 + 2^61 - 2^57 + 2^54 - 2^51 - 2^18 + 1 */
  645. #define GOLDEN_RATIO_PRIME 0x9e37fffffffc0001UL
  646. #else
  647. #error Define GOLDEN_RATIO_PRIME for your wordsize.
  648. #endif
  649. /*
  650.  * In order to wait for pages to become available there must be
  651.  * waitqueues associated with pages. By using a hash table of
  652.  * waitqueues where the bucket discipline is to maintain all
  653.  * waiters on the same queue and wake all when any of the pages
  654.  * become available, and for the woken contexts to check to be
  655.  * sure the appropriate page became available, this saves space
  656.  * at a cost of "thundering herd" phenomena during rare hash
  657.  * collisions.
  658.  */
  659. static inline wait_queue_head_t *page_waitqueue(struct page *page)
  660. {
  661. const zone_t *zone = page_zone(page);
  662. wait_queue_head_t *wait = zone->wait_table;
  663. unsigned long hash = (unsigned long)page;
  664. #if BITS_PER_LONG == 64
  665. /*  Sigh, gcc can't optimise this alone like it does for 32 bits. */
  666. unsigned long n = hash;
  667. n <<= 18;
  668. hash -= n;
  669. n <<= 33;
  670. hash -= n;
  671. n <<= 3;
  672. hash += n;
  673. n <<= 3;
  674. hash -= n;
  675. n <<= 4;
  676. hash += n;
  677. n <<= 2;
  678. hash += n;
  679. #else
  680. /* On some cpus multiply is faster, on others gcc will do shifts */
  681. hash *= GOLDEN_RATIO_PRIME;
  682. #endif
  683. hash >>= zone->wait_table_shift;
  684. return &wait[hash];
  685. }
  686. /* 
  687.  * Wait for a page to get unlocked.
  688.  *
  689.  * This must be called with the caller "holding" the page,
  690.  * ie with increased "page->count" so that the page won't
  691.  * go away during the wait..
  692.  *
  693.  * The waiting strategy is to get on a waitqueue determined
  694.  * by hashing. Waiters will then collide, and the newly woken
  695.  * task must then determine whether it was woken for the page
  696.  * it really wanted, and go back to sleep on the waitqueue if
  697.  * that wasn't it. With the waitqueue semantics, it never leaves
  698.  * the waitqueue unless it calls, so the loop moves forward one
  699.  * iteration every time there is
  700.  * (1) a collision 
  701.  * and
  702.  * (2) one of the colliding pages is woken
  703.  *
  704.  * This is the thundering herd problem, but it is expected to
  705.  * be very rare due to the few pages that are actually being
  706.  * waited on at any given time and the quality of the hash function.
  707.  */
  708. void ___wait_on_page(struct page *page)
  709. {
  710. wait_queue_head_t *waitqueue = page_waitqueue(page);
  711. struct task_struct *tsk = current;
  712. DECLARE_WAITQUEUE(wait, tsk);
  713. add_wait_queue(waitqueue, &wait);
  714. do {
  715. set_task_state(tsk, TASK_UNINTERRUPTIBLE);
  716. if (!PageLocked(page))
  717. break;
  718. sync_page(page);
  719. schedule();
  720. } while (PageLocked(page));
  721. __set_task_state(tsk, TASK_RUNNING);
  722. remove_wait_queue(waitqueue, &wait);
  723. }
  724. /*
  725.  * unlock_page() is the other half of the story just above
  726.  * __wait_on_page(). Here a couple of quick checks are done
  727.  * and a couple of flags are set on the page, and then all
  728.  * of the waiters for all of the pages in the appropriate
  729.  * wait queue are woken.
  730.  */
  731. void unlock_page(struct page *page)
  732. {
  733. wait_queue_head_t *waitqueue = page_waitqueue(page);
  734. ClearPageLaunder(page);
  735. smp_mb__before_clear_bit();
  736. if (!test_and_clear_bit(PG_locked, &(page)->flags))
  737. BUG();
  738. smp_mb__after_clear_bit(); 
  739. /*
  740.  * Although the default semantics of wake_up() are
  741.  * to wake all, here the specific function is used
  742.  * to make it even more explicit that a number of
  743.  * pages are being waited on here.
  744.  */
  745. if (waitqueue_active(waitqueue))
  746. wake_up_all(waitqueue);
  747. }
  748. /*
  749.  * Get a lock on the page, assuming we need to sleep
  750.  * to get it..
  751.  */
  752. static void __lock_page(struct page *page)
  753. {
  754. wait_queue_head_t *waitqueue = page_waitqueue(page);
  755. struct task_struct *tsk = current;
  756. DECLARE_WAITQUEUE(wait, tsk);
  757. add_wait_queue_exclusive(waitqueue, &wait);
  758. for (;;) {
  759. set_task_state(tsk, TASK_UNINTERRUPTIBLE);
  760. if (PageLocked(page)) {
  761. sync_page(page);
  762. schedule();
  763. }
  764. if (!TryLockPage(page))
  765. break;
  766. }
  767. __set_task_state(tsk, TASK_RUNNING);
  768. remove_wait_queue(waitqueue, &wait);
  769. }
  770. /*
  771.  * Get an exclusive lock on the page, optimistically
  772.  * assuming it's not locked..
  773.  */
  774. void lock_page(struct page *page)
  775. {
  776. if (TryLockPage(page))
  777. __lock_page(page);
  778. }
  779. /*
  780.  * a rather lightweight function, finding and getting a reference to a
  781.  * hashed page atomically.
  782.  */
  783. struct page * __find_get_page(struct address_space *mapping,
  784.       unsigned long offset, struct page **hash)
  785. {
  786. struct page *page;
  787. /*
  788.  * We scan the hash list read-only. Addition to and removal from
  789.  * the hash-list needs a held write-lock.
  790.  */
  791. spin_lock(&pagecache_lock);
  792. page = __find_page_nolock(mapping, offset, *hash);
  793. if (page)
  794. page_cache_get(page);
  795. spin_unlock(&pagecache_lock);
  796. return page;
  797. }
  798. /*
  799.  * Same as above, but trylock it instead of incrementing the count.
  800.  */
  801. struct page *find_trylock_page(struct address_space *mapping, unsigned long offset)
  802. {
  803. struct page *page;
  804. struct page **hash = page_hash(mapping, offset);
  805. spin_lock(&pagecache_lock);
  806. page = __find_page_nolock(mapping, offset, *hash);
  807. if (page) {
  808. if (TryLockPage(page))
  809. page = NULL;
  810. }
  811. spin_unlock(&pagecache_lock);
  812. return page;
  813. }
  814. /*
  815.  * Must be called with the pagecache lock held,
  816.  * will return with it held (but it may be dropped
  817.  * during blocking operations..
  818.  */
  819. static struct page * FASTCALL(__find_lock_page_helper(struct address_space *, unsigned long, struct page *));
  820. static struct page * __find_lock_page_helper(struct address_space *mapping,
  821. unsigned long offset, struct page *hash)
  822. {
  823. struct page *page;
  824. /*
  825.  * We scan the hash list read-only. Addition to and removal from
  826.  * the hash-list needs a held write-lock.
  827.  */
  828. repeat:
  829. page = __find_page_nolock(mapping, offset, hash);
  830. if (page) {
  831. page_cache_get(page);
  832. if (TryLockPage(page)) {
  833. spin_unlock(&pagecache_lock);
  834. lock_page(page);
  835. spin_lock(&pagecache_lock);
  836. /* Has the page been re-allocated while we slept? */
  837. if (page->mapping != mapping || page->index != offset) {
  838. UnlockPage(page);
  839. page_cache_release(page);
  840. goto repeat;
  841. }
  842. }
  843. }
  844. return page;
  845. }
  846. /*
  847.  * Same as the above, but lock the page too, verifying that
  848.  * it's still valid once we own it.
  849.  */
  850. struct page * __find_lock_page (struct address_space *mapping,
  851. unsigned long offset, struct page **hash)
  852. {
  853. struct page *page;
  854. spin_lock(&pagecache_lock);
  855. page = __find_lock_page_helper(mapping, offset, *hash);
  856. spin_unlock(&pagecache_lock);
  857. return page;
  858. }
  859. /*
  860.  * Same as above, but create the page if required..
  861.  */
  862. struct page * find_or_create_page(struct address_space *mapping, unsigned long index, unsigned int gfp_mask)
  863. {
  864. struct page *page;
  865. struct page **hash = page_hash(mapping, index);
  866. spin_lock(&pagecache_lock);
  867. page = __find_lock_page_helper(mapping, index, *hash);
  868. spin_unlock(&pagecache_lock);
  869. if (!page) {
  870. struct page *newpage = alloc_page(gfp_mask);
  871. if (newpage) {
  872. spin_lock(&pagecache_lock);
  873. page = __find_lock_page_helper(mapping, index, *hash);
  874. if (likely(!page)) {
  875. page = newpage;
  876. __add_to_page_cache(page, mapping, index, hash);
  877. newpage = NULL;
  878. }
  879. spin_unlock(&pagecache_lock);
  880. if (newpage == NULL)
  881. lru_cache_add(page);
  882. else 
  883. page_cache_release(newpage);
  884. }
  885. }
  886. return page;
  887. }
  888. /*
  889.  * Same as grab_cache_page, but do not wait if the page is unavailable.
  890.  * This is intended for speculative data generators, where the data can
  891.  * be regenerated if the page couldn't be grabbed.  This routine should
  892.  * be safe to call while holding the lock for another page.
  893.  */
  894. struct page *grab_cache_page_nowait(struct address_space *mapping, unsigned long index)
  895. {
  896. struct page *page, **hash;
  897. hash = page_hash(mapping, index);
  898. page = __find_get_page(mapping, index, hash);
  899. if ( page ) {
  900. if ( !TryLockPage(page) ) {
  901. /* Page found and locked */
  902. /* This test is overly paranoid, but what the heck... */
  903. if ( unlikely(page->mapping != mapping || page->index != index) ) {
  904. /* Someone reallocated this page under us. */
  905. UnlockPage(page);
  906. page_cache_release(page);
  907. return NULL;
  908. } else {
  909. return page;
  910. }
  911. } else {
  912. /* Page locked by someone else */
  913. page_cache_release(page);
  914. return NULL;
  915. }
  916. }
  917. page = page_cache_alloc(mapping);
  918. if ( unlikely(!page) )
  919. return NULL; /* Failed to allocate a page */
  920. if ( unlikely(add_to_page_cache_unique(page, mapping, index, hash)) ) {
  921. /* Someone else grabbed the page already. */
  922. page_cache_release(page);
  923. return NULL;
  924. }
  925. return page;
  926. }
  927. #if 0
  928. #define PROFILE_READAHEAD
  929. #define DEBUG_READAHEAD
  930. #endif
  931. /*
  932.  * Read-ahead profiling information
  933.  * --------------------------------
  934.  * Every PROFILE_MAXREADCOUNT, the following information is written 
  935.  * to the syslog:
  936.  *   Percentage of asynchronous read-ahead.
  937.  *   Average of read-ahead fields context value.
  938.  * If DEBUG_READAHEAD is defined, a snapshot of these fields is written 
  939.  * to the syslog.
  940.  */
  941. #ifdef PROFILE_READAHEAD
  942. #define PROFILE_MAXREADCOUNT 1000
  943. static unsigned long total_reada;
  944. static unsigned long total_async;
  945. static unsigned long total_ramax;
  946. static unsigned long total_ralen;
  947. static unsigned long total_rawin;
  948. static void profile_readahead(int async, struct file *filp)
  949. {
  950. unsigned long flags;
  951. ++total_reada;
  952. if (async)
  953. ++total_async;
  954. total_ramax += filp->f_ramax;
  955. total_ralen += filp->f_ralen;
  956. total_rawin += filp->f_rawin;
  957. if (total_reada > PROFILE_MAXREADCOUNT) {
  958. save_flags(flags);
  959. cli();
  960. if (!(total_reada > PROFILE_MAXREADCOUNT)) {
  961. restore_flags(flags);
  962. return;
  963. }
  964. printk("Readahead average:  max=%ld, len=%ld, win=%ld, async=%ld%%n",
  965. total_ramax/total_reada,
  966. total_ralen/total_reada,
  967. total_rawin/total_reada,
  968. (total_async*100)/total_reada);
  969. #ifdef DEBUG_READAHEAD
  970. printk("Readahead snapshot: max=%ld, len=%ld, win=%ld, raend=%Ldn",
  971. filp->f_ramax, filp->f_ralen, filp->f_rawin, filp->f_raend);
  972. #endif
  973. total_reada = 0;
  974. total_async = 0;
  975. total_ramax = 0;
  976. total_ralen = 0;
  977. total_rawin = 0;
  978. restore_flags(flags);
  979. }
  980. }
  981. #endif  /* defined PROFILE_READAHEAD */
  982. /*
  983.  * Read-ahead context:
  984.  * -------------------
  985.  * The read ahead context fields of the "struct file" are the following:
  986.  * - f_raend : position of the first byte after the last page we tried to
  987.  *        read ahead.
  988.  * - f_ramax : current read-ahead maximum size.
  989.  * - f_ralen : length of the current IO read block we tried to read-ahead.
  990.  * - f_rawin : length of the current read-ahead window.
  991.  * if last read-ahead was synchronous then
  992.  * f_rawin = f_ralen
  993.  * otherwise (was asynchronous)
  994.  * f_rawin = previous value of f_ralen + f_ralen
  995.  *
  996.  * Read-ahead limits:
  997.  * ------------------
  998.  * MIN_READAHEAD   : minimum read-ahead size when read-ahead.
  999.  * MAX_READAHEAD   : maximum read-ahead size when read-ahead.
  1000.  *
  1001.  * Synchronous read-ahead benefits:
  1002.  * --------------------------------
  1003.  * Using reasonable IO xfer length from peripheral devices increase system 
  1004.  * performances.
  1005.  * Reasonable means, in this context, not too large but not too small.
  1006.  * The actual maximum value is:
  1007.  * MAX_READAHEAD + PAGE_CACHE_SIZE = 76k is CONFIG_READA_SMALL is undefined
  1008.  *      and 32K if defined (4K page size assumed).
  1009.  *
  1010.  * Asynchronous read-ahead benefits:
  1011.  * ---------------------------------
  1012.  * Overlapping next read request and user process execution increase system 
  1013.  * performance.
  1014.  *
  1015.  * Read-ahead risks:
  1016.  * -----------------
  1017.  * We have to guess which further data are needed by the user process.
  1018.  * If these data are often not really needed, it's bad for system 
  1019.  * performances.
  1020.  * However, we know that files are often accessed sequentially by 
  1021.  * application programs and it seems that it is possible to have some good 
  1022.  * strategy in that guessing.
  1023.  * We only try to read-ahead files that seems to be read sequentially.
  1024.  *
  1025.  * Asynchronous read-ahead risks:
  1026.  * ------------------------------
  1027.  * In order to maximize overlapping, we must start some asynchronous read 
  1028.  * request from the device, as soon as possible.
  1029.  * We must be very careful about:
  1030.  * - The number of effective pending IO read requests.
  1031.  *   ONE seems to be the only reasonable value.
  1032.  * - The total memory pool usage for the file access stream.
  1033.  *   This maximum memory usage is implicitly 2 IO read chunks:
  1034.  *   2*(MAX_READAHEAD + PAGE_CACHE_SIZE) = 156K if CONFIG_READA_SMALL is undefined,
  1035.  *   64k if defined (4K page size assumed).
  1036.  */
  1037. static inline int get_max_readahead(struct inode * inode)
  1038. {
  1039. if (!inode->i_dev || !max_readahead[MAJOR(inode->i_dev)])
  1040. return vm_max_readahead;
  1041. return max_readahead[MAJOR(inode->i_dev)][MINOR(inode->i_dev)];
  1042. }
  1043. static void generic_file_readahead(int reada_ok,
  1044. struct file * filp, struct inode * inode,
  1045. struct page * page)
  1046. {
  1047. unsigned long end_index;
  1048. unsigned long index = page->index;
  1049. unsigned long max_ahead, ahead;
  1050. unsigned long raend;
  1051. int max_readahead = get_max_readahead(inode);
  1052. end_index = inode->i_size >> PAGE_CACHE_SHIFT;
  1053. raend = filp->f_raend;
  1054. max_ahead = 0;
  1055. /*
  1056.  * The current page is locked.
  1057.  * If the current position is inside the previous read IO request, do not
  1058.  * try to reread previously read ahead pages.
  1059.  * Otherwise decide or not to read ahead some pages synchronously.
  1060.  * If we are not going to read ahead, set the read ahead context for this 
  1061.  * page only.
  1062.  */
  1063. if (PageLocked(page)) {
  1064. if (!filp->f_ralen || index >= raend || index + filp->f_rawin < raend) {
  1065. raend = index;
  1066. if (raend < end_index)
  1067. max_ahead = filp->f_ramax;
  1068. filp->f_rawin = 0;
  1069. filp->f_ralen = 1;
  1070. if (!max_ahead) {
  1071. filp->f_raend  = index + filp->f_ralen;
  1072. filp->f_rawin += filp->f_ralen;
  1073. }
  1074. }
  1075. }
  1076. /*
  1077.  * The current page is not locked.
  1078.  * If we were reading ahead and,
  1079.  * if the current max read ahead size is not zero and,
  1080.  * if the current position is inside the last read-ahead IO request,
  1081.  *   it is the moment to try to read ahead asynchronously.
  1082.  * We will later force unplug device in order to force asynchronous read IO.
  1083.  */
  1084. else if (reada_ok && filp->f_ramax && raend >= 1 &&
  1085.  index <= raend && index + filp->f_ralen >= raend) {
  1086. /*
  1087.  * Add ONE page to max_ahead in order to try to have about the same IO max size
  1088.  * as synchronous read-ahead (MAX_READAHEAD + 1)*PAGE_CACHE_SIZE.
  1089.  * Compute the position of the last page we have tried to read in order to 
  1090.  * begin to read ahead just at the next page.
  1091.  */
  1092. raend -= 1;
  1093. if (raend < end_index)
  1094. max_ahead = filp->f_ramax + 1;
  1095. if (max_ahead) {
  1096. filp->f_rawin = filp->f_ralen;
  1097. filp->f_ralen = 0;
  1098. reada_ok      = 2;
  1099. }
  1100. }
  1101. /*
  1102.  * Try to read ahead pages.
  1103.  * We hope that ll_rw_blk() plug/unplug, coalescence, requests sort and the
  1104.  * scheduler, will work enough for us to avoid too bad actuals IO requests.
  1105.  */
  1106. ahead = 0;
  1107. while (ahead < max_ahead) {
  1108. ahead ++;
  1109. if ((raend + ahead) >= end_index)
  1110. break;
  1111. if (page_cache_read(filp, raend + ahead) < 0)
  1112. break;
  1113. }
  1114. /*
  1115.  * If we tried to read ahead some pages,
  1116.  * If we tried to read ahead asynchronously,
  1117.  *   Try to force unplug of the device in order to start an asynchronous
  1118.  *   read IO request.
  1119.  * Update the read-ahead context.
  1120.  * Store the length of the current read-ahead window.
  1121.  * Double the current max read ahead size.
  1122.  *   That heuristic avoid to do some large IO for files that are not really
  1123.  *   accessed sequentially.
  1124.  */
  1125. if (ahead) {
  1126. filp->f_ralen += ahead;
  1127. filp->f_rawin += filp->f_ralen;
  1128. filp->f_raend = raend + ahead + 1;
  1129. filp->f_ramax += filp->f_ramax;
  1130. if (filp->f_ramax > max_readahead)
  1131. filp->f_ramax = max_readahead;
  1132. #ifdef PROFILE_READAHEAD
  1133. profile_readahead((reada_ok == 2), filp);
  1134. #endif
  1135. }
  1136. return;
  1137. }
  1138. /*
  1139.  * Mark a page as having seen activity.
  1140.  *
  1141.  * If it was already so marked, move it to the active queue and drop
  1142.  * the referenced bit.  Otherwise, just mark it for future action..
  1143.  */
  1144. void mark_page_accessed(struct page *page)
  1145. {
  1146. if (!PageActive(page) && PageReferenced(page)) {
  1147. activate_page(page);
  1148. ClearPageReferenced(page);
  1149. } else
  1150. SetPageReferenced(page);
  1151. }
  1152. /*
  1153.  * This is a generic file read routine, and uses the
  1154.  * inode->i_op->readpage() function for the actual low-level
  1155.  * stuff.
  1156.  *
  1157.  * This is really ugly. But the goto's actually try to clarify some
  1158.  * of the logic when it comes to error handling etc.
  1159.  */
  1160. void do_generic_file_read(struct file * filp, loff_t *ppos, read_descriptor_t * desc, read_actor_t actor)
  1161. {
  1162. struct address_space *mapping = filp->f_dentry->d_inode->i_mapping;
  1163. struct inode *inode = mapping->host;
  1164. unsigned long index, offset;
  1165. struct page *cached_page;
  1166. int reada_ok;
  1167. int error;
  1168. int max_readahead = get_max_readahead(inode);
  1169. cached_page = NULL;
  1170. index = *ppos >> PAGE_CACHE_SHIFT;
  1171. offset = *ppos & ~PAGE_CACHE_MASK;
  1172. /*
  1173.  * If the current position is outside the previous read-ahead window, 
  1174.  * we reset the current read-ahead context and set read ahead max to zero
  1175.  * (will be set to just needed value later),
  1176.  * otherwise, we assume that the file accesses are sequential enough to
  1177.  * continue read-ahead.
  1178.  */
  1179. if (index > filp->f_raend || index + filp->f_rawin < filp->f_raend) {
  1180. reada_ok = 0;
  1181. filp->f_raend = 0;
  1182. filp->f_ralen = 0;
  1183. filp->f_ramax = 0;
  1184. filp->f_rawin = 0;
  1185. } else {
  1186. reada_ok = 1;
  1187. }
  1188. /*
  1189.  * Adjust the current value of read-ahead max.
  1190.  * If the read operation stay in the first half page, force no readahead.
  1191.  * Otherwise try to increase read ahead max just enough to do the read request.
  1192.  * Then, at least MIN_READAHEAD if read ahead is ok,
  1193.  * and at most MAX_READAHEAD in all cases.
  1194.  */
  1195. if (!index && offset + desc->count <= (PAGE_CACHE_SIZE >> 1)) {
  1196. filp->f_ramax = 0;
  1197. } else {
  1198. unsigned long needed;
  1199. needed = ((offset + desc->count) >> PAGE_CACHE_SHIFT) + 1;
  1200. if (filp->f_ramax < needed)
  1201. filp->f_ramax = needed;
  1202. if (reada_ok && filp->f_ramax < vm_min_readahead)
  1203. filp->f_ramax = vm_min_readahead;
  1204. if (filp->f_ramax > max_readahead)
  1205. filp->f_ramax = max_readahead;
  1206. }
  1207. for (;;) {
  1208. struct page *page, **hash;
  1209. unsigned long end_index, nr, ret;
  1210. end_index = inode->i_size >> PAGE_CACHE_SHIFT;
  1211. if (index > end_index)
  1212. break;
  1213. nr = PAGE_CACHE_SIZE;
  1214. if (index == end_index) {
  1215. nr = inode->i_size & ~PAGE_CACHE_MASK;
  1216. if (nr <= offset)
  1217. break;
  1218. }
  1219. nr = nr - offset;
  1220. /*
  1221.  * Try to find the data in the page cache..
  1222.  */
  1223. hash = page_hash(mapping, index);
  1224. spin_lock(&pagecache_lock);
  1225. page = __find_page_nolock(mapping, index, *hash);
  1226. if (!page)
  1227. goto no_cached_page;
  1228. found_page:
  1229. page_cache_get(page);
  1230. spin_unlock(&pagecache_lock);
  1231. if (!Page_Uptodate(page))
  1232. goto page_not_up_to_date;
  1233. generic_file_readahead(reada_ok, filp, inode, page);
  1234. page_ok:
  1235. /* If users can be writing to this page using arbitrary
  1236.  * virtual addresses, take care about potential aliasing
  1237.  * before reading the page on the kernel side.
  1238.  */
  1239. if (mapping->i_mmap_shared != NULL)
  1240. flush_dcache_page(page);
  1241. /*
  1242.  * Mark the page accessed if we read the
  1243.  * beginning or we just did an lseek.
  1244.  */
  1245. if (!offset || !filp->f_reada)
  1246. mark_page_accessed(page);
  1247. /*
  1248.  * Ok, we have the page, and it's up-to-date, so
  1249.  * now we can copy it to user space...
  1250.  *
  1251.  * The actor routine returns how many bytes were actually used..
  1252.  * NOTE! This may not be the same as how much of a user buffer
  1253.  * we filled up (we may be padding etc), so we can only update
  1254.  * "pos" here (the actor routine has to update the user buffer
  1255.  * pointers and the remaining count).
  1256.  */
  1257. ret = actor(desc, page, offset, nr);
  1258. offset += ret;
  1259. index += offset >> PAGE_CACHE_SHIFT;
  1260. offset &= ~PAGE_CACHE_MASK;
  1261. page_cache_release(page);
  1262. if (ret == nr && desc->count)
  1263. continue;
  1264. break;
  1265. /*
  1266.  * Ok, the page was not immediately readable, so let's try to read ahead while we're at it..
  1267.  */
  1268. page_not_up_to_date:
  1269. generic_file_readahead(reada_ok, filp, inode, page);
  1270. if (Page_Uptodate(page))
  1271. goto page_ok;
  1272. /* Get exclusive access to the page ... */
  1273. lock_page(page);
  1274. /* Did it get unhashed before we got the lock? */
  1275. if (!page->mapping) {
  1276. UnlockPage(page);
  1277. page_cache_release(page);
  1278. continue;
  1279. }
  1280. /* Did somebody else fill it already? */
  1281. if (Page_Uptodate(page)) {
  1282. UnlockPage(page);
  1283. goto page_ok;
  1284. }
  1285. readpage:
  1286. /* ... and start the actual read. The read will unlock the page. */
  1287. error = mapping->a_ops->readpage(filp, page);
  1288. if (!error) {
  1289. if (Page_Uptodate(page))
  1290. goto page_ok;
  1291. /* Again, try some read-ahead while waiting for the page to finish.. */
  1292. generic_file_readahead(reada_ok, filp, inode, page);
  1293. wait_on_page(page);
  1294. if (Page_Uptodate(page))
  1295. goto page_ok;
  1296. error = -EIO;
  1297. }
  1298. /* UHHUH! A synchronous read error occurred. Report it */
  1299. desc->error = error;
  1300. page_cache_release(page);
  1301. break;
  1302. no_cached_page:
  1303. /*
  1304.  * Ok, it wasn't cached, so we need to create a new
  1305.  * page..
  1306.  *
  1307.  * We get here with the page cache lock held.
  1308.  */
  1309. if (!cached_page) {
  1310. spin_unlock(&pagecache_lock);
  1311. cached_page = page_cache_alloc(mapping);
  1312. if (!cached_page) {
  1313. desc->error = -ENOMEM;
  1314. break;
  1315. }
  1316. /*
  1317.  * Somebody may have added the page while we
  1318.  * dropped the page cache lock. Check for that.
  1319.  */
  1320. spin_lock(&pagecache_lock);
  1321. page = __find_page_nolock(mapping, index, *hash);
  1322. if (page)
  1323. goto found_page;
  1324. }
  1325. /*
  1326.  * Ok, add the new page to the hash-queues...
  1327.  */
  1328. page = cached_page;
  1329. __add_to_page_cache(page, mapping, index, hash);
  1330. spin_unlock(&pagecache_lock);
  1331. lru_cache_add(page);
  1332. cached_page = NULL;
  1333. goto readpage;
  1334. }
  1335. *ppos = ((loff_t) index << PAGE_CACHE_SHIFT) + offset;
  1336. filp->f_reada = 1;
  1337. if (cached_page)
  1338. page_cache_release(cached_page);
  1339. UPDATE_ATIME(inode);
  1340. }
  1341. static ssize_t generic_file_direct_IO(int rw, struct file * filp, char * buf, size_t count, loff_t offset)
  1342. {
  1343. ssize_t retval;
  1344. int new_iobuf, chunk_size, blocksize_mask, blocksize, blocksize_bits, iosize, progress;
  1345. struct kiobuf * iobuf;
  1346. struct address_space * mapping = filp->f_dentry->d_inode->i_mapping;
  1347. struct inode * inode = mapping->host;
  1348. loff_t size = inode->i_size;
  1349. new_iobuf = 0;
  1350. iobuf = filp->f_iobuf;
  1351. if (test_and_set_bit(0, &filp->f_iobuf_lock)) {
  1352. /*
  1353.  * A parallel read/write is using the preallocated iobuf
  1354.  * so just run slow and allocate a new one.
  1355.  */
  1356. retval = alloc_kiovec(1, &iobuf);
  1357. if (retval)
  1358. goto out;
  1359. new_iobuf = 1;
  1360. }
  1361. blocksize = 1 << inode->i_blkbits;
  1362. blocksize_bits = inode->i_blkbits;
  1363. blocksize_mask = blocksize - 1;
  1364. chunk_size = KIO_MAX_ATOMIC_IO << 10;
  1365. retval = -EINVAL;
  1366. if ((offset & blocksize_mask) || (count & blocksize_mask))
  1367. goto out_free;
  1368. if (!mapping->a_ops->direct_IO)
  1369. goto out_free;
  1370. if ((rw == READ) && (offset + count > size))
  1371. count = size - offset;
  1372. /*
  1373.  * Flush to disk exclusively the _data_, metadata must remain
  1374.  * completly asynchronous or performance will go to /dev/null.
  1375.  */
  1376. retval = filemap_fdatasync(mapping);
  1377. if (retval == 0)
  1378. retval = fsync_inode_data_buffers(inode);
  1379. if (retval == 0)
  1380. retval = filemap_fdatawait(mapping);
  1381. if (retval < 0)
  1382. goto out_free;
  1383. progress = retval = 0;
  1384. while (count > 0) {
  1385. iosize = count;
  1386. if (iosize > chunk_size)
  1387. iosize = chunk_size;
  1388. retval = map_user_kiobuf(rw, iobuf, (unsigned long) buf, iosize);
  1389. if (retval)
  1390. break;
  1391. retval = mapping->a_ops->direct_IO(rw, inode, iobuf, (offset+progress) >> blocksize_bits, blocksize);
  1392. if (rw == READ && retval > 0)
  1393. mark_dirty_kiobuf(iobuf, retval);
  1394. if (retval >= 0) {
  1395. count -= retval;
  1396. buf += retval;
  1397. /* warning: weird semantics here, we're reporting a read behind the end of the file */
  1398. progress += retval;
  1399. }
  1400. unmap_kiobuf(iobuf);
  1401. if (retval != iosize)
  1402. break;
  1403. }
  1404. if (progress)
  1405. retval = progress;
  1406.  out_free:
  1407. if (!new_iobuf)
  1408. clear_bit(0, &filp->f_iobuf_lock);
  1409. else
  1410. free_kiovec(1, &iobuf);
  1411.  out:
  1412. return retval;
  1413. }
  1414. int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size)
  1415. {
  1416. char *kaddr;
  1417. unsigned long left, count = desc->count;
  1418. if (size > count)
  1419. size = count;
  1420. kaddr = kmap(page);
  1421. left = __copy_to_user(desc->buf, kaddr + offset, size);
  1422. kunmap(page);
  1423. if (left) {
  1424. size -= left;
  1425. desc->error = -EFAULT;
  1426. }
  1427. desc->count = count - size;
  1428. desc->written += size;
  1429. desc->buf += size;
  1430. return size;
  1431. }
  1432. /*
  1433.  * This is the "read()" routine for all filesystems
  1434.  * that can use the page cache directly.
  1435.  */
  1436. ssize_t generic_file_read(struct file * filp, char * buf, size_t count, loff_t *ppos)
  1437. {
  1438. ssize_t retval;
  1439. if ((ssize_t) count < 0)
  1440. return -EINVAL;
  1441. if (filp->f_flags & O_DIRECT)
  1442. goto o_direct;
  1443. retval = -EFAULT;
  1444. if (access_ok(VERIFY_WRITE, buf, count)) {
  1445. retval = 0;
  1446. if (count) {
  1447. read_descriptor_t desc;
  1448. desc.written = 0;
  1449. desc.count = count;
  1450. desc.buf = buf;
  1451. desc.error = 0;
  1452. do_generic_file_read(filp, ppos, &desc, file_read_actor);
  1453. retval = desc.written;
  1454. if (!retval)
  1455. retval = desc.error;
  1456. }
  1457. }
  1458.  out:
  1459. return retval;
  1460.  o_direct:
  1461. {
  1462. loff_t pos = *ppos, size;
  1463. struct address_space *mapping = filp->f_dentry->d_inode->i_mapping;
  1464. struct inode *inode = mapping->host;
  1465. retval = 0;
  1466. if (!count)
  1467. goto out; /* skip atime */
  1468. size = inode->i_size;
  1469. if (pos < size) {
  1470. retval = generic_file_direct_IO(READ, filp, buf, count, pos);
  1471. if (retval > 0)
  1472. *ppos = pos + retval;
  1473. }
  1474. UPDATE_ATIME(filp->f_dentry->d_inode);
  1475. goto out;
  1476. }
  1477. }
  1478. static int file_send_actor(read_descriptor_t * desc, struct page *page, unsigned long offset , unsigned long size)
  1479. {
  1480. ssize_t written;
  1481. unsigned long count = desc->count;
  1482. struct file *file = (struct file *) desc->buf;
  1483. if (size > count)
  1484. size = count;
  1485.   if (file->f_op->sendpage) {
  1486.   written = file->f_op->sendpage(file, page, offset,
  1487.        size, &file->f_pos, size<count);
  1488. } else {
  1489. char *kaddr;
  1490. mm_segment_t old_fs;
  1491. old_fs = get_fs();
  1492. set_fs(KERNEL_DS);
  1493. kaddr = kmap(page);
  1494. written = file->f_op->write(file, kaddr + offset, size, &file->f_pos);
  1495. kunmap(page);
  1496. set_fs(old_fs);
  1497. }
  1498. if (written < 0) {
  1499. desc->error = written;
  1500. written = 0;
  1501. }
  1502. desc->count = count - written;
  1503. desc->written += written;
  1504. return written;
  1505. }
  1506. asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t *offset, size_t count)
  1507. {
  1508. ssize_t retval;
  1509. struct file * in_file, * out_file;
  1510. struct inode * in_inode, * out_inode;
  1511. /*
  1512.  * Get input file, and verify that it is ok..
  1513.  */
  1514. retval = -EBADF;
  1515. in_file = fget(in_fd);
  1516. if (!in_file)
  1517. goto out;
  1518. if (!(in_file->f_mode & FMODE_READ))
  1519. goto fput_in;
  1520. retval = -EINVAL;
  1521. in_inode = in_file->f_dentry->d_inode;
  1522. if (!in_inode)
  1523. goto fput_in;
  1524. if (!in_inode->i_mapping->a_ops->readpage)
  1525. goto fput_in;
  1526. retval = locks_verify_area(FLOCK_VERIFY_READ, in_inode, in_file, in_file->f_pos, count);
  1527. if (retval)
  1528. goto fput_in;
  1529. /*
  1530.  * Get output file, and verify that it is ok..
  1531.  */
  1532. retval = -EBADF;
  1533. out_file = fget(out_fd);
  1534. if (!out_file)
  1535. goto fput_in;
  1536. if (!(out_file->f_mode & FMODE_WRITE))
  1537. goto fput_out;
  1538. retval = -EINVAL;
  1539. if (!out_file->f_op || !out_file->f_op->write)
  1540. goto fput_out;
  1541. out_inode = out_file->f_dentry->d_inode;
  1542. retval = locks_verify_area(FLOCK_VERIFY_WRITE, out_inode, out_file, out_file->f_pos, count);
  1543. if (retval)
  1544. goto fput_out;
  1545. retval = 0;
  1546. if (count) {
  1547. read_descriptor_t desc;
  1548. loff_t pos = 0, *ppos;
  1549. retval = -EFAULT;
  1550. ppos = &in_file->f_pos;
  1551. if (offset) {
  1552. if (get_user(pos, offset))
  1553. goto fput_out;
  1554. ppos = &pos;
  1555. }
  1556. desc.written = 0;
  1557. desc.count = count;
  1558. desc.buf = (char *) out_file;
  1559. desc.error = 0;
  1560. do_generic_file_read(in_file, ppos, &desc, file_send_actor);
  1561. retval = desc.written;
  1562. if (!retval)
  1563. retval = desc.error;
  1564. if (offset)
  1565. put_user(pos, offset);
  1566. }
  1567. fput_out:
  1568. fput(out_file);
  1569. fput_in:
  1570. fput(in_file);
  1571. out:
  1572. return retval;
  1573. }
  1574. static ssize_t do_readahead(struct file *file, unsigned long index, unsigned long nr)
  1575. {
  1576. struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
  1577. unsigned long max;
  1578. if (!mapping || !mapping->a_ops || !mapping->a_ops->readpage)
  1579. return -EINVAL;
  1580. /* Limit it to the size of the file.. */
  1581. max = (mapping->host->i_size + ~PAGE_CACHE_MASK) >> PAGE_CACHE_SHIFT;
  1582. if (index > max)
  1583. return 0;
  1584. max -= index;
  1585. if (nr > max)
  1586. nr = max;
  1587. /* And limit it to a sane percentage of the inactive list.. */
  1588. max = nr_inactive_pages / 2;
  1589. if (nr > max)
  1590. nr = max;
  1591. while (nr) {
  1592. page_cache_read(file, index);
  1593. index++;
  1594. nr--;
  1595. }
  1596. return 0;
  1597. }
  1598. asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count)
  1599. {
  1600. ssize_t ret;
  1601. struct file *file;
  1602. ret = -EBADF;
  1603. file = fget(fd);
  1604. if (file) {
  1605. if (file->f_mode & FMODE_READ) {
  1606. unsigned long start = offset >> PAGE_CACHE_SHIFT;
  1607. unsigned long len = (count + ((long)offset & ~PAGE_CACHE_MASK)) >> PAGE_CACHE_SHIFT;
  1608. ret = do_readahead(file, start, len);
  1609. }
  1610. fput(file);
  1611. }
  1612. return ret;
  1613. }
  1614. /*
  1615.  * Read-ahead and flush behind for MADV_SEQUENTIAL areas.  Since we are
  1616.  * sure this is sequential access, we don't need a flexible read-ahead
  1617.  * window size -- we can always use a large fixed size window.
  1618.  */
  1619. static void nopage_sequential_readahead(struct vm_area_struct * vma,
  1620. unsigned long pgoff, unsigned long filesize)
  1621. {
  1622. unsigned long ra_window;
  1623. ra_window = get_max_readahead(vma->vm_file->f_dentry->d_inode);
  1624. ra_window = CLUSTER_OFFSET(ra_window + CLUSTER_PAGES - 1);
  1625. /* vm_raend is zero if we haven't read ahead in this area yet.  */
  1626. if (vma->vm_raend == 0)
  1627. vma->vm_raend = vma->vm_pgoff + ra_window;
  1628. /*
  1629.  * If we've just faulted the page half-way through our window,
  1630.  * then schedule reads for the next window, and release the
  1631.  * pages in the previous window.
  1632.  */
  1633. if ((pgoff + (ra_window >> 1)) == vma->vm_raend) {
  1634. unsigned long start = vma->vm_pgoff + vma->vm_raend;
  1635. unsigned long end = start + ra_window;
  1636. if (end > ((vma->vm_end >> PAGE_SHIFT) + vma->vm_pgoff))
  1637. end = (vma->vm_end >> PAGE_SHIFT) + vma->vm_pgoff;
  1638. if (start > end)
  1639. return;
  1640. while ((start < end) && (start < filesize)) {
  1641. if (read_cluster_nonblocking(vma->vm_file,
  1642. start, filesize) < 0)
  1643. break;
  1644. start += CLUSTER_PAGES;
  1645. }
  1646. run_task_queue(&tq_disk);
  1647. /* if we're far enough past the beginning of this area,
  1648.    recycle pages that are in the previous window. */
  1649. if (vma->vm_raend > (vma->vm_pgoff + ra_window + ra_window)) {
  1650. unsigned long window = ra_window << PAGE_SHIFT;
  1651. end = vma->vm_start + (vma->vm_raend << PAGE_SHIFT);
  1652. end -= window + window;
  1653. filemap_sync(vma, end - window, window, MS_INVALIDATE);
  1654. }
  1655. vma->vm_raend += ra_window;
  1656. }
  1657. return;
  1658. }
  1659. /*
  1660.  * filemap_nopage() is invoked via the vma operations vector for a
  1661.  * mapped memory region to read in file data during a page fault.
  1662.  *
  1663.  * The goto's are kind of ugly, but this streamlines the normal case of having
  1664.  * it in the page cache, and handles the special cases reasonably without
  1665.  * having a lot of duplicated code.
  1666.  */
  1667. struct page * filemap_nopage(struct vm_area_struct * area, unsigned long address, int unused)
  1668. {
  1669. int error;
  1670. struct file *file = area->vm_file;
  1671. struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
  1672. struct inode *inode = mapping->host;
  1673. struct page *page, **hash;
  1674. unsigned long size, pgoff, endoff;
  1675. pgoff = ((address - area->vm_start) >> PAGE_CACHE_SHIFT) + area->vm_pgoff;
  1676. endoff = ((area->vm_end - area->vm_start) >> PAGE_CACHE_SHIFT) + area->vm_pgoff;
  1677. retry_all:
  1678. /*
  1679.  * An external ptracer can access pages that normally aren't
  1680.  * accessible..
  1681.  */
  1682. size = (inode->i_size + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
  1683. if ((pgoff >= size) && (area->vm_mm == current->mm))
  1684. return NULL;
  1685. /* The "size" of the file, as far as mmap is concerned, isn't bigger than the mapping */
  1686. if (size > endoff)
  1687. size = endoff;
  1688. /*
  1689.  * Do we have something in the page cache already?
  1690.  */
  1691. hash = page_hash(mapping, pgoff);
  1692. retry_find:
  1693. page = __find_get_page(mapping, pgoff, hash);
  1694. if (!page)
  1695. goto no_cached_page;
  1696. /*
  1697.  * Ok, found a page in the page cache, now we need to check
  1698.  * that it's up-to-date.
  1699.  */
  1700. if (!Page_Uptodate(page))
  1701. goto page_not_uptodate;
  1702. success:
  1703.   /*
  1704.  * Try read-ahead for sequential areas.
  1705.  */
  1706. if (VM_SequentialReadHint(area))
  1707. nopage_sequential_readahead(area, pgoff, size);
  1708. /*
  1709.  * Found the page and have a reference on it, need to check sharing
  1710.  * and possibly copy it over to another page..
  1711.  */
  1712. mark_page_accessed(page);
  1713. flush_page_to_ram(page);
  1714. return page;
  1715. no_cached_page:
  1716. /*
  1717.  * If the requested offset is within our file, try to read a whole 
  1718.  * cluster of pages at once.
  1719.  *
  1720.  * Otherwise, we're off the end of a privately mapped file,
  1721.  * so we need to map a zero page.
  1722.  */
  1723. if ((pgoff < size) && !VM_RandomReadHint(area))
  1724. error = read_cluster_nonblocking(file, pgoff, size);
  1725. else
  1726. error = page_cache_read(file, pgoff);
  1727. /*
  1728.  * The page we want has now been added to the page cache.
  1729.  * In the unlikely event that someone removed it in the
  1730.  * meantime, we'll just come back here and read it again.
  1731.  */
  1732. if (error >= 0)
  1733. goto retry_find;
  1734. /*
  1735.  * An error return from page_cache_read can result if the
  1736.  * system is low on memory, or a problem occurs while trying
  1737.  * to schedule I/O.
  1738.  */
  1739. if (error == -ENOMEM)
  1740. return NOPAGE_OOM;
  1741. return NULL;
  1742. page_not_uptodate:
  1743. lock_page(page);
  1744. /* Did it get unhashed while we waited for it? */
  1745. if (!page->mapping) {
  1746. UnlockPage(page);
  1747. page_cache_release(page);
  1748. goto retry_all;
  1749. }
  1750. /* Did somebody else get it up-to-date? */
  1751. if (Page_Uptodate(page)) {
  1752. UnlockPage(page);
  1753. goto success;
  1754. }
  1755. if (!mapping->a_ops->readpage(file, page)) {
  1756. wait_on_page(page);
  1757. if (Page_Uptodate(page))
  1758. goto success;
  1759. }
  1760. /*
  1761.  * Umm, take care of errors if the page isn't up-to-date.
  1762.  * Try to re-read it _once_. We do this synchronously,
  1763.  * because there really aren't any performance issues here
  1764.  * and we need to check for errors.
  1765.  */
  1766. lock_page(page);
  1767. /* Somebody truncated the page on us? */
  1768. if (!page->mapping) {
  1769. UnlockPage(page);
  1770. page_cache_release(page);
  1771. goto retry_all;
  1772. }
  1773. /* Somebody else successfully read it in? */
  1774. if (Page_Uptodate(page)) {
  1775. UnlockPage(page);
  1776. goto success;
  1777. }
  1778. ClearPageError(page);
  1779. if (!mapping->a_ops->readpage(file, page)) {
  1780. wait_on_page(page);
  1781. if (Page_Uptodate(page))
  1782. goto success;
  1783. }
  1784. /*
  1785.  * Things didn't work out. Return zero to tell the
  1786.  * mm layer so, possibly freeing the page cache page first.
  1787.  */
  1788. page_cache_release(page);
  1789. return NULL;
  1790. }
  1791. /* Called with mm->page_table_lock held to protect against other
  1792.  * threads/the swapper from ripping pte's out from under us.
  1793.  */
  1794. static inline int filemap_sync_pte(pte_t * ptep, struct vm_area_struct *vma,
  1795. unsigned long address, unsigned int flags)
  1796. {
  1797. pte_t pte = *ptep;
  1798. if (pte_present(pte)) {
  1799. struct page *page = pte_page(pte);
  1800. if (VALID_PAGE(page) && !PageReserved(page) && ptep_test_and_clear_dirty(ptep)) {
  1801. flush_tlb_page(vma, address);
  1802. set_page_dirty(page);
  1803. }
  1804. }
  1805. return 0;
  1806. }
  1807. static inline int filemap_sync_pte_range(pmd_t * pmd,
  1808. unsigned long address, unsigned long size, 
  1809. struct vm_area_struct *vma, unsigned long offset, unsigned int flags)
  1810. {
  1811. pte_t * pte;
  1812. unsigned long end;
  1813. int error;
  1814. if (pmd_none(*pmd))
  1815. return 0;
  1816. if (pmd_bad(*pmd)) {
  1817. pmd_ERROR(*pmd);
  1818. pmd_clear(pmd);
  1819. return 0;
  1820. }
  1821. pte = pte_offset(pmd, address);
  1822. offset += address & PMD_MASK;
  1823. address &= ~PMD_MASK;
  1824. end = address + size;
  1825. if (end > PMD_SIZE)
  1826. end = PMD_SIZE;
  1827. error = 0;
  1828. do {
  1829. error |= filemap_sync_pte(pte, vma, address + offset, flags);
  1830. address += PAGE_SIZE;
  1831. pte++;
  1832. } while (address && (address < end));
  1833. return error;
  1834. }
  1835. static inline int filemap_sync_pmd_range(pgd_t * pgd,
  1836. unsigned long address, unsigned long size, 
  1837. struct vm_area_struct *vma, unsigned int flags)
  1838. {
  1839. pmd_t * pmd;
  1840. unsigned long offset, end;
  1841. int error;
  1842. if (pgd_none(*pgd))
  1843. return 0;
  1844. if (pgd_bad(*pgd)) {
  1845. pgd_ERROR(*pgd);
  1846. pgd_clear(pgd);
  1847. return 0;
  1848. }
  1849. pmd = pmd_offset(pgd, address);
  1850. offset = address & PGDIR_MASK;
  1851. address &= ~PGDIR_MASK;
  1852. end = address + size;
  1853. if (end > PGDIR_SIZE)
  1854. end = PGDIR_SIZE;
  1855. error = 0;
  1856. do {
  1857. error |= filemap_sync_pte_range(pmd, address, end - address, vma, offset, flags);
  1858. address = (address + PMD_SIZE) & PMD_MASK;
  1859. pmd++;
  1860. } while (address && (address < end));
  1861. return error;
  1862. }
  1863. int filemap_sync(struct vm_area_struct * vma, unsigned long address,
  1864. size_t size, unsigned int flags)
  1865. {
  1866. pgd_t * dir;
  1867. unsigned long end = address + size;
  1868. int error = 0;
  1869. /* Aquire the lock early; it may be possible to avoid dropping
  1870.  * and reaquiring it repeatedly.
  1871.  */
  1872. spin_lock(&vma->vm_mm->page_table_lock);
  1873. dir = pgd_offset(vma->vm_mm, address);
  1874. flush_cache_range(vma->vm_mm, end - size, end);
  1875. if (address >= end)
  1876. BUG();
  1877. do {
  1878. error |= filemap_sync_pmd_range(dir, address, end - address, vma, flags);
  1879. address = (address + PGDIR_SIZE) & PGDIR_MASK;
  1880. dir++;
  1881. } while (address && (address < end));
  1882. flush_tlb_range(vma->vm_mm, end - size, end);
  1883. spin_unlock(&vma->vm_mm->page_table_lock);
  1884. return error;
  1885. }
  1886. static struct vm_operations_struct generic_file_vm_ops = {
  1887. nopage: filemap_nopage,
  1888. };
  1889. /* This is used for a general mmap of a disk file */
  1890. int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
  1891. {
  1892. struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
  1893. struct inode *inode = mapping->host;
  1894. if ((vma->vm_flags & VM_SHARED) && (vma->vm_flags & VM_MAYWRITE)) {
  1895. if (!mapping->a_ops->writepage)
  1896. return -EINVAL;
  1897. }
  1898. if (!mapping->a_ops->readpage)
  1899. return -ENOEXEC;
  1900. UPDATE_ATIME(inode);
  1901. vma->vm_ops = &generic_file_vm_ops;
  1902. return 0;
  1903. }
  1904. /*
  1905.  * The msync() system call.
  1906.  */
  1907. /*
  1908.  * MS_SYNC syncs the entire file - including mappings.
  1909.  *
  1910.  * MS_ASYNC initiates writeout of just the dirty mapped data.
  1911.  * This provides no guarantee of file integrity - things like indirect
  1912.  * blocks may not have started writeout.  MS_ASYNC is primarily useful
  1913.  * where the application knows that it has finished with the data and
  1914.  * wishes to intelligently schedule its own I/O traffic.
  1915.  */
  1916. static int msync_interval(struct vm_area_struct * vma,
  1917. unsigned long start, unsigned long end, int flags)
  1918. {
  1919. int ret = 0;
  1920. struct file * file = vma->vm_file;
  1921. if ( (flags & MS_INVALIDATE) && (vma->vm_flags & VM_LOCKED) )
  1922. return -EBUSY;
  1923. if (file && (vma->vm_flags & VM_SHARED)) {
  1924. ret = filemap_sync(vma, start, end-start, flags);
  1925. if (!ret && (flags & (MS_SYNC|MS_ASYNC))) {
  1926. struct inode * inode = file->f_dentry->d_inode;
  1927. down(&inode->i_sem);
  1928. ret = filemap_fdatasync(inode->i_mapping);
  1929. if (flags & MS_SYNC) {
  1930. int err;
  1931. if (file->f_op && file->f_op->fsync) {
  1932. err = file->f_op->fsync(file, file->f_dentry, 1);
  1933. if (err && !ret)
  1934. ret = err;
  1935. }
  1936. err = filemap_fdatawait(inode->i_mapping);
  1937. if (err && !ret)
  1938. ret = err;
  1939. }
  1940. up(&inode->i_sem);
  1941. }
  1942. }
  1943. return ret;
  1944. }
  1945. asmlinkage long sys_msync(unsigned long start, size_t len, int flags)
  1946. {
  1947. unsigned long end;
  1948. struct vm_area_struct * vma;
  1949. int unmapped_error, error = -EINVAL;
  1950. down_read(&current->mm->mmap_sem);
  1951. if (start & ~PAGE_MASK)
  1952. goto out;
  1953. len = (len + ~PAGE_MASK) & PAGE_MASK;
  1954. end = start + len;
  1955. if (end < start)
  1956. goto out;
  1957. if (flags & ~(MS_ASYNC | MS_INVALIDATE | MS_SYNC))
  1958. goto out;
  1959. if ((flags & MS_ASYNC) && (flags & MS_SYNC))
  1960. goto out;
  1961. error = 0;
  1962. if (end == start)
  1963. goto out;
  1964. /*
  1965.  * If the interval [start,end) covers some unmapped address ranges,
  1966.  * just ignore them, but return -ENOMEM at the end.
  1967.  */
  1968. vma = find_vma(current->mm, start);
  1969. unmapped_error = 0;
  1970. for (;;) {
  1971. /* Still start < end. */
  1972. error = -ENOMEM;
  1973. if (!vma)
  1974. goto out;
  1975. /* Here start < vma->vm_end. */
  1976. if (start < vma->vm_start) {
  1977. unmapped_error = -ENOMEM;
  1978. start = vma->vm_start;
  1979. }
  1980. /* Here vma->vm_start <= start < vma->vm_end. */
  1981. if (end <= vma->vm_end) {
  1982. if (start < end) {
  1983. error = msync_interval(vma, start, end, flags);
  1984. if (error)
  1985. goto out;
  1986. }
  1987. error = unmapped_error;
  1988. goto out;
  1989. }
  1990. /* Here vma->vm_start <= start < vma->vm_end < end. */
  1991. error = msync_interval(vma, start, vma->vm_end, flags);
  1992. if (error)
  1993. goto out;
  1994. start = vma->vm_end;
  1995. vma = vma->vm_next;
  1996. }
  1997. out:
  1998. up_read(&current->mm->mmap_sem);
  1999. return error;
  2000. }
  2001. static inline void setup_read_behavior(struct vm_area_struct * vma,
  2002. int behavior)
  2003. {
  2004. VM_ClearReadHint(vma);
  2005. switch(behavior) {
  2006. case MADV_SEQUENTIAL:
  2007. vma->vm_flags |= VM_SEQ_READ;
  2008. break;
  2009. case MADV_RANDOM:
  2010. vma->vm_flags |= VM_RAND_READ;
  2011. break;
  2012. default:
  2013. break;
  2014. }
  2015. return;
  2016. }
  2017. static long madvise_fixup_start(struct vm_area_struct * vma,
  2018. unsigned long end, int behavior)
  2019. {
  2020. struct vm_area_struct * n;
  2021. struct mm_struct * mm = vma->vm_mm;
  2022. n = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
  2023. if (!n)
  2024. return -EAGAIN;
  2025. *n = *vma;
  2026. n->vm_end = end;
  2027. setup_read_behavior(n, behavior);
  2028. n->vm_raend = 0;
  2029. if (n->vm_file)
  2030. get_file(n->vm_file);
  2031. if (n->vm_ops && n->vm_ops->open)
  2032. n->vm_ops->open(n);
  2033. vma->vm_pgoff += (end - vma->vm_start) >> PAGE_SHIFT;
  2034. lock_vma_mappings(vma);
  2035. spin_lock(&mm->page_table_lock);
  2036. vma->vm_start = end;
  2037. __insert_vm_struct(mm, n);
  2038. spin_unlock(&mm->page_table_lock);
  2039. unlock_vma_mappings(vma);
  2040. return 0;
  2041. }
  2042. static long madvise_fixup_end(struct vm_area_struct * vma,
  2043. unsigned long start, int behavior)
  2044. {
  2045. struct vm_area_struct * n;
  2046. struct mm_struct * mm = vma->vm_mm;
  2047. n = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
  2048. if (!n)
  2049. return -EAGAIN;
  2050. *n = *vma;
  2051. n->vm_start = start;
  2052. n->vm_pgoff += (n->vm_start - vma->vm_start) >> PAGE_SHIFT;
  2053. setup_read_behavior(n, behavior);
  2054. n->vm_raend = 0;
  2055. if (n->vm_file)
  2056. get_file(n->vm_file);
  2057. if (n->vm_ops && n->vm_ops->open)
  2058. n->vm_ops->open(n);
  2059. lock_vma_mappings(vma);
  2060. spin_lock(&mm->page_table_lock);
  2061. vma->vm_end = start;
  2062. __insert_vm_struct(mm, n);
  2063. spin_unlock(&mm->page_table_lock);
  2064. unlock_vma_mappings(vma);
  2065. return 0;
  2066. }
  2067. static long madvise_fixup_middle(struct vm_area_struct * vma,
  2068. unsigned long start, unsigned long end, int behavior)
  2069. {
  2070. struct vm_area_struct * left, * right;
  2071. struct mm_struct * mm = vma->vm_mm;
  2072. left = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
  2073. if (!left)
  2074. return -EAGAIN;
  2075. right = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
  2076. if (!right) {
  2077. kmem_cache_free(vm_area_cachep, left);
  2078. return -EAGAIN;
  2079. }
  2080. *left = *vma;
  2081. *right = *vma;
  2082. left->vm_end = start;
  2083. right->vm_start = end;
  2084. right->vm_pgoff += (right->vm_start - left->vm_start) >> PAGE_SHIFT;
  2085. left->vm_raend = 0;
  2086. right->vm_raend = 0;
  2087. if (vma->vm_file)
  2088. atomic_add(2, &vma->vm_file->f_count);
  2089. if (vma->vm_ops && vma->vm_ops->open) {
  2090. vma->vm_ops->open(left);
  2091. vma->vm_ops->open(right);
  2092. }
  2093. vma->vm_pgoff += (start - vma->vm_start) >> PAGE_SHIFT;
  2094. vma->vm_raend = 0;
  2095. lock_vma_mappings(vma);
  2096. spin_lock(&mm->page_table_lock);
  2097. vma->vm_start = start;
  2098. vma->vm_end = end;
  2099. setup_read_behavior(vma, behavior);
  2100. __insert_vm_struct(mm, left);
  2101. __insert_vm_struct(mm, right);
  2102. spin_unlock(&mm->page_table_lock);
  2103. unlock_vma_mappings(vma);
  2104. return 0;
  2105. }
  2106. /*
  2107.  * We can potentially split a vm area into separate
  2108.  * areas, each area with its own behavior.
  2109.  */
  2110. static long madvise_behavior(struct vm_area_struct * vma,
  2111. unsigned long start, unsigned long end, int behavior)
  2112. {
  2113. int error = 0;
  2114. /* This caps the number of vma's this process can own */
  2115. if (vma->vm_mm->map_count > max_map_count)
  2116. return -ENOMEM;
  2117. if (start == vma->vm_start) {
  2118. if (end == vma->vm_end) {
  2119. setup_read_behavior(vma, behavior);
  2120. vma->vm_raend = 0;
  2121. } else
  2122. error = madvise_fixup_start(vma, end, behavior);
  2123. } else {
  2124. if (end == vma->vm_end)
  2125. error = madvise_fixup_end(vma, start, behavior);
  2126. else
  2127. error = madvise_fixup_middle(vma, start, end, behavior);
  2128. }
  2129. return error;
  2130. }
  2131. /*
  2132.  * Schedule all required I/O operations, then run the disk queue
  2133.  * to make sure they are started.  Do not wait for completion.
  2134.  */
  2135. static long madvise_willneed(struct vm_area_struct * vma,
  2136. unsigned long start, unsigned long end)
  2137. {
  2138. long error = -EBADF;
  2139. struct file * file;
  2140. unsigned long size, rlim_rss;
  2141. /* Doesn't work if there's no mapped file. */
  2142. if (!vma->vm_file)
  2143. return error;
  2144. file = vma->vm_file;
  2145. size = (file->f_dentry->d_inode->i_size + PAGE_CACHE_SIZE - 1) >>
  2146. PAGE_CACHE_SHIFT;
  2147. start = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
  2148. if (end > vma->vm_end)
  2149. end = vma->vm_end;
  2150. end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
  2151. /* Make sure this doesn't exceed the process's max rss. */
  2152. error = -EIO;
  2153. rlim_rss = current->rlim ?  current->rlim[RLIMIT_RSS].rlim_cur :
  2154. LONG_MAX; /* default: see resource.h */
  2155. if ((vma->vm_mm->rss + (end - start)) > rlim_rss)
  2156. return error;
  2157. /* round to cluster boundaries if this isn't a "random" area. */
  2158. if (!VM_RandomReadHint(vma)) {
  2159. start = CLUSTER_OFFSET(start);
  2160. end = CLUSTER_OFFSET(end + CLUSTER_PAGES - 1);
  2161. while ((start < end) && (start < size)) {
  2162. error = read_cluster_nonblocking(file, start, size);
  2163. start += CLUSTER_PAGES;
  2164. if (error < 0)
  2165. break;
  2166. }
  2167. } else {
  2168. while ((start < end) && (start < size)) {
  2169. error = page_cache_read(file, start);
  2170. start++;
  2171. if (error < 0)
  2172. break;
  2173. }
  2174. }
  2175. /* Don't wait for someone else to push these requests. */
  2176. run_task_queue(&tq_disk);
  2177. return error;
  2178. }
  2179. /*
  2180.  * Application no longer needs these pages.  If the pages are dirty,
  2181.  * it's OK to just throw them away.  The app will be more careful about
  2182.  * data it wants to keep.  Be sure to free swap resources too.  The
  2183.  * zap_page_range call sets things up for refill_inactive to actually free
  2184.  * these pages later if no one else has touched them in the meantime,
  2185.  * although we could add these pages to a global reuse list for
  2186.  * refill_inactive to pick up before reclaiming other pages.
  2187.  *
  2188.  * NB: This interface discards data rather than pushes it out to swap,
  2189.  * as some implementations do.  This has performance implications for
  2190.  * applications like large transactional databases which want to discard
  2191.  * pages in anonymous maps after committing to backing store the data
  2192.  * that was kept in them.  There is no reason to write this data out to
  2193.  * the swap area if the application is discarding it.
  2194.  *
  2195.  * An interface that causes the system to free clean pages and flush
  2196.  * dirty pages is already available as msync(MS_INVALIDATE).
  2197.  */
  2198. static long madvise_dontneed(struct vm_area_struct * vma,
  2199. unsigned long start, unsigned long end)
  2200. {
  2201. if (vma->vm_flags & VM_LOCKED)
  2202. return -EINVAL;
  2203. zap_page_range(vma->vm_mm, start, end - start);
  2204. return 0;
  2205. }
  2206. static long madvise_vma(struct vm_area_struct * vma, unsigned long start,
  2207. unsigned long end, int behavior)
  2208. {
  2209. long error = -EBADF;
  2210. switch (behavior) {
  2211. case MADV_NORMAL:
  2212. case MADV_SEQUENTIAL:
  2213. case MADV_RANDOM:
  2214. error = madvise_behavior(vma, start, end, behavior);
  2215. break;
  2216. case MADV_WILLNEED:
  2217. error = madvise_willneed(vma, start, end);
  2218. break;
  2219. case MADV_DONTNEED:
  2220. error = madvise_dontneed(vma, start, end);
  2221. break;
  2222. default:
  2223. error = -EINVAL;
  2224. break;
  2225. }
  2226. return error;
  2227. }
  2228. /*
  2229.  * The madvise(2) system call.
  2230.  *
  2231.  * Applications can use madvise() to advise the kernel how it should
  2232.  * handle paging I/O in this VM area.  The idea is to help the kernel
  2233.  * use appropriate read-ahead and caching techniques.  The information
  2234.  * provided is advisory only, and can be safely disregarded by the
  2235.  * kernel without affecting the correct operation of the application.
  2236.  *
  2237.  * behavior values:
  2238.  *  MADV_NORMAL - the default behavior is to read clusters.  This
  2239.  * results in some read-ahead and read-behind.
  2240.  *  MADV_RANDOM - the system should read the minimum amount of data
  2241.  * on any access, since it is unlikely that the appli-
  2242.  * cation will need more than what it asks for.
  2243.  *  MADV_SEQUENTIAL - pages in the given range will probably be accessed
  2244.  * once, so they can be aggressively read ahead, and
  2245.  * can be freed soon after they are accessed.
  2246.  *  MADV_WILLNEED - the application is notifying the system to read
  2247.  * some pages ahead.
  2248.  *  MADV_DONTNEED - the application is finished with the given range,
  2249.  * so the kernel can free resources associated with it.
  2250.  *
  2251.  * return values:
  2252.  *  zero    - success
  2253.  *  -EINVAL - start + len < 0, start is not page-aligned,
  2254.  * "behavior" is not a valid value, or application
  2255.  * is attempting to release locked or shared pages.
  2256.  *  -ENOMEM - addresses in the specified range are not currently
  2257.  * mapped, or are outside the AS of the process.
  2258.  *  -EIO    - an I/O error occurred while paging in data.
  2259.  *  -EBADF  - map exists, but area maps something that isn't a file.
  2260.  *  -EAGAIN - a kernel resource was temporarily unavailable.
  2261.  */
  2262. asmlinkage long sys_madvise(unsigned long start, size_t len, int behavior)
  2263. {
  2264. unsigned long end;
  2265. struct vm_area_struct * vma;
  2266. int unmapped_error = 0;
  2267. int error = -EINVAL;
  2268. down_write(&current->mm->mmap_sem);
  2269. if (start & ~PAGE_MASK)
  2270. goto out;
  2271. len = (len + ~PAGE_MASK) & PAGE_MASK;
  2272. end = start + len;
  2273. if (end < start)
  2274. goto out;
  2275. error = 0;
  2276. if (end == start)
  2277. goto out;
  2278. /*
  2279.  * If the interval [start,end) covers some unmapped address
  2280.  * ranges, just ignore them, but return -ENOMEM at the end.
  2281.  */
  2282. vma = find_vma(current->mm, start);
  2283. for (;;) {
  2284. /* Still start < end. */
  2285. error = -ENOMEM;
  2286. if (!vma)
  2287. goto out;
  2288. /* Here start < vma->vm_end. */
  2289. if (start < vma->vm_start) {
  2290. unmapped_error = -ENOMEM;
  2291. start = vma->vm_start;
  2292. }
  2293. /* Here vma->vm_start <= start < vma->vm_end. */
  2294. if (end <= vma->vm_end) {
  2295. if (start < end) {
  2296. error = madvise_vma(vma, start, end,
  2297. behavior);
  2298. if (error)
  2299. goto out;
  2300. }
  2301. error = unmapped_error;
  2302. goto out;
  2303. }
  2304. /* Here vma->vm_start <= start < vma->vm_end < end. */
  2305. error = madvise_vma(vma, start, vma->vm_end, behavior);
  2306. if (error)
  2307. goto out;
  2308. start = vma->vm_end;
  2309. vma = vma->vm_next;
  2310. }
  2311. out:
  2312. up_write(&current->mm->mmap_sem);
  2313. return error;
  2314. }
  2315. /*
  2316.  * Later we can get more picky about what "in core" means precisely.
  2317.  * For now, simply check to see if the page is in the page cache,
  2318.  * and is up to date; i.e. that no page-in operation would be required
  2319.  * at this time if an application were to map and access this page.
  2320.  */
  2321. static unsigned char mincore_page(struct vm_area_struct * vma,
  2322. unsigned long pgoff)
  2323. {
  2324. unsigned char present = 0;
  2325. struct address_space * as = vma->vm_file->f_dentry->d_inode->i_mapping;
  2326. struct page * page, ** hash = page_hash(as, pgoff);
  2327. spin_lock(&pagecache_lock);
  2328. page = __find_page_nolock(as, pgoff, *hash);
  2329. if ((page) && (Page_Uptodate(page)))
  2330. present = 1;
  2331. spin_unlock(&pagecache_lock);
  2332. return present;
  2333. }
  2334. static long mincore_vma(struct vm_area_struct * vma,
  2335. unsigned long start, unsigned long end, unsigned char * vec)
  2336. {
  2337. long error, i, remaining;
  2338. unsigned char * tmp;
  2339. error = -ENOMEM;
  2340. if (!vma->vm_file)
  2341. return error;
  2342. start = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
  2343. if (end > vma->vm_end)
  2344. end = vma->vm_end;
  2345. end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
  2346. error = -EAGAIN;
  2347. tmp = (unsigned char *) __get_free_page(GFP_KERNEL);
  2348. if (!tmp)
  2349. return error;
  2350. /* (end - start) is # of pages, and also # of bytes in "vec */
  2351. remaining = (end - start),
  2352. error = 0;
  2353. for (i = 0; remaining > 0; remaining -= PAGE_SIZE, i++) {
  2354. int j = 0;
  2355. long thispiece = (remaining < PAGE_SIZE) ?
  2356. remaining : PAGE_SIZE;
  2357. while (j < thispiece)
  2358. tmp[j++] = mincore_page(vma, start++);
  2359. if (copy_to_user(vec + PAGE_SIZE * i, tmp, thispiece)) {
  2360. error = -EFAULT;
  2361. break;
  2362. }
  2363. }
  2364. free_page((unsigned long) tmp);
  2365. return error;
  2366. }
  2367. /*
  2368.  * The mincore(2) system call.
  2369.  *
  2370.  * mincore() returns the memory residency status of the pages in the
  2371.  * current process's address space specified by [addr, addr + len).
  2372.  * The status is returned in a vector of bytes.  The least significant
  2373.  * bit of each byte is 1 if the referenced page is in memory, otherwise
  2374.  * it is zero.
  2375.  *
  2376.  * Because the status of a page can change after mincore() checks it
  2377.  * but before it returns to the application, the returned vector may
  2378.  * contain stale information.  Only locked pages are guaranteed to
  2379.  * remain in memory.
  2380.  *
  2381.  * return values:
  2382.  *  zero    - success
  2383.  *  -EFAULT - vec points to an illegal address
  2384.  *  -EINVAL - addr is not a multiple of PAGE_CACHE_SIZE,
  2385.  * or len has a nonpositive value
  2386.  *  -ENOMEM - Addresses in the range [addr, addr + len] are
  2387.  * invalid for the address space of this process, or
  2388.  * specify one or more pages which are not currently
  2389.  * mapped
  2390.  *  -EAGAIN - A kernel resource was temporarily unavailable.
  2391.  */
  2392. asmlinkage long sys_mincore(unsigned long start, size_t len,
  2393. unsigned char * vec)
  2394. {
  2395. int index = 0;
  2396. unsigned long end;
  2397. struct vm_area_struct * vma;
  2398. int unmapped_error = 0;
  2399. long error = -EINVAL;
  2400. down_read(&current->mm->mmap_sem);
  2401. if (start & ~PAGE_CACHE_MASK)
  2402. goto out;
  2403. len = (len + ~PAGE_CACHE_MASK) & PAGE_CACHE_MASK;
  2404. end = start + len;
  2405. if (end < start)
  2406. goto out;
  2407. error = 0;
  2408. if (end == start)
  2409. goto out;
  2410. /*
  2411.  * If the interval [start,end) covers some unmapped address
  2412.  * ranges, just ignore them, but return -ENOMEM at the end.
  2413.  */
  2414. vma = find_vma(current->mm, start);
  2415. for (;;) {
  2416. /* Still start < end. */
  2417. error = -ENOMEM;
  2418. if (!vma)
  2419. goto out;
  2420. /* Here start < vma->vm_end. */
  2421. if (start < vma->vm_start) {
  2422. unmapped_error = -ENOMEM;
  2423. start = vma->vm_start;
  2424. }
  2425. /* Here vma->vm_start <= start < vma->vm_end. */
  2426. if (end <= vma->vm_end) {
  2427. if (start < end) {
  2428. error = mincore_vma(vma, start, end,
  2429. &vec[index]);
  2430. if (error)
  2431. goto out;
  2432. }
  2433. error = unmapped_error;
  2434. goto out;
  2435. }
  2436. /* Here vma->vm_start <= start < vma->vm_end < end. */
  2437. error = mincore_vma(vma, start, vma->vm_end, &vec[index]);
  2438. if (error)
  2439. goto out;
  2440. index += (vma->vm_end - start) >> PAGE_CACHE_SHIFT;
  2441. start = vma->vm_end;
  2442. vma = vma->vm_next;
  2443. }
  2444. out:
  2445. up_read(&current->mm->mmap_sem);
  2446. return error;
  2447. }
  2448. static inline
  2449. struct page *__read_cache_page(struct address_space *mapping,
  2450. unsigned long index,
  2451. int (*filler)(void *,struct page*),
  2452. void *data)
  2453. {
  2454. struct page **hash = page_hash(mapping, index);
  2455. struct page *page, *cached_page = NULL;
  2456. int err;
  2457. repeat:
  2458. page = __find_get_page(mapping, index, hash);
  2459. if (!page) {
  2460. if (!cached_page) {
  2461. cached_page = page_cache_alloc(mapping);
  2462. if (!cached_page)
  2463. return ERR_PTR(-ENOMEM);
  2464. }
  2465. page = cached_page;
  2466. if (add_to_page_cache_unique(page, mapping, index, hash))
  2467. goto repeat;
  2468. cached_page = NULL;
  2469. err = filler(data, page);
  2470. if (err < 0) {
  2471. page_cache_release(page);
  2472. page = ERR_PTR(err);
  2473. }
  2474. }
  2475. if (cached_page)
  2476. page_cache_release(cached_page);
  2477. return page;
  2478. }
  2479. /*
  2480.  * Read into the page cache. If a page already exists,
  2481.  * and Page_Uptodate() is not set, try to fill the page.
  2482.  */
  2483. struct page *read_cache_page(struct address_space *mapping,
  2484. unsigned long index,
  2485. int (*filler)(void *,struct page*),
  2486. void *data)
  2487. {
  2488. struct page *page;
  2489. int err;
  2490. retry:
  2491. page = __read_cache_page(mapping, index, filler, data);
  2492. if (IS_ERR(page))
  2493. goto out;
  2494. mark_page_accessed(page);
  2495. if (Page_Uptodate(page))
  2496. goto out;
  2497. lock_page(page);
  2498. if (!page->mapping) {
  2499. UnlockPage(page);
  2500. page_cache_release(page);
  2501. goto retry;
  2502. }
  2503. if (Page_Uptodate(page)) {
  2504. UnlockPage(page);
  2505. goto out;
  2506. }
  2507. err = filler(data, page);
  2508. if (err < 0) {
  2509. page_cache_release(page);
  2510. page = ERR_PTR(err);
  2511. }
  2512.  out:
  2513. return page;
  2514. }
  2515. static inline struct page * __grab_cache_page(struct address_space *mapping,
  2516. unsigned long index, struct page **cached_page)
  2517. {
  2518. struct page *page, **hash = page_hash(mapping, index);
  2519. repeat:
  2520. page = __find_lock_page(mapping, index, hash);
  2521. if (!page) {
  2522. if (!*cached_page) {
  2523. *cached_page = page_cache_alloc(mapping);
  2524. if (!*cached_page)
  2525. return NULL;
  2526. }
  2527. page = *cached_page;
  2528. if (add_to_page_cache_unique(page, mapping, index, hash))
  2529. goto repeat;
  2530. *cached_page = NULL;
  2531. }
  2532. return page;
  2533. }
  2534. inline void remove_suid(struct inode *inode)
  2535. {
  2536. unsigned int mode;
  2537. /* set S_IGID if S_IXGRP is set, and always set S_ISUID */
  2538. mode = (inode->i_mode & S_IXGRP)*(S_ISGID/S_IXGRP) | S_ISUID;
  2539. /* was any of the uid bits set? */
  2540. mode &= inode->i_mode;
  2541. if (mode && !capable(CAP_FSETID)) {
  2542. inode->i_mode &= ~mode;
  2543. mark_inode_dirty(inode);
  2544. }
  2545. }
  2546. /*
  2547.  * Write to a file through the page cache. 
  2548.  *
  2549.  * We currently put everything into the page cache prior to writing it.
  2550.  * This is not a problem when writing full pages. With partial pages,
  2551.  * however, we first have to read the data into the cache, then
  2552.  * dirty the page, and finally schedule it for writing. Alternatively, we
  2553.  * could write-through just the portion of data that would go into that
  2554.  * page, but that would kill performance for applications that write data
  2555.  * line by line, and it's prone to race conditions.
  2556.  *
  2557.  * Note that this routine doesn't try to keep track of dirty pages. Each
  2558.  * file system has to do this all by itself, unfortunately.
  2559.  * okir@monad.swb.de
  2560.  */
  2561. ssize_t
  2562. generic_file_write(struct file *file,const char *buf,size_t count, loff_t *ppos)
  2563. {
  2564. struct address_space *mapping = file->f_dentry->d_inode->i_mapping;
  2565. struct inode *inode = mapping->host;
  2566. unsigned long limit = current->rlim[RLIMIT_FSIZE].rlim_cur;
  2567. loff_t pos;
  2568. struct page *page, *cached_page;
  2569. ssize_t written;
  2570. long status = 0;
  2571. int err;
  2572. unsigned bytes;
  2573. if ((ssize_t) count < 0)
  2574. return -EINVAL;
  2575. if (!access_ok(VERIFY_READ, buf, count))
  2576. return -EFAULT;
  2577. cached_page = NULL;
  2578. down(&inode->i_sem);
  2579. pos = *ppos;
  2580. err = -EINVAL;
  2581. if (pos < 0)
  2582. goto out;
  2583. err = file->f_error;
  2584. if (err) {
  2585. file->f_error = 0;
  2586. goto out;
  2587. }
  2588. written = 0;
  2589. /* FIXME: this is for backwards compatibility with 2.4 */
  2590. if (!S_ISBLK(inode->i_mode) && file->f_flags & O_APPEND)
  2591. pos = inode->i_size;
  2592. /*
  2593.  * Check whether we've reached the file size limit.
  2594.  */
  2595. err = -EFBIG;
  2596. if (!S_ISBLK(inode->i_mode) && limit != RLIM_INFINITY) {
  2597. if (pos >= limit) {
  2598. send_sig(SIGXFSZ, current, 0);
  2599. goto out;
  2600. }
  2601. if (pos > 0xFFFFFFFFULL || count > limit - (u32)pos) {
  2602. /* send_sig(SIGXFSZ, current, 0); */
  2603. count = limit - (u32)pos;
  2604. }
  2605. }
  2606. /*
  2607.  * LFS rule 
  2608.  */
  2609. if ( pos + count > MAX_NON_LFS && !(file->f_flags&O_LARGEFILE)) {
  2610. if (pos >= MAX_NON_LFS) {
  2611. send_sig(SIGXFSZ, current, 0);
  2612. goto out;
  2613. }
  2614. if (count > MAX_NON_LFS - (u32)pos) {
  2615. /* send_sig(SIGXFSZ, current, 0); */
  2616. count = MAX_NON_LFS - (u32)pos;
  2617. }
  2618. }
  2619. /*
  2620.  * Are we about to exceed the fs block limit ?
  2621.  *
  2622.  * If we have written data it becomes a short write
  2623.  * If we have exceeded without writing data we send
  2624.  * a signal and give them an EFBIG.
  2625.  *
  2626.  * Linus frestrict idea will clean these up nicely..
  2627.  */
  2628.  
  2629. if (!S_ISBLK(inode->i_mode)) {
  2630. if (pos >= inode->i_sb->s_maxbytes)
  2631. {
  2632. if (count || pos > inode->i_sb->s_maxbytes) {
  2633. send_sig(SIGXFSZ, current, 0);
  2634. err = -EFBIG;
  2635. goto out;
  2636. }
  2637. /* zero-length writes at ->s_maxbytes are OK */
  2638. }
  2639. if (pos + count > inode->i_sb->s_maxbytes)
  2640. count = inode->i_sb->s_maxbytes - pos;
  2641. } else {
  2642. if (is_read_only(inode->i_rdev)) {
  2643. err = -EPERM;
  2644. goto out;
  2645. }
  2646. if (pos >= inode->i_size) {
  2647. if (count || pos > inode->i_size) {
  2648. err = -ENOSPC;
  2649. goto out;
  2650. }
  2651. }
  2652. if (pos + count > inode->i_size)
  2653. count = inode->i_size - pos;
  2654. }
  2655. err = 0;
  2656. if (count == 0)
  2657. goto out;
  2658. remove_suid(inode);
  2659. inode->i_ctime = inode->i_mtime = CURRENT_TIME;
  2660. mark_inode_dirty_sync(inode);
  2661. if (file->f_flags & O_DIRECT)
  2662. goto o_direct;
  2663. do {
  2664. unsigned long index, offset;
  2665. long page_fault;
  2666. char *kaddr;
  2667. /*
  2668.  * Try to find the page in the cache. If it isn't there,
  2669.  * allocate a free page.
  2670.  */
  2671. offset = (pos & (PAGE_CACHE_SIZE -1)); /* Within page */
  2672. index = pos >> PAGE_CACHE_SHIFT;
  2673. bytes = PAGE_CACHE_SIZE - offset;
  2674. if (bytes > count)
  2675. bytes = count;
  2676. /*
  2677.  * Bring in the user page that we will copy from _first_.
  2678.  * Otherwise there's a nasty deadlock on copying from the
  2679.  * same page as we're writing to, without it being marked
  2680.  * up-to-date.
  2681.  */
  2682. { volatile unsigned char dummy;
  2683. __get_user(dummy, buf);
  2684. __get_user(dummy, buf+bytes-1);
  2685. }
  2686. status = -ENOMEM; /* we'll assign it later anyway */
  2687. page = __grab_cache_page(mapping, index, &cached_page);
  2688. if (!page)
  2689. break;
  2690. /* We have exclusive IO access to the page.. */
  2691. if (!PageLocked(page)) {
  2692. PAGE_BUG(page);
  2693. }
  2694. kaddr = kmap(page);
  2695. status = mapping->a_ops->prepare_write(file, page, offset, offset+bytes);
  2696. if (status)
  2697. goto sync_failure;
  2698. page_fault = __copy_from_user(kaddr+offset, buf, bytes);
  2699. flush_dcache_page(page);
  2700. status = mapping->a_ops->commit_write(file, page, offset, offset+bytes);
  2701. if (page_fault)
  2702. goto fail_write;
  2703. if (!status)
  2704. status = bytes;
  2705. if (status >= 0) {
  2706. written += status;
  2707. count -= status;
  2708. pos += status;
  2709. buf += status;
  2710. }
  2711. unlock:
  2712. kunmap(page);
  2713. /* Mark it unlocked again and drop the page.. */
  2714. SetPageReferenced(page);
  2715. UnlockPage(page);
  2716. page_cache_release(page);
  2717. if (status < 0)
  2718. break;
  2719. } while (count);
  2720. done:
  2721. *ppos = pos;
  2722. if (cached_page)
  2723. page_cache_release(cached_page);
  2724. /* For now, when the user asks for O_SYNC, we'll actually
  2725.  * provide O_DSYNC. */
  2726. if (status >= 0) {
  2727. if ((file->f_flags & O_SYNC) || IS_SYNC(inode))
  2728. status = generic_osync_inode(inode, OSYNC_METADATA|OSYNC_DATA);
  2729. }
  2730. out_status:
  2731. err = written ? written : status;
  2732. out:
  2733. up(&inode->i_sem);
  2734. return err;
  2735. fail_write:
  2736. status = -EFAULT;
  2737. goto unlock;
  2738. sync_failure:
  2739. /*
  2740.  * If blocksize < pagesize, prepare_write() may have instantiated a
  2741.  * few blocks outside i_size.  Trim these off again.
  2742.  */
  2743. kunmap(page);
  2744. UnlockPage(page);
  2745. page_cache_release(page);
  2746. if (pos + bytes > inode->i_size)
  2747. vmtruncate(inode, inode->i_size);
  2748. goto done;
  2749. o_direct:
  2750. written = generic_file_direct_IO(WRITE, file, (char *) buf, count, pos);
  2751. if (written > 0) {
  2752. loff_t end = pos + written;
  2753. if (end > inode->i_size && !S_ISBLK(inode->i_mode)) {
  2754. inode->i_size = end;
  2755. mark_inode_dirty(inode);
  2756. }
  2757. *ppos = end;
  2758. invalidate_inode_pages2(mapping);
  2759. }
  2760. /*
  2761.  * Sync the fs metadata but not the minor inode changes and
  2762.  * of course not the data as we did direct DMA for the IO.
  2763.  */
  2764. if (written >= 0 && file->f_flags & O_SYNC)
  2765. status = generic_osync_inode(inode, OSYNC_METADATA);
  2766. goto out_status;
  2767. }
  2768. void __init page_cache_init(unsigned long mempages)
  2769. {
  2770. unsigned long htable_size, order;
  2771. htable_size = mempages;
  2772. htable_size *= sizeof(struct page *);
  2773. for(order = 0; (PAGE_SIZE << order) < htable_size; order++)
  2774. ;
  2775. do {
  2776. unsigned long tmp = (PAGE_SIZE << order) / sizeof(struct page *);
  2777. page_hash_bits = 0;
  2778. while((tmp >>= 1UL) != 0UL)
  2779. page_hash_bits++;
  2780. page_hash_table = (struct page **)
  2781. __get_free_pages(GFP_ATOMIC, order);
  2782. } while(page_hash_table == NULL && --order > 0);
  2783. printk("Page-cache hash table entries: %d (order: %ld, %ld bytes)n",
  2784.        (1 << page_hash_bits), order, (PAGE_SIZE << order));
  2785. if (!page_hash_table)
  2786. panic("Failed to allocate page hash tablen");
  2787. memset((void *)page_hash_table, 0, PAGE_HASH_SIZE * sizeof(struct page *));
  2788. }