diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-26 13:50:56 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-26 13:50:56 -0400 |
commit | f8d613e2a665bf1be9628a3c3f9bafe7599b32c0 (patch) | |
tree | 98d4da8d0e1a5fb1d9064626b4b96d95ccf26375 /fs | |
parent | 8a0599dd2471f2a2e409498c08a0ab339057ad06 (diff) | |
parent | 5bc20fc59706214d9591c11e1938a629d3538c12 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/djm/tmem
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/djm/tmem:
xen: cleancache shim to Xen Transcendent Memory
ocfs2: add cleancache support
ext4: add cleancache support
btrfs: add cleancache support
ext3: add cleancache support
mm/fs: add hooks to support cleancache
mm: cleancache core ops functions and config
fs: add field to superblock to support cleancache
mm/fs: cleancache documentation
Fix up trivial conflict in fs/btrfs/extent_io.c due to includes
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/extent_io.c | 9 | ||||
-rw-r--r-- | fs/btrfs/super.c | 2 | ||||
-rw-r--r-- | fs/buffer.c | 5 | ||||
-rw-r--r-- | fs/ext3/super.c | 2 | ||||
-rw-r--r-- | fs/ext4/super.c | 2 | ||||
-rw-r--r-- | fs/mpage.c | 7 | ||||
-rw-r--r-- | fs/ocfs2/super.c | 2 | ||||
-rw-r--r-- | fs/super.c | 3 |
8 files changed, 32 insertions, 0 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 96fcfa522dab..4f9893243dae 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/writeback.h> | 11 | #include <linux/writeback.h> |
12 | #include <linux/pagevec.h> | 12 | #include <linux/pagevec.h> |
13 | #include <linux/prefetch.h> | 13 | #include <linux/prefetch.h> |
14 | #include <linux/cleancache.h> | ||
14 | #include "extent_io.h" | 15 | #include "extent_io.h" |
15 | #include "extent_map.h" | 16 | #include "extent_map.h" |
16 | #include "compat.h" | 17 | #include "compat.h" |
@@ -2016,6 +2017,13 @@ static int __extent_read_full_page(struct extent_io_tree *tree, | |||
2016 | 2017 | ||
2017 | set_page_extent_mapped(page); | 2018 | set_page_extent_mapped(page); |
2018 | 2019 | ||
2020 | if (!PageUptodate(page)) { | ||
2021 | if (cleancache_get_page(page) == 0) { | ||
2022 | BUG_ON(blocksize != PAGE_SIZE); | ||
2023 | goto out; | ||
2024 | } | ||
2025 | } | ||
2026 | |||
2019 | end = page_end; | 2027 | end = page_end; |
2020 | while (1) { | 2028 | while (1) { |
2021 | lock_extent(tree, start, end, GFP_NOFS); | 2029 | lock_extent(tree, start, end, GFP_NOFS); |
@@ -2149,6 +2157,7 @@ static int __extent_read_full_page(struct extent_io_tree *tree, | |||
2149 | cur = cur + iosize; | 2157 | cur = cur + iosize; |
2150 | page_offset += iosize; | 2158 | page_offset += iosize; |
2151 | } | 2159 | } |
2160 | out: | ||
2152 | if (!nr) { | 2161 | if (!nr) { |
2153 | if (!PageError(page)) | 2162 | if (!PageError(page)) |
2154 | SetPageUptodate(page); | 2163 | SetPageUptodate(page); |
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 0ac712efcdf2..be4ffa12f3ef 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <linux/miscdevice.h> | 39 | #include <linux/miscdevice.h> |
40 | #include <linux/magic.h> | 40 | #include <linux/magic.h> |
41 | #include <linux/slab.h> | 41 | #include <linux/slab.h> |
42 | #include <linux/cleancache.h> | ||
42 | #include "compat.h" | 43 | #include "compat.h" |
43 | #include "ctree.h" | 44 | #include "ctree.h" |
44 | #include "disk-io.h" | 45 | #include "disk-io.h" |
@@ -624,6 +625,7 @@ static int btrfs_fill_super(struct super_block *sb, | |||
624 | sb->s_root = root_dentry; | 625 | sb->s_root = root_dentry; |
625 | 626 | ||
626 | save_mount_options(sb, data); | 627 | save_mount_options(sb, data); |
628 | cleancache_init_fs(sb); | ||
627 | return 0; | 629 | return 0; |
628 | 630 | ||
629 | fail_close: | 631 | fail_close: |
diff --git a/fs/buffer.c b/fs/buffer.c index b0675bfe8207..698c6b2cc462 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <linux/bitops.h> | 41 | #include <linux/bitops.h> |
42 | #include <linux/mpage.h> | 42 | #include <linux/mpage.h> |
43 | #include <linux/bit_spinlock.h> | 43 | #include <linux/bit_spinlock.h> |
44 | #include <linux/cleancache.h> | ||
44 | 45 | ||
45 | static int fsync_buffers_list(spinlock_t *lock, struct list_head *list); | 46 | static int fsync_buffers_list(spinlock_t *lock, struct list_head *list); |
46 | 47 | ||
@@ -269,6 +270,10 @@ void invalidate_bdev(struct block_device *bdev) | |||
269 | invalidate_bh_lrus(); | 270 | invalidate_bh_lrus(); |
270 | lru_add_drain_all(); /* make sure all lru add caches are flushed */ | 271 | lru_add_drain_all(); /* make sure all lru add caches are flushed */ |
271 | invalidate_mapping_pages(mapping, 0, -1); | 272 | invalidate_mapping_pages(mapping, 0, -1); |
273 | /* 99% of the time, we don't need to flush the cleancache on the bdev. | ||
274 | * But, for the strange corners, lets be cautious | ||
275 | */ | ||
276 | cleancache_flush_inode(mapping); | ||
272 | } | 277 | } |
273 | EXPORT_SYMBOL(invalidate_bdev); | 278 | EXPORT_SYMBOL(invalidate_bdev); |
274 | 279 | ||
diff --git a/fs/ext3/super.c b/fs/ext3/super.c index 3c6a9e0eadc1..aad153ef6b78 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/quotaops.h> | 36 | #include <linux/quotaops.h> |
37 | #include <linux/seq_file.h> | 37 | #include <linux/seq_file.h> |
38 | #include <linux/log2.h> | 38 | #include <linux/log2.h> |
39 | #include <linux/cleancache.h> | ||
39 | 40 | ||
40 | #include <asm/uaccess.h> | 41 | #include <asm/uaccess.h> |
41 | 42 | ||
@@ -1367,6 +1368,7 @@ static int ext3_setup_super(struct super_block *sb, struct ext3_super_block *es, | |||
1367 | } else { | 1368 | } else { |
1368 | ext3_msg(sb, KERN_INFO, "using internal journal"); | 1369 | ext3_msg(sb, KERN_INFO, "using internal journal"); |
1369 | } | 1370 | } |
1371 | cleancache_init_fs(sb); | ||
1370 | return res; | 1372 | return res; |
1371 | } | 1373 | } |
1372 | 1374 | ||
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index d9937df7f5cf..cc5c157aa11d 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <linux/ctype.h> | 38 | #include <linux/ctype.h> |
39 | #include <linux/log2.h> | 39 | #include <linux/log2.h> |
40 | #include <linux/crc16.h> | 40 | #include <linux/crc16.h> |
41 | #include <linux/cleancache.h> | ||
41 | #include <asm/uaccess.h> | 42 | #include <asm/uaccess.h> |
42 | 43 | ||
43 | #include <linux/kthread.h> | 44 | #include <linux/kthread.h> |
@@ -1948,6 +1949,7 @@ static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es, | |||
1948 | EXT4_INODES_PER_GROUP(sb), | 1949 | EXT4_INODES_PER_GROUP(sb), |
1949 | sbi->s_mount_opt, sbi->s_mount_opt2); | 1950 | sbi->s_mount_opt, sbi->s_mount_opt2); |
1950 | 1951 | ||
1952 | cleancache_init_fs(sb); | ||
1951 | return res; | 1953 | return res; |
1952 | } | 1954 | } |
1953 | 1955 | ||
diff --git a/fs/mpage.c b/fs/mpage.c index 0afc809e46e0..fdfae9fa98cd 100644 --- a/fs/mpage.c +++ b/fs/mpage.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/writeback.h> | 27 | #include <linux/writeback.h> |
28 | #include <linux/backing-dev.h> | 28 | #include <linux/backing-dev.h> |
29 | #include <linux/pagevec.h> | 29 | #include <linux/pagevec.h> |
30 | #include <linux/cleancache.h> | ||
30 | 31 | ||
31 | /* | 32 | /* |
32 | * I/O completion handler for multipage BIOs. | 33 | * I/O completion handler for multipage BIOs. |
@@ -271,6 +272,12 @@ do_mpage_readpage(struct bio *bio, struct page *page, unsigned nr_pages, | |||
271 | SetPageMappedToDisk(page); | 272 | SetPageMappedToDisk(page); |
272 | } | 273 | } |
273 | 274 | ||
275 | if (fully_mapped && blocks_per_page == 1 && !PageUptodate(page) && | ||
276 | cleancache_get_page(page) == 0) { | ||
277 | SetPageUptodate(page); | ||
278 | goto confused; | ||
279 | } | ||
280 | |||
274 | /* | 281 | /* |
275 | * This page will go to BIO. Do we need to send this BIO off first? | 282 | * This page will go to BIO. Do we need to send this BIO off first? |
276 | */ | 283 | */ |
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index 5a521c748859..4129fb671d71 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <linux/mount.h> | 41 | #include <linux/mount.h> |
42 | #include <linux/seq_file.h> | 42 | #include <linux/seq_file.h> |
43 | #include <linux/quotaops.h> | 43 | #include <linux/quotaops.h> |
44 | #include <linux/cleancache.h> | ||
44 | 45 | ||
45 | #define CREATE_TRACE_POINTS | 46 | #define CREATE_TRACE_POINTS |
46 | #include "ocfs2_trace.h" | 47 | #include "ocfs2_trace.h" |
@@ -2352,6 +2353,7 @@ static int ocfs2_initialize_super(struct super_block *sb, | |||
2352 | mlog_errno(status); | 2353 | mlog_errno(status); |
2353 | goto bail; | 2354 | goto bail; |
2354 | } | 2355 | } |
2356 | cleancache_init_shared_fs((char *)&uuid_net_key, sb); | ||
2355 | 2357 | ||
2356 | bail: | 2358 | bail: |
2357 | return status; | 2359 | return status; |
diff --git a/fs/super.c b/fs/super.c index c04f7e0b7ed2..c75593953c52 100644 --- a/fs/super.c +++ b/fs/super.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/mutex.h> | 31 | #include <linux/mutex.h> |
32 | #include <linux/backing-dev.h> | 32 | #include <linux/backing-dev.h> |
33 | #include <linux/rculist_bl.h> | 33 | #include <linux/rculist_bl.h> |
34 | #include <linux/cleancache.h> | ||
34 | #include "internal.h" | 35 | #include "internal.h" |
35 | 36 | ||
36 | 37 | ||
@@ -112,6 +113,7 @@ static struct super_block *alloc_super(struct file_system_type *type) | |||
112 | s->s_maxbytes = MAX_NON_LFS; | 113 | s->s_maxbytes = MAX_NON_LFS; |
113 | s->s_op = &default_op; | 114 | s->s_op = &default_op; |
114 | s->s_time_gran = 1000000000; | 115 | s->s_time_gran = 1000000000; |
116 | s->cleancache_poolid = -1; | ||
115 | } | 117 | } |
116 | out: | 118 | out: |
117 | return s; | 119 | return s; |
@@ -177,6 +179,7 @@ void deactivate_locked_super(struct super_block *s) | |||
177 | { | 179 | { |
178 | struct file_system_type *fs = s->s_type; | 180 | struct file_system_type *fs = s->s_type; |
179 | if (atomic_dec_and_test(&s->s_active)) { | 181 | if (atomic_dec_and_test(&s->s_active)) { |
182 | cleancache_flush_fs(s); | ||
180 | fs->kill_sb(s); | 183 | fs->kill_sb(s); |
181 | /* | 184 | /* |
182 | * We need to call rcu_barrier so all the delayed rcu free | 185 | * We need to call rcu_barrier so all the delayed rcu free |