diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/Kconfig.binfmt | 2 | ||||
| -rw-r--r-- | fs/binfmt_elf_fdpic.c | 45 | ||||
| -rw-r--r-- | fs/bio-integrity.c | 1 | ||||
| -rw-r--r-- | fs/buffer.c | 46 | ||||
| -rw-r--r-- | fs/dlm/lock.c | 4 | ||||
| -rw-r--r-- | fs/dlm/lowcomms.c | 4 | ||||
| -rw-r--r-- | fs/dlm/user.c | 2 | ||||
| -rw-r--r-- | fs/ecryptfs/crypto.c | 30 | ||||
| -rw-r--r-- | fs/exec.c | 1 | ||||
| -rw-r--r-- | fs/ext2/inode.c | 1 | ||||
| -rw-r--r-- | fs/ext3/inode.c | 67 | ||||
| -rw-r--r-- | fs/ext4/inode.c | 92 |
12 files changed, 182 insertions, 113 deletions
diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt index 3263084eef9e..4a551af6f3fc 100644 --- a/fs/Kconfig.binfmt +++ b/fs/Kconfig.binfmt | |||
| @@ -30,7 +30,7 @@ config COMPAT_BINFMT_ELF | |||
| 30 | config BINFMT_ELF_FDPIC | 30 | config BINFMT_ELF_FDPIC |
| 31 | bool "Kernel support for FDPIC ELF binaries" | 31 | bool "Kernel support for FDPIC ELF binaries" |
| 32 | default y | 32 | default y |
| 33 | depends on (FRV || BLACKFIN) | 33 | depends on (FRV || BLACKFIN || (SUPERH32 && !MMU)) |
| 34 | help | 34 | help |
| 35 | ELF FDPIC binaries are based on ELF, but allow the individual load | 35 | ELF FDPIC binaries are based on ELF, but allow the individual load |
| 36 | segments of a binary to be located in memory independently of each | 36 | segments of a binary to be located in memory independently of each |
diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c index fdeadab2f18b..80c1f952ef78 100644 --- a/fs/binfmt_elf_fdpic.c +++ b/fs/binfmt_elf_fdpic.c | |||
| @@ -470,6 +470,7 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm, | |||
| 470 | char __user *u_platform, *p; | 470 | char __user *u_platform, *p; |
| 471 | long hwcap; | 471 | long hwcap; |
| 472 | int loop; | 472 | int loop; |
| 473 | int nr; /* reset for each csp adjustment */ | ||
| 473 | 474 | ||
| 474 | /* we're going to shovel a whole load of stuff onto the stack */ | 475 | /* we're going to shovel a whole load of stuff onto the stack */ |
| 475 | #ifdef CONFIG_MMU | 476 | #ifdef CONFIG_MMU |
| @@ -542,10 +543,7 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm, | |||
| 542 | /* force 16 byte _final_ alignment here for generality */ | 543 | /* force 16 byte _final_ alignment here for generality */ |
| 543 | #define DLINFO_ITEMS 13 | 544 | #define DLINFO_ITEMS 13 |
| 544 | 545 | ||
| 545 | nitems = 1 + DLINFO_ITEMS + (k_platform ? 1 : 0); | 546 | nitems = 1 + DLINFO_ITEMS + (k_platform ? 1 : 0) + AT_VECTOR_SIZE_ARCH; |
| 546 | #ifdef DLINFO_ARCH_ITEMS | ||
| 547 | nitems += DLINFO_ARCH_ITEMS; | ||
| 548 | #endif | ||
| 549 | 547 | ||
| 550 | csp = sp; | 548 | csp = sp; |
| 551 | sp -= nitems * 2 * sizeof(unsigned long); | 549 | sp -= nitems * 2 * sizeof(unsigned long); |
| @@ -557,39 +555,46 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm, | |||
| 557 | sp -= sp & 15UL; | 555 | sp -= sp & 15UL; |
| 558 | 556 | ||
| 559 | /* put the ELF interpreter info on the stack */ | 557 | /* put the ELF interpreter info on the stack */ |
| 560 | #define NEW_AUX_ENT(nr, id, val) \ | 558 | #define NEW_AUX_ENT(id, val) \ |
| 561 | do { \ | 559 | do { \ |
| 562 | struct { unsigned long _id, _val; } __user *ent; \ | 560 | struct { unsigned long _id, _val; } __user *ent; \ |
| 563 | \ | 561 | \ |
| 564 | ent = (void __user *) csp; \ | 562 | ent = (void __user *) csp; \ |
| 565 | __put_user((id), &ent[nr]._id); \ | 563 | __put_user((id), &ent[nr]._id); \ |
| 566 | __put_user((val), &ent[nr]._val); \ | 564 | __put_user((val), &ent[nr]._val); \ |
| 565 | nr++; \ | ||
| 567 | } while (0) | 566 | } while (0) |
| 568 | 567 | ||
| 568 | nr = 0; | ||
| 569 | csp -= 2 * sizeof(unsigned long); | 569 | csp -= 2 * sizeof(unsigned long); |
| 570 | NEW_AUX_ENT(0, AT_NULL, 0); | 570 | NEW_AUX_ENT(AT_NULL, 0); |
| 571 | if (k_platform) { | 571 | if (k_platform) { |
| 572 | nr = 0; | ||
| 572 | csp -= 2 * sizeof(unsigned long); | 573 | csp -= 2 * sizeof(unsigned long); |
| 573 | NEW_AUX_ENT(0, AT_PLATFORM, | 574 | NEW_AUX_ENT(AT_PLATFORM, |
| 574 | (elf_addr_t) (unsigned long) u_platform); | 575 | (elf_addr_t) (unsigned long) u_platform); |
| 575 | } | 576 | } |
| 576 | 577 | ||
| 578 | nr = 0; | ||
| 577 | csp -= DLINFO_ITEMS * 2 * sizeof(unsigned long); | 579 | csp -= DLINFO_ITEMS * 2 * sizeof(unsigned long); |
| 578 | NEW_AUX_ENT( 0, AT_HWCAP, hwcap); | 580 | NEW_AUX_ENT(AT_HWCAP, hwcap); |
| 579 | NEW_AUX_ENT( 1, AT_PAGESZ, PAGE_SIZE); | 581 | NEW_AUX_ENT(AT_PAGESZ, PAGE_SIZE); |
| 580 | NEW_AUX_ENT( 2, AT_CLKTCK, CLOCKS_PER_SEC); | 582 | NEW_AUX_ENT(AT_CLKTCK, CLOCKS_PER_SEC); |
| 581 | NEW_AUX_ENT( 3, AT_PHDR, exec_params->ph_addr); | 583 | NEW_AUX_ENT(AT_PHDR, exec_params->ph_addr); |
| 582 | NEW_AUX_ENT( 4, AT_PHENT, sizeof(struct elf_phdr)); | 584 | NEW_AUX_ENT(AT_PHENT, sizeof(struct elf_phdr)); |
| 583 | NEW_AUX_ENT( 5, AT_PHNUM, exec_params->hdr.e_phnum); | 585 | NEW_AUX_ENT(AT_PHNUM, exec_params->hdr.e_phnum); |
| 584 | NEW_AUX_ENT( 6, AT_BASE, interp_params->elfhdr_addr); | 586 | NEW_AUX_ENT(AT_BASE, interp_params->elfhdr_addr); |
| 585 | NEW_AUX_ENT( 7, AT_FLAGS, 0); | 587 | NEW_AUX_ENT(AT_FLAGS, 0); |
| 586 | NEW_AUX_ENT( 8, AT_ENTRY, exec_params->entry_addr); | 588 | NEW_AUX_ENT(AT_ENTRY, exec_params->entry_addr); |
| 587 | NEW_AUX_ENT( 9, AT_UID, (elf_addr_t) current->uid); | 589 | NEW_AUX_ENT(AT_UID, (elf_addr_t) current->uid); |
| 588 | NEW_AUX_ENT(10, AT_EUID, (elf_addr_t) current->euid); | 590 | NEW_AUX_ENT(AT_EUID, (elf_addr_t) current->euid); |
| 589 | NEW_AUX_ENT(11, AT_GID, (elf_addr_t) current->gid); | 591 | NEW_AUX_ENT(AT_GID, (elf_addr_t) current->gid); |
| 590 | NEW_AUX_ENT(12, AT_EGID, (elf_addr_t) current->egid); | 592 | NEW_AUX_ENT(AT_EGID, (elf_addr_t) current->egid); |
| 591 | 593 | ||
| 592 | #ifdef ARCH_DLINFO | 594 | #ifdef ARCH_DLINFO |
| 595 | nr = 0; | ||
| 596 | csp -= AT_VECTOR_SIZE_ARCH * 2 * sizeof(unsigned long); | ||
| 597 | |||
| 593 | /* ARCH_DLINFO must come last so platform specific code can enforce | 598 | /* ARCH_DLINFO must come last so platform specific code can enforce |
| 594 | * special alignment requirements on the AUXV if necessary (eg. PPC). | 599 | * special alignment requirements on the AUXV if necessary (eg. PPC). |
| 595 | */ | 600 | */ |
diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c index 63e2ee63058d..c3e174b35fe6 100644 --- a/fs/bio-integrity.c +++ b/fs/bio-integrity.c | |||
| @@ -705,7 +705,6 @@ void __init bio_integrity_init_slab(void) | |||
| 705 | bio_integrity_slab = KMEM_CACHE(bio_integrity_payload, | 705 | bio_integrity_slab = KMEM_CACHE(bio_integrity_payload, |
| 706 | SLAB_HWCACHE_ALIGN|SLAB_PANIC); | 706 | SLAB_HWCACHE_ALIGN|SLAB_PANIC); |
| 707 | } | 707 | } |
| 708 | EXPORT_SYMBOL(bio_integrity_init_slab); | ||
| 709 | 708 | ||
| 710 | static int __init integrity_init(void) | 709 | static int __init integrity_init(void) |
| 711 | { | 710 | { |
diff --git a/fs/buffer.c b/fs/buffer.c index f95805019639..ca12a6bb82b1 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
| @@ -2096,6 +2096,52 @@ int generic_write_end(struct file *file, struct address_space *mapping, | |||
| 2096 | EXPORT_SYMBOL(generic_write_end); | 2096 | EXPORT_SYMBOL(generic_write_end); |
| 2097 | 2097 | ||
| 2098 | /* | 2098 | /* |
| 2099 | * block_is_partially_uptodate checks whether buffers within a page are | ||
| 2100 | * uptodate or not. | ||
| 2101 | * | ||
| 2102 | * Returns true if all buffers which correspond to a file portion | ||
| 2103 | * we want to read are uptodate. | ||
| 2104 | */ | ||
| 2105 | int block_is_partially_uptodate(struct page *page, read_descriptor_t *desc, | ||
| 2106 | unsigned long from) | ||
| 2107 | { | ||
| 2108 | struct inode *inode = page->mapping->host; | ||
| 2109 | unsigned block_start, block_end, blocksize; | ||
| 2110 | unsigned to; | ||
| 2111 | struct buffer_head *bh, *head; | ||
| 2112 | int ret = 1; | ||
| 2113 | |||
| 2114 | if (!page_has_buffers(page)) | ||
| 2115 | return 0; | ||
| 2116 | |||
| 2117 | blocksize = 1 << inode->i_blkbits; | ||
| 2118 | to = min_t(unsigned, PAGE_CACHE_SIZE - from, desc->count); | ||
| 2119 | to = from + to; | ||
| 2120 | if (from < blocksize && to > PAGE_CACHE_SIZE - blocksize) | ||
| 2121 | return 0; | ||
| 2122 | |||
| 2123 | head = page_buffers(page); | ||
| 2124 | bh = head; | ||
| 2125 | block_start = 0; | ||
| 2126 | do { | ||
| 2127 | block_end = block_start + blocksize; | ||
| 2128 | if (block_end > from && block_start < to) { | ||
| 2129 | if (!buffer_uptodate(bh)) { | ||
| 2130 | ret = 0; | ||
| 2131 | break; | ||
| 2132 | } | ||
| 2133 | if (block_end >= to) | ||
| 2134 | break; | ||
| 2135 | } | ||
| 2136 | block_start = block_end; | ||
| 2137 | bh = bh->b_this_page; | ||
| 2138 | } while (bh != head); | ||
| 2139 | |||
| 2140 | return ret; | ||
| 2141 | } | ||
| 2142 | EXPORT_SYMBOL(block_is_partially_uptodate); | ||
| 2143 | |||
| 2144 | /* | ||
| 2099 | * Generic "read page" function for block devices that have the normal | 2145 | * Generic "read page" function for block devices that have the normal |
| 2100 | * get_block functionality. This is most of the block device filesystems. | 2146 | * get_block functionality. This is most of the block device filesystems. |
| 2101 | * Reads the page asynchronously --- the unlock_buffer() and | 2147 | * Reads the page asynchronously --- the unlock_buffer() and |
diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c index 2d3d1027ce2b..724ddac91538 100644 --- a/fs/dlm/lock.c +++ b/fs/dlm/lock.c | |||
| @@ -363,6 +363,7 @@ static int search_rsb_list(struct list_head *head, char *name, int len, | |||
| 363 | if (len == r->res_length && !memcmp(name, r->res_name, len)) | 363 | if (len == r->res_length && !memcmp(name, r->res_name, len)) |
| 364 | goto found; | 364 | goto found; |
| 365 | } | 365 | } |
| 366 | *r_ret = NULL; | ||
| 366 | return -EBADR; | 367 | return -EBADR; |
| 367 | 368 | ||
| 368 | found: | 369 | found: |
| @@ -1782,7 +1783,8 @@ static void grant_pending_locks(struct dlm_rsb *r) | |||
| 1782 | 1783 | ||
| 1783 | list_for_each_entry_safe(lkb, s, &r->res_grantqueue, lkb_statequeue) { | 1784 | list_for_each_entry_safe(lkb, s, &r->res_grantqueue, lkb_statequeue) { |
| 1784 | if (lkb->lkb_bastfn && lock_requires_bast(lkb, high, cw)) { | 1785 | if (lkb->lkb_bastfn && lock_requires_bast(lkb, high, cw)) { |
| 1785 | if (cw && high == DLM_LOCK_PR) | 1786 | if (cw && high == DLM_LOCK_PR && |
| 1787 | lkb->lkb_grmode == DLM_LOCK_PR) | ||
| 1786 | queue_bast(r, lkb, DLM_LOCK_CW); | 1788 | queue_bast(r, lkb, DLM_LOCK_CW); |
| 1787 | else | 1789 | else |
| 1788 | queue_bast(r, lkb, high); | 1790 | queue_bast(r, lkb, high); |
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index 637018c891ef..3962262f991a 100644 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c | |||
| @@ -891,8 +891,10 @@ static void tcp_connect_to_sock(struct connection *con) | |||
| 891 | goto out_err; | 891 | goto out_err; |
| 892 | 892 | ||
| 893 | memset(&saddr, 0, sizeof(saddr)); | 893 | memset(&saddr, 0, sizeof(saddr)); |
| 894 | if (dlm_nodeid_to_addr(con->nodeid, &saddr)) | 894 | if (dlm_nodeid_to_addr(con->nodeid, &saddr)) { |
| 895 | sock_release(sock); | ||
| 895 | goto out_err; | 896 | goto out_err; |
| 897 | } | ||
| 896 | 898 | ||
| 897 | sock->sk->sk_user_data = con; | 899 | sock->sk->sk_user_data = con; |
| 898 | con->rx_action = receive_from_sock; | 900 | con->rx_action = receive_from_sock; |
diff --git a/fs/dlm/user.c b/fs/dlm/user.c index f976f303c196..929e48ae7591 100644 --- a/fs/dlm/user.c +++ b/fs/dlm/user.c | |||
| @@ -539,7 +539,7 @@ static ssize_t device_write(struct file *file, const char __user *buf, | |||
| 539 | 539 | ||
| 540 | /* do we really need this? can a write happen after a close? */ | 540 | /* do we really need this? can a write happen after a close? */ |
| 541 | if ((kbuf->cmd == DLM_USER_LOCK || kbuf->cmd == DLM_USER_UNLOCK) && | 541 | if ((kbuf->cmd == DLM_USER_LOCK || kbuf->cmd == DLM_USER_UNLOCK) && |
| 542 | test_bit(DLM_PROC_FLAGS_CLOSING, &proc->flags)) | 542 | (proc && test_bit(DLM_PROC_FLAGS_CLOSING, &proc->flags))) |
| 543 | return -EINVAL; | 543 | return -EINVAL; |
| 544 | 544 | ||
| 545 | sigfillset(&allsigs); | 545 | sigfillset(&allsigs); |
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c index 7b99917ffadc..06db79d05c12 100644 --- a/fs/ecryptfs/crypto.c +++ b/fs/ecryptfs/crypto.c | |||
| @@ -475,8 +475,8 @@ int ecryptfs_encrypt_page(struct page *page) | |||
| 475 | { | 475 | { |
| 476 | struct inode *ecryptfs_inode; | 476 | struct inode *ecryptfs_inode; |
| 477 | struct ecryptfs_crypt_stat *crypt_stat; | 477 | struct ecryptfs_crypt_stat *crypt_stat; |
| 478 | char *enc_extent_virt = NULL; | 478 | char *enc_extent_virt; |
| 479 | struct page *enc_extent_page; | 479 | struct page *enc_extent_page = NULL; |
| 480 | loff_t extent_offset; | 480 | loff_t extent_offset; |
| 481 | int rc = 0; | 481 | int rc = 0; |
| 482 | 482 | ||
| @@ -492,14 +492,14 @@ int ecryptfs_encrypt_page(struct page *page) | |||
| 492 | page->index); | 492 | page->index); |
| 493 | goto out; | 493 | goto out; |
| 494 | } | 494 | } |
| 495 | enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER); | 495 | enc_extent_page = alloc_page(GFP_USER); |
| 496 | if (!enc_extent_virt) { | 496 | if (!enc_extent_page) { |
| 497 | rc = -ENOMEM; | 497 | rc = -ENOMEM; |
| 498 | ecryptfs_printk(KERN_ERR, "Error allocating memory for " | 498 | ecryptfs_printk(KERN_ERR, "Error allocating memory for " |
| 499 | "encrypted extent\n"); | 499 | "encrypted extent\n"); |
| 500 | goto out; | 500 | goto out; |
| 501 | } | 501 | } |
| 502 | enc_extent_page = virt_to_page(enc_extent_virt); | 502 | enc_extent_virt = kmap(enc_extent_page); |
| 503 | for (extent_offset = 0; | 503 | for (extent_offset = 0; |
| 504 | extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size); | 504 | extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size); |
| 505 | extent_offset++) { | 505 | extent_offset++) { |
| @@ -527,7 +527,10 @@ int ecryptfs_encrypt_page(struct page *page) | |||
| 527 | } | 527 | } |
| 528 | } | 528 | } |
| 529 | out: | 529 | out: |
| 530 | kfree(enc_extent_virt); | 530 | if (enc_extent_page) { |
| 531 | kunmap(enc_extent_page); | ||
| 532 | __free_page(enc_extent_page); | ||
| 533 | } | ||
| 531 | return rc; | 534 | return rc; |
| 532 | } | 535 | } |
| 533 | 536 | ||
| @@ -609,8 +612,8 @@ int ecryptfs_decrypt_page(struct page *page) | |||
| 609 | { | 612 | { |
| 610 | struct inode *ecryptfs_inode; | 613 | struct inode *ecryptfs_inode; |
| 611 | struct ecryptfs_crypt_stat *crypt_stat; | 614 | struct ecryptfs_crypt_stat *crypt_stat; |
| 612 | char *enc_extent_virt = NULL; | 615 | char *enc_extent_virt; |
| 613 | struct page *enc_extent_page; | 616 | struct page *enc_extent_page = NULL; |
| 614 | unsigned long extent_offset; | 617 | unsigned long extent_offset; |
| 615 | int rc = 0; | 618 | int rc = 0; |
| 616 | 619 | ||
| @@ -627,14 +630,14 @@ int ecryptfs_decrypt_page(struct page *page) | |||
| 627 | page->index); | 630 | page->index); |
| 628 | goto out; | 631 | goto out; |
| 629 | } | 632 | } |
| 630 | enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER); | 633 | enc_extent_page = alloc_page(GFP_USER); |
| 631 | if (!enc_extent_virt) { | 634 | if (!enc_extent_page) { |
| 632 | rc = -ENOMEM; | 635 | rc = -ENOMEM; |
| 633 | ecryptfs_printk(KERN_ERR, "Error allocating memory for " | 636 | ecryptfs_printk(KERN_ERR, "Error allocating memory for " |
| 634 | "encrypted extent\n"); | 637 | "encrypted extent\n"); |
| 635 | goto out; | 638 | goto out; |
| 636 | } | 639 | } |
| 637 | enc_extent_page = virt_to_page(enc_extent_virt); | 640 | enc_extent_virt = kmap(enc_extent_page); |
| 638 | for (extent_offset = 0; | 641 | for (extent_offset = 0; |
| 639 | extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size); | 642 | extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size); |
| 640 | extent_offset++) { | 643 | extent_offset++) { |
| @@ -662,7 +665,10 @@ int ecryptfs_decrypt_page(struct page *page) | |||
| 662 | } | 665 | } |
| 663 | } | 666 | } |
| 664 | out: | 667 | out: |
| 665 | kfree(enc_extent_virt); | 668 | if (enc_extent_page) { |
| 669 | kunmap(enc_extent_page); | ||
| 670 | __free_page(enc_extent_page); | ||
| 671 | } | ||
| 666 | return rc; | 672 | return rc; |
| 667 | } | 673 | } |
| 668 | 674 | ||
| @@ -32,6 +32,7 @@ | |||
| 32 | #include <linux/swap.h> | 32 | #include <linux/swap.h> |
| 33 | #include <linux/string.h> | 33 | #include <linux/string.h> |
| 34 | #include <linux/init.h> | 34 | #include <linux/init.h> |
| 35 | #include <linux/pagemap.h> | ||
| 35 | #include <linux/highmem.h> | 36 | #include <linux/highmem.h> |
| 36 | #include <linux/spinlock.h> | 37 | #include <linux/spinlock.h> |
| 37 | #include <linux/key.h> | 38 | #include <linux/key.h> |
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 384fc0d1dd74..991d6dfeb51f 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c | |||
| @@ -791,6 +791,7 @@ const struct address_space_operations ext2_aops = { | |||
| 791 | .direct_IO = ext2_direct_IO, | 791 | .direct_IO = ext2_direct_IO, |
| 792 | .writepages = ext2_writepages, | 792 | .writepages = ext2_writepages, |
| 793 | .migratepage = buffer_migrate_page, | 793 | .migratepage = buffer_migrate_page, |
| 794 | .is_partially_uptodate = block_is_partially_uptodate, | ||
| 794 | }; | 795 | }; |
| 795 | 796 | ||
| 796 | const struct address_space_operations ext2_aops_xip = { | 797 | const struct address_space_operations ext2_aops_xip = { |
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index 3bf07d70b914..507d8689b111 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c | |||
| @@ -1767,44 +1767,47 @@ static int ext3_journalled_set_page_dirty(struct page *page) | |||
| 1767 | } | 1767 | } |
| 1768 | 1768 | ||
| 1769 | static const struct address_space_operations ext3_ordered_aops = { | 1769 | static const struct address_space_operations ext3_ordered_aops = { |
| 1770 | .readpage = ext3_readpage, | 1770 | .readpage = ext3_readpage, |
| 1771 | .readpages = ext3_readpages, | 1771 | .readpages = ext3_readpages, |
| 1772 | .writepage = ext3_ordered_writepage, | 1772 | .writepage = ext3_ordered_writepage, |
| 1773 | .sync_page = block_sync_page, | 1773 | .sync_page = block_sync_page, |
| 1774 | .write_begin = ext3_write_begin, | 1774 | .write_begin = ext3_write_begin, |
| 1775 | .write_end = ext3_ordered_write_end, | 1775 | .write_end = ext3_ordered_write_end, |
| 1776 | .bmap = ext3_bmap, | 1776 | .bmap = ext3_bmap, |
| 1777 | .invalidatepage = ext3_invalidatepage, | 1777 | .invalidatepage = ext3_invalidatepage, |
| 1778 | .releasepage = ext3_releasepage, | 1778 | .releasepage = ext3_releasepage, |
| 1779 | .direct_IO = ext3_direct_IO, | 1779 | .direct_IO = ext3_direct_IO, |
| 1780 | .migratepage = buffer_migrate_page, | 1780 | .migratepage = buffer_migrate_page, |
| 1781 | .is_partially_uptodate = block_is_partially_uptodate, | ||
| 1781 | }; | 1782 | }; |
| 1782 | 1783 | ||
| 1783 | static const struct address_space_operations ext3_writeback_aops = { | 1784 | static const struct address_space_operations ext3_writeback_aops = { |
| 1784 | .readpage = ext3_readpage, | 1785 | .readpage = ext3_readpage, |
| 1785 | .readpages = ext3_readpages, | 1786 | .readpages = ext3_readpages, |
| 1786 | .writepage = ext3_writeback_writepage, | 1787 | .writepage = ext3_writeback_writepage, |
| 1787 | .sync_page = block_sync_page, | 1788 | .sync_page = block_sync_page, |
| 1788 | .write_begin = ext3_write_begin, | 1789 | .write_begin = ext3_write_begin, |
| 1789 | .write_end = ext3_writeback_write_end, | 1790 | .write_end = ext3_writeback_write_end, |
| 1790 | .bmap = ext3_bmap, | 1791 | .bmap = ext3_bmap, |
| 1791 | .invalidatepage = ext3_invalidatepage, | 1792 | .invalidatepage = ext3_invalidatepage, |
| 1792 | .releasepage = ext3_releasepage, | 1793 | .releasepage = ext3_releasepage, |
| 1793 | .direct_IO = ext3_direct_IO, | 1794 | .direct_IO = ext3_direct_IO, |
| 1794 | .migratepage = buffer_migrate_page, | 1795 | .migratepage = buffer_migrate_page, |
| 1796 | .is_partially_uptodate = block_is_partially_uptodate, | ||
| 1795 | }; | 1797 | }; |
| 1796 | 1798 | ||
| 1797 | static const struct address_space_operations ext3_journalled_aops = { | 1799 | static const struct address_space_operations ext3_journalled_aops = { |
| 1798 | .readpage = ext3_readpage, | 1800 | .readpage = ext3_readpage, |
| 1799 | .readpages = ext3_readpages, | 1801 | .readpages = ext3_readpages, |
| 1800 | .writepage = ext3_journalled_writepage, | 1802 | .writepage = ext3_journalled_writepage, |
| 1801 | .sync_page = block_sync_page, | 1803 | .sync_page = block_sync_page, |
| 1802 | .write_begin = ext3_write_begin, | 1804 | .write_begin = ext3_write_begin, |
| 1803 | .write_end = ext3_journalled_write_end, | 1805 | .write_end = ext3_journalled_write_end, |
| 1804 | .set_page_dirty = ext3_journalled_set_page_dirty, | 1806 | .set_page_dirty = ext3_journalled_set_page_dirty, |
| 1805 | .bmap = ext3_bmap, | 1807 | .bmap = ext3_bmap, |
| 1806 | .invalidatepage = ext3_invalidatepage, | 1808 | .invalidatepage = ext3_invalidatepage, |
| 1807 | .releasepage = ext3_releasepage, | 1809 | .releasepage = ext3_releasepage, |
| 1810 | .is_partially_uptodate = block_is_partially_uptodate, | ||
| 1808 | }; | 1811 | }; |
| 1809 | 1812 | ||
| 1810 | void ext3_set_aops(struct inode *inode) | 1813 | void ext3_set_aops(struct inode *inode) |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 8ca2763df091..9843b046c235 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
| @@ -2806,59 +2806,63 @@ static int ext4_journalled_set_page_dirty(struct page *page) | |||
| 2806 | } | 2806 | } |
| 2807 | 2807 | ||
| 2808 | static const struct address_space_operations ext4_ordered_aops = { | 2808 | static const struct address_space_operations ext4_ordered_aops = { |
| 2809 | .readpage = ext4_readpage, | 2809 | .readpage = ext4_readpage, |
| 2810 | .readpages = ext4_readpages, | 2810 | .readpages = ext4_readpages, |
| 2811 | .writepage = ext4_normal_writepage, | 2811 | .writepage = ext4_normal_writepage, |
| 2812 | .sync_page = block_sync_page, | 2812 | .sync_page = block_sync_page, |
| 2813 | .write_begin = ext4_write_begin, | 2813 | .write_begin = ext4_write_begin, |
| 2814 | .write_end = ext4_ordered_write_end, | 2814 | .write_end = ext4_ordered_write_end, |
| 2815 | .bmap = ext4_bmap, | 2815 | .bmap = ext4_bmap, |
| 2816 | .invalidatepage = ext4_invalidatepage, | 2816 | .invalidatepage = ext4_invalidatepage, |
| 2817 | .releasepage = ext4_releasepage, | 2817 | .releasepage = ext4_releasepage, |
| 2818 | .direct_IO = ext4_direct_IO, | 2818 | .direct_IO = ext4_direct_IO, |
| 2819 | .migratepage = buffer_migrate_page, | 2819 | .migratepage = buffer_migrate_page, |
| 2820 | .is_partially_uptodate = block_is_partially_uptodate, | ||
| 2820 | }; | 2821 | }; |
| 2821 | 2822 | ||
| 2822 | static const struct address_space_operations ext4_writeback_aops = { | 2823 | static const struct address_space_operations ext4_writeback_aops = { |
| 2823 | .readpage = ext4_readpage, | 2824 | .readpage = ext4_readpage, |
| 2824 | .readpages = ext4_readpages, | 2825 | .readpages = ext4_readpages, |
| 2825 | .writepage = ext4_normal_writepage, | 2826 | .writepage = ext4_normal_writepage, |
| 2826 | .sync_page = block_sync_page, | 2827 | .sync_page = block_sync_page, |
| 2827 | .write_begin = ext4_write_begin, | 2828 | .write_begin = ext4_write_begin, |
| 2828 | .write_end = ext4_writeback_write_end, | 2829 | .write_end = ext4_writeback_write_end, |
| 2829 | .bmap = ext4_bmap, | 2830 | .bmap = ext4_bmap, |
| 2830 | .invalidatepage = ext4_invalidatepage, | 2831 | .invalidatepage = ext4_invalidatepage, |
| 2831 | .releasepage = ext4_releasepage, | 2832 | .releasepage = ext4_releasepage, |
| 2832 | .direct_IO = ext4_direct_IO, | 2833 | .direct_IO = ext4_direct_IO, |
| 2833 | .migratepage = buffer_migrate_page, | 2834 | .migratepage = buffer_migrate_page, |
| 2835 | .is_partially_uptodate = block_is_partially_uptodate, | ||
| 2834 | }; | 2836 | }; |
| 2835 | 2837 | ||
| 2836 | static const struct address_space_operations ext4_journalled_aops = { | 2838 | static const struct address_space_operations ext4_journalled_aops = { |
| 2837 | .readpage = ext4_readpage, | 2839 | .readpage = ext4_readpage, |
| 2838 | .readpages = ext4_readpages, | 2840 | .readpages = ext4_readpages, |
| 2839 | .writepage = ext4_journalled_writepage, | 2841 | .writepage = ext4_journalled_writepage, |
| 2840 | .sync_page = block_sync_page, | 2842 | .sync_page = block_sync_page, |
| 2841 | .write_begin = ext4_write_begin, | 2843 | .write_begin = ext4_write_begin, |
| 2842 | .write_end = ext4_journalled_write_end, | 2844 | .write_end = ext4_journalled_write_end, |
| 2843 | .set_page_dirty = ext4_journalled_set_page_dirty, | 2845 | .set_page_dirty = ext4_journalled_set_page_dirty, |
| 2844 | .bmap = ext4_bmap, | 2846 | .bmap = ext4_bmap, |
| 2845 | .invalidatepage = ext4_invalidatepage, | 2847 | .invalidatepage = ext4_invalidatepage, |
| 2846 | .releasepage = ext4_releasepage, | 2848 | .releasepage = ext4_releasepage, |
| 2849 | .is_partially_uptodate = block_is_partially_uptodate, | ||
| 2847 | }; | 2850 | }; |
| 2848 | 2851 | ||
| 2849 | static const struct address_space_operations ext4_da_aops = { | 2852 | static const struct address_space_operations ext4_da_aops = { |
| 2850 | .readpage = ext4_readpage, | 2853 | .readpage = ext4_readpage, |
| 2851 | .readpages = ext4_readpages, | 2854 | .readpages = ext4_readpages, |
| 2852 | .writepage = ext4_da_writepage, | 2855 | .writepage = ext4_da_writepage, |
| 2853 | .writepages = ext4_da_writepages, | 2856 | .writepages = ext4_da_writepages, |
| 2854 | .sync_page = block_sync_page, | 2857 | .sync_page = block_sync_page, |
| 2855 | .write_begin = ext4_da_write_begin, | 2858 | .write_begin = ext4_da_write_begin, |
| 2856 | .write_end = ext4_da_write_end, | 2859 | .write_end = ext4_da_write_end, |
| 2857 | .bmap = ext4_bmap, | 2860 | .bmap = ext4_bmap, |
| 2858 | .invalidatepage = ext4_da_invalidatepage, | 2861 | .invalidatepage = ext4_da_invalidatepage, |
| 2859 | .releasepage = ext4_releasepage, | 2862 | .releasepage = ext4_releasepage, |
| 2860 | .direct_IO = ext4_direct_IO, | 2863 | .direct_IO = ext4_direct_IO, |
| 2861 | .migratepage = buffer_migrate_page, | 2864 | .migratepage = buffer_migrate_page, |
| 2865 | .is_partially_uptodate = block_is_partially_uptodate, | ||
| 2862 | }; | 2866 | }; |
| 2863 | 2867 | ||
| 2864 | void ext4_set_aops(struct inode *inode) | 2868 | void ext4_set_aops(struct inode *inode) |
