diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-31 20:46:07 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-31 20:46:07 -0400 |
commit | 094803e0aab3fe75bbf8202a8f4b5280eaade375 (patch) | |
tree | 278528ca9245a767fcfcfa97d977bd5714c082fd /fs | |
parent | 32087d4eeca14b82660dab288b1d659963b954bd (diff) | |
parent | d8805e633e054c816c47cb6e727c81f156d9253d (diff) |
Merge branch 'akpm' (Andrew's incoming)
Quoth Andrew:
- Most of MM. Still waiting for the poweroc guys to get off their
butts and review some threaded hugepages patches.
- alpha
- vfs bits
- drivers/misc
- a few core kerenl tweaks
- printk() features
- MAINTAINERS updates
- backlight merge
- leds merge
- various lib/ updates
- checkpatch updates
* akpm: (127 commits)
epoll: fix spurious lockdep warnings
checkpatch: add a --strict check for utf-8 in commit logs
kernel.h/checkpatch: mark strict_strto<foo> and simple_strto<foo> as obsolete
llist-return-whether-list-is-empty-before-adding-in-llist_add-fix
wireless: at76c50x: follow rename pack_hex_byte to hex_byte_pack
fat: follow rename pack_hex_byte() to hex_byte_pack()
security: follow rename pack_hex_byte() to hex_byte_pack()
kgdb: follow rename pack_hex_byte() to hex_byte_pack()
lib: rename pack_hex_byte() to hex_byte_pack()
lib/string.c: fix strim() semantics for strings that have only blanks
lib/idr.c: fix comment for ida_get_new_above()
lib/percpu_counter.c: enclose hotplug only variables in hotplug ifdef
lib/bitmap.c: quiet sparse noise about address space
lib/spinlock_debug.c: print owner on spinlock lockup
lib/kstrtox: common code between kstrto*() and simple_strto*() functions
drivers/leds/leds-lp5521.c: check if reset is successful
leds: turn the blink_timer off before starting to blink
leds: save the delay values after a successful call to blink_set()
drivers/leds/leds-gpio.c: use gpio_get_value_cansleep() when initializing
drivers/leds/leds-lm3530.c: add __devexit_p where needed
...
Diffstat (limited to 'fs')
-rw-r--r-- | fs/Kconfig | 2 | ||||
-rw-r--r-- | fs/aio.c | 4 | ||||
-rw-r--r-- | fs/buffer.c | 5 | ||||
-rw-r--r-- | fs/compat.c | 7 | ||||
-rw-r--r-- | fs/ecryptfs/ecryptfs_kernel.h | 2 | ||||
-rw-r--r-- | fs/eventpoll.c | 25 | ||||
-rw-r--r-- | fs/exec.c | 4 | ||||
-rw-r--r-- | fs/ext2/ext2.h | 8 | ||||
-rw-r--r-- | fs/ext4/ext4.h | 44 | ||||
-rw-r--r-- | fs/ext4/inode.c | 6 | ||||
-rw-r--r-- | fs/fat/dir.c | 4 | ||||
-rw-r--r-- | fs/fat/fat.h | 9 | ||||
-rw-r--r-- | fs/gfs2/glock.h | 2 | ||||
-rw-r--r-- | fs/hpfs/hpfs_fn.h | 4 | ||||
-rw-r--r-- | fs/logfs/logfs.h | 1 | ||||
-rw-r--r-- | fs/logfs/super.c | 22 | ||||
-rw-r--r-- | fs/nilfs2/nilfs.h | 8 | ||||
-rw-r--r-- | fs/ntfs/debug.h | 15 | ||||
-rw-r--r-- | fs/ocfs2/super.h | 14 | ||||
-rw-r--r-- | fs/partitions/ldm.c | 16 | ||||
-rw-r--r-- | fs/pipe.c | 1 | ||||
-rw-r--r-- | fs/proc/base.c | 13 | ||||
-rw-r--r-- | fs/proc/task_mmu.c | 5 | ||||
-rw-r--r-- | fs/read_write.c | 8 | ||||
-rw-r--r-- | fs/super.c | 2 | ||||
-rw-r--r-- | fs/udf/udfdecl.h | 4 | ||||
-rw-r--r-- | fs/ufs/ufs.h | 9 | ||||
-rw-r--r-- | fs/xfs/xfs_aops.c | 8 | ||||
-rw-r--r-- | fs/xfs/xfs_message.h | 42 |
29 files changed, 142 insertions, 152 deletions
diff --git a/fs/Kconfig b/fs/Kconfig index 9fe0b349f4cd..5f4c45d4aa10 100644 --- a/fs/Kconfig +++ b/fs/Kconfig | |||
@@ -109,7 +109,7 @@ source "fs/proc/Kconfig" | |||
109 | source "fs/sysfs/Kconfig" | 109 | source "fs/sysfs/Kconfig" |
110 | 110 | ||
111 | config TMPFS | 111 | config TMPFS |
112 | bool "Virtual memory file system support (former shm fs)" | 112 | bool "Tmpfs virtual memory file system support (former shm fs)" |
113 | depends on SHMEM | 113 | depends on SHMEM |
114 | help | 114 | help |
115 | Tmpfs is a file system which keeps all files in virtual memory. | 115 | Tmpfs is a file system which keeps all files in virtual memory. |
@@ -1387,13 +1387,13 @@ static ssize_t aio_setup_vectored_rw(int type, struct kiocb *kiocb, bool compat) | |||
1387 | ret = compat_rw_copy_check_uvector(type, | 1387 | ret = compat_rw_copy_check_uvector(type, |
1388 | (struct compat_iovec __user *)kiocb->ki_buf, | 1388 | (struct compat_iovec __user *)kiocb->ki_buf, |
1389 | kiocb->ki_nbytes, 1, &kiocb->ki_inline_vec, | 1389 | kiocb->ki_nbytes, 1, &kiocb->ki_inline_vec, |
1390 | &kiocb->ki_iovec); | 1390 | &kiocb->ki_iovec, 1); |
1391 | else | 1391 | else |
1392 | #endif | 1392 | #endif |
1393 | ret = rw_copy_check_uvector(type, | 1393 | ret = rw_copy_check_uvector(type, |
1394 | (struct iovec __user *)kiocb->ki_buf, | 1394 | (struct iovec __user *)kiocb->ki_buf, |
1395 | kiocb->ki_nbytes, 1, &kiocb->ki_inline_vec, | 1395 | kiocb->ki_nbytes, 1, &kiocb->ki_inline_vec, |
1396 | &kiocb->ki_iovec); | 1396 | &kiocb->ki_iovec, 1); |
1397 | if (ret < 0) | 1397 | if (ret < 0) |
1398 | goto out; | 1398 | goto out; |
1399 | 1399 | ||
diff --git a/fs/buffer.c b/fs/buffer.c index 936d6035f6e2..70a19745cb61 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
@@ -213,13 +213,16 @@ __find_get_block_slow(struct block_device *bdev, sector_t block) | |||
213 | * elsewhere, don't buffer_error if we had some unmapped buffers | 213 | * elsewhere, don't buffer_error if we had some unmapped buffers |
214 | */ | 214 | */ |
215 | if (all_mapped) { | 215 | if (all_mapped) { |
216 | char b[BDEVNAME_SIZE]; | ||
217 | |||
216 | printk("__find_get_block_slow() failed. " | 218 | printk("__find_get_block_slow() failed. " |
217 | "block=%llu, b_blocknr=%llu\n", | 219 | "block=%llu, b_blocknr=%llu\n", |
218 | (unsigned long long)block, | 220 | (unsigned long long)block, |
219 | (unsigned long long)bh->b_blocknr); | 221 | (unsigned long long)bh->b_blocknr); |
220 | printk("b_state=0x%08lx, b_size=%zu\n", | 222 | printk("b_state=0x%08lx, b_size=%zu\n", |
221 | bh->b_state, bh->b_size); | 223 | bh->b_state, bh->b_size); |
222 | printk("device blocksize: %d\n", 1 << bd_inode->i_blkbits); | 224 | printk("device %s blocksize: %d\n", bdevname(bdev, b), |
225 | 1 << bd_inode->i_blkbits); | ||
223 | } | 226 | } |
224 | out_unlock: | 227 | out_unlock: |
225 | spin_unlock(&bd_mapping->private_lock); | 228 | spin_unlock(&bd_mapping->private_lock); |
diff --git a/fs/compat.c b/fs/compat.c index 302e761bd0aa..c98787536bb8 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
@@ -546,7 +546,7 @@ out: | |||
546 | ssize_t compat_rw_copy_check_uvector(int type, | 546 | ssize_t compat_rw_copy_check_uvector(int type, |
547 | const struct compat_iovec __user *uvector, unsigned long nr_segs, | 547 | const struct compat_iovec __user *uvector, unsigned long nr_segs, |
548 | unsigned long fast_segs, struct iovec *fast_pointer, | 548 | unsigned long fast_segs, struct iovec *fast_pointer, |
549 | struct iovec **ret_pointer) | 549 | struct iovec **ret_pointer, int check_access) |
550 | { | 550 | { |
551 | compat_ssize_t tot_len; | 551 | compat_ssize_t tot_len; |
552 | struct iovec *iov = *ret_pointer = fast_pointer; | 552 | struct iovec *iov = *ret_pointer = fast_pointer; |
@@ -593,7 +593,8 @@ ssize_t compat_rw_copy_check_uvector(int type, | |||
593 | } | 593 | } |
594 | if (len < 0) /* size_t not fitting in compat_ssize_t .. */ | 594 | if (len < 0) /* size_t not fitting in compat_ssize_t .. */ |
595 | goto out; | 595 | goto out; |
596 | if (!access_ok(vrfy_dir(type), compat_ptr(buf), len)) { | 596 | if (check_access && |
597 | !access_ok(vrfy_dir(type), compat_ptr(buf), len)) { | ||
597 | ret = -EFAULT; | 598 | ret = -EFAULT; |
598 | goto out; | 599 | goto out; |
599 | } | 600 | } |
@@ -1107,7 +1108,7 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, | |||
1107 | goto out; | 1108 | goto out; |
1108 | 1109 | ||
1109 | tot_len = compat_rw_copy_check_uvector(type, uvector, nr_segs, | 1110 | tot_len = compat_rw_copy_check_uvector(type, uvector, nr_segs, |
1110 | UIO_FASTIOV, iovstack, &iov); | 1111 | UIO_FASTIOV, iovstack, &iov, 1); |
1111 | if (tot_len == 0) { | 1112 | if (tot_len == 0) { |
1112 | ret = 0; | 1113 | ret = 0; |
1113 | goto out; | 1114 | goto out; |
diff --git a/fs/ecryptfs/ecryptfs_kernel.h b/fs/ecryptfs/ecryptfs_kernel.h index b36c5572b3f3..54481a3b2c79 100644 --- a/fs/ecryptfs/ecryptfs_kernel.h +++ b/fs/ecryptfs/ecryptfs_kernel.h | |||
@@ -514,7 +514,7 @@ ecryptfs_set_dentry_lower_mnt(struct dentry *dentry, struct vfsmount *lower_mnt) | |||
514 | 514 | ||
515 | #define ecryptfs_printk(type, fmt, arg...) \ | 515 | #define ecryptfs_printk(type, fmt, arg...) \ |
516 | __ecryptfs_printk(type "%s: " fmt, __func__, ## arg); | 516 | __ecryptfs_printk(type "%s: " fmt, __func__, ## arg); |
517 | __attribute__ ((format(printf, 1, 2))) | 517 | __printf(1, 2) |
518 | void __ecryptfs_printk(const char *fmt, ...); | 518 | void __ecryptfs_printk(const char *fmt, ...); |
519 | 519 | ||
520 | extern const struct file_operations ecryptfs_main_fops; | 520 | extern const struct file_operations ecryptfs_main_fops; |
diff --git a/fs/eventpoll.c b/fs/eventpoll.c index 9026fc91fe3b..828e750af23a 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c | |||
@@ -70,6 +70,15 @@ | |||
70 | * simultaneous inserts (A into B and B into A) from racing and | 70 | * simultaneous inserts (A into B and B into A) from racing and |
71 | * constructing a cycle without either insert observing that it is | 71 | * constructing a cycle without either insert observing that it is |
72 | * going to. | 72 | * going to. |
73 | * It is necessary to acquire multiple "ep->mtx"es at once in the | ||
74 | * case when one epoll fd is added to another. In this case, we | ||
75 | * always acquire the locks in the order of nesting (i.e. after | ||
76 | * epoll_ctl(e1, EPOLL_CTL_ADD, e2), e1->mtx will always be acquired | ||
77 | * before e2->mtx). Since we disallow cycles of epoll file | ||
78 | * descriptors, this ensures that the mutexes are well-ordered. In | ||
79 | * order to communicate this nesting to lockdep, when walking a tree | ||
80 | * of epoll file descriptors, we use the current recursion depth as | ||
81 | * the lockdep subkey. | ||
73 | * It is possible to drop the "ep->mtx" and to use the global | 82 | * It is possible to drop the "ep->mtx" and to use the global |
74 | * mutex "epmutex" (together with "ep->lock") to have it working, | 83 | * mutex "epmutex" (together with "ep->lock") to have it working, |
75 | * but having "ep->mtx" will make the interface more scalable. | 84 | * but having "ep->mtx" will make the interface more scalable. |
@@ -464,13 +473,15 @@ static void ep_unregister_pollwait(struct eventpoll *ep, struct epitem *epi) | |||
464 | * @ep: Pointer to the epoll private data structure. | 473 | * @ep: Pointer to the epoll private data structure. |
465 | * @sproc: Pointer to the scan callback. | 474 | * @sproc: Pointer to the scan callback. |
466 | * @priv: Private opaque data passed to the @sproc callback. | 475 | * @priv: Private opaque data passed to the @sproc callback. |
476 | * @depth: The current depth of recursive f_op->poll calls. | ||
467 | * | 477 | * |
468 | * Returns: The same integer error code returned by the @sproc callback. | 478 | * Returns: The same integer error code returned by the @sproc callback. |
469 | */ | 479 | */ |
470 | static int ep_scan_ready_list(struct eventpoll *ep, | 480 | static int ep_scan_ready_list(struct eventpoll *ep, |
471 | int (*sproc)(struct eventpoll *, | 481 | int (*sproc)(struct eventpoll *, |
472 | struct list_head *, void *), | 482 | struct list_head *, void *), |
473 | void *priv) | 483 | void *priv, |
484 | int depth) | ||
474 | { | 485 | { |
475 | int error, pwake = 0; | 486 | int error, pwake = 0; |
476 | unsigned long flags; | 487 | unsigned long flags; |
@@ -481,7 +492,7 @@ static int ep_scan_ready_list(struct eventpoll *ep, | |||
481 | * We need to lock this because we could be hit by | 492 | * We need to lock this because we could be hit by |
482 | * eventpoll_release_file() and epoll_ctl(). | 493 | * eventpoll_release_file() and epoll_ctl(). |
483 | */ | 494 | */ |
484 | mutex_lock(&ep->mtx); | 495 | mutex_lock_nested(&ep->mtx, depth); |
485 | 496 | ||
486 | /* | 497 | /* |
487 | * Steal the ready list, and re-init the original one to the | 498 | * Steal the ready list, and re-init the original one to the |
@@ -670,7 +681,7 @@ static int ep_read_events_proc(struct eventpoll *ep, struct list_head *head, | |||
670 | 681 | ||
671 | static int ep_poll_readyevents_proc(void *priv, void *cookie, int call_nests) | 682 | static int ep_poll_readyevents_proc(void *priv, void *cookie, int call_nests) |
672 | { | 683 | { |
673 | return ep_scan_ready_list(priv, ep_read_events_proc, NULL); | 684 | return ep_scan_ready_list(priv, ep_read_events_proc, NULL, call_nests + 1); |
674 | } | 685 | } |
675 | 686 | ||
676 | static unsigned int ep_eventpoll_poll(struct file *file, poll_table *wait) | 687 | static unsigned int ep_eventpoll_poll(struct file *file, poll_table *wait) |
@@ -737,7 +748,7 @@ void eventpoll_release_file(struct file *file) | |||
737 | 748 | ||
738 | ep = epi->ep; | 749 | ep = epi->ep; |
739 | list_del_init(&epi->fllink); | 750 | list_del_init(&epi->fllink); |
740 | mutex_lock(&ep->mtx); | 751 | mutex_lock_nested(&ep->mtx, 0); |
741 | ep_remove(ep, epi); | 752 | ep_remove(ep, epi); |
742 | mutex_unlock(&ep->mtx); | 753 | mutex_unlock(&ep->mtx); |
743 | } | 754 | } |
@@ -1134,7 +1145,7 @@ static int ep_send_events(struct eventpoll *ep, | |||
1134 | esed.maxevents = maxevents; | 1145 | esed.maxevents = maxevents; |
1135 | esed.events = events; | 1146 | esed.events = events; |
1136 | 1147 | ||
1137 | return ep_scan_ready_list(ep, ep_send_events_proc, &esed); | 1148 | return ep_scan_ready_list(ep, ep_send_events_proc, &esed, 0); |
1138 | } | 1149 | } |
1139 | 1150 | ||
1140 | static inline struct timespec ep_set_mstimeout(long ms) | 1151 | static inline struct timespec ep_set_mstimeout(long ms) |
@@ -1267,7 +1278,7 @@ static int ep_loop_check_proc(void *priv, void *cookie, int call_nests) | |||
1267 | struct rb_node *rbp; | 1278 | struct rb_node *rbp; |
1268 | struct epitem *epi; | 1279 | struct epitem *epi; |
1269 | 1280 | ||
1270 | mutex_lock(&ep->mtx); | 1281 | mutex_lock_nested(&ep->mtx, call_nests + 1); |
1271 | for (rbp = rb_first(&ep->rbr); rbp; rbp = rb_next(rbp)) { | 1282 | for (rbp = rb_first(&ep->rbr); rbp; rbp = rb_next(rbp)) { |
1272 | epi = rb_entry(rbp, struct epitem, rbn); | 1283 | epi = rb_entry(rbp, struct epitem, rbn); |
1273 | if (unlikely(is_file_epoll(epi->ffd.file))) { | 1284 | if (unlikely(is_file_epoll(epi->ffd.file))) { |
@@ -1409,7 +1420,7 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd, | |||
1409 | } | 1420 | } |
1410 | 1421 | ||
1411 | 1422 | ||
1412 | mutex_lock(&ep->mtx); | 1423 | mutex_lock_nested(&ep->mtx, 0); |
1413 | 1424 | ||
1414 | /* | 1425 | /* |
1415 | * Try to lookup the file inside our RB tree, Since we grabbed "mtx" | 1426 | * Try to lookup the file inside our RB tree, Since we grabbed "mtx" |
@@ -841,10 +841,6 @@ static int exec_mmap(struct mm_struct *mm) | |||
841 | tsk->mm = mm; | 841 | tsk->mm = mm; |
842 | tsk->active_mm = mm; | 842 | tsk->active_mm = mm; |
843 | activate_mm(active_mm, mm); | 843 | activate_mm(active_mm, mm); |
844 | if (old_mm && tsk->signal->oom_score_adj == OOM_SCORE_ADJ_MIN) { | ||
845 | atomic_dec(&old_mm->oom_disable_count); | ||
846 | atomic_inc(&tsk->mm->oom_disable_count); | ||
847 | } | ||
848 | task_unlock(tsk); | 844 | task_unlock(tsk); |
849 | arch_pick_mmap_layout(mm); | 845 | arch_pick_mmap_layout(mm); |
850 | if (old_mm) { | 846 | if (old_mm) { |
diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h index af9fc89b1b2d..9a4e5e206d08 100644 --- a/fs/ext2/ext2.h +++ b/fs/ext2/ext2.h | |||
@@ -135,10 +135,10 @@ extern long ext2_compat_ioctl(struct file *, unsigned int, unsigned long); | |||
135 | struct dentry *ext2_get_parent(struct dentry *child); | 135 | struct dentry *ext2_get_parent(struct dentry *child); |
136 | 136 | ||
137 | /* super.c */ | 137 | /* super.c */ |
138 | extern void ext2_error (struct super_block *, const char *, const char *, ...) | 138 | extern __printf(3, 4) |
139 | __attribute__ ((format (printf, 3, 4))); | 139 | void ext2_error(struct super_block *, const char *, const char *, ...); |
140 | extern void ext2_msg(struct super_block *, const char *, const char *, ...) | 140 | extern __printf(3, 4) |
141 | __attribute__ ((format (printf, 3, 4))); | 141 | void ext2_msg(struct super_block *, const char *, const char *, ...); |
142 | extern void ext2_update_dynamic_rev (struct super_block *sb); | 142 | extern void ext2_update_dynamic_rev (struct super_block *sb); |
143 | extern void ext2_write_super (struct super_block *); | 143 | extern void ext2_write_super (struct super_block *); |
144 | 144 | ||
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index b7d7bd0f066e..cec3145e532c 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -1878,40 +1878,40 @@ extern int ext4_group_extend(struct super_block *sb, | |||
1878 | extern void *ext4_kvmalloc(size_t size, gfp_t flags); | 1878 | extern void *ext4_kvmalloc(size_t size, gfp_t flags); |
1879 | extern void *ext4_kvzalloc(size_t size, gfp_t flags); | 1879 | extern void *ext4_kvzalloc(size_t size, gfp_t flags); |
1880 | extern void ext4_kvfree(void *ptr); | 1880 | extern void ext4_kvfree(void *ptr); |
1881 | extern void __ext4_error(struct super_block *, const char *, unsigned int, | 1881 | extern __printf(4, 5) |
1882 | const char *, ...) | 1882 | void __ext4_error(struct super_block *, const char *, unsigned int, |
1883 | __attribute__ ((format (printf, 4, 5))); | 1883 | const char *, ...); |
1884 | #define ext4_error(sb, message...) __ext4_error(sb, __func__, \ | 1884 | #define ext4_error(sb, message...) __ext4_error(sb, __func__, \ |
1885 | __LINE__, ## message) | 1885 | __LINE__, ## message) |
1886 | extern void ext4_error_inode(struct inode *, const char *, unsigned int, | 1886 | extern __printf(5, 6) |
1887 | ext4_fsblk_t, const char *, ...) | 1887 | void ext4_error_inode(struct inode *, const char *, unsigned int, ext4_fsblk_t, |
1888 | __attribute__ ((format (printf, 5, 6))); | 1888 | const char *, ...); |
1889 | extern void ext4_error_file(struct file *, const char *, unsigned int, | 1889 | extern __printf(5, 6) |
1890 | ext4_fsblk_t, const char *, ...) | 1890 | void ext4_error_file(struct file *, const char *, unsigned int, ext4_fsblk_t, |
1891 | __attribute__ ((format (printf, 5, 6))); | 1891 | const char *, ...); |
1892 | extern void __ext4_std_error(struct super_block *, const char *, | 1892 | extern void __ext4_std_error(struct super_block *, const char *, |
1893 | unsigned int, int); | 1893 | unsigned int, int); |
1894 | extern void __ext4_abort(struct super_block *, const char *, unsigned int, | 1894 | extern __printf(4, 5) |
1895 | const char *, ...) | 1895 | void __ext4_abort(struct super_block *, const char *, unsigned int, |
1896 | __attribute__ ((format (printf, 4, 5))); | 1896 | const char *, ...); |
1897 | #define ext4_abort(sb, message...) __ext4_abort(sb, __func__, \ | 1897 | #define ext4_abort(sb, message...) __ext4_abort(sb, __func__, \ |
1898 | __LINE__, ## message) | 1898 | __LINE__, ## message) |
1899 | extern void __ext4_warning(struct super_block *, const char *, unsigned int, | 1899 | extern __printf(4, 5) |
1900 | const char *, ...) | 1900 | void __ext4_warning(struct super_block *, const char *, unsigned int, |
1901 | __attribute__ ((format (printf, 4, 5))); | 1901 | const char *, ...); |
1902 | #define ext4_warning(sb, message...) __ext4_warning(sb, __func__, \ | 1902 | #define ext4_warning(sb, message...) __ext4_warning(sb, __func__, \ |
1903 | __LINE__, ## message) | 1903 | __LINE__, ## message) |
1904 | extern void ext4_msg(struct super_block *, const char *, const char *, ...) | 1904 | extern __printf(3, 4) |
1905 | __attribute__ ((format (printf, 3, 4))); | 1905 | void ext4_msg(struct super_block *, const char *, const char *, ...); |
1906 | extern void __dump_mmp_msg(struct super_block *, struct mmp_struct *mmp, | 1906 | extern void __dump_mmp_msg(struct super_block *, struct mmp_struct *mmp, |
1907 | const char *, unsigned int, const char *); | 1907 | const char *, unsigned int, const char *); |
1908 | #define dump_mmp_msg(sb, mmp, msg) __dump_mmp_msg(sb, mmp, __func__, \ | 1908 | #define dump_mmp_msg(sb, mmp, msg) __dump_mmp_msg(sb, mmp, __func__, \ |
1909 | __LINE__, msg) | 1909 | __LINE__, msg) |
1910 | extern void __ext4_grp_locked_error(const char *, unsigned int, \ | 1910 | extern __printf(7, 8) |
1911 | struct super_block *, ext4_group_t, \ | 1911 | void __ext4_grp_locked_error(const char *, unsigned int, |
1912 | unsigned long, ext4_fsblk_t, \ | 1912 | struct super_block *, ext4_group_t, |
1913 | const char *, ...) | 1913 | unsigned long, ext4_fsblk_t, |
1914 | __attribute__ ((format (printf, 7, 8))); | 1914 | const char *, ...); |
1915 | #define ext4_grp_locked_error(sb, grp, message...) \ | 1915 | #define ext4_grp_locked_error(sb, grp, message...) \ |
1916 | __ext4_grp_locked_error(__func__, __LINE__, (sb), (grp), ## message) | 1916 | __ext4_grp_locked_error(__func__, __LINE__, (sb), (grp), ## message) |
1917 | extern void ext4_update_dynamic_rev(struct super_block *sb); | 1917 | extern void ext4_update_dynamic_rev(struct super_block *sb); |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 986e2388f031..0defe0bfe019 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -1811,8 +1811,12 @@ static int ext4_writepage(struct page *page, | |||
1811 | * We don't want to do block allocation, so redirty | 1811 | * We don't want to do block allocation, so redirty |
1812 | * the page and return. We may reach here when we do | 1812 | * the page and return. We may reach here when we do |
1813 | * a journal commit via journal_submit_inode_data_buffers. | 1813 | * a journal commit via journal_submit_inode_data_buffers. |
1814 | * We can also reach here via shrink_page_list | 1814 | * We can also reach here via shrink_page_list but it |
1815 | * should never be for direct reclaim so warn if that | ||
1816 | * happens | ||
1815 | */ | 1817 | */ |
1818 | WARN_ON_ONCE((current->flags & (PF_MEMALLOC|PF_KSWAPD)) == | ||
1819 | PF_MEMALLOC); | ||
1816 | goto redirty_page; | 1820 | goto redirty_page; |
1817 | } | 1821 | } |
1818 | if (commit_write) | 1822 | if (commit_write) |
diff --git a/fs/fat/dir.c b/fs/fat/dir.c index 5efbd5d7701a..aca191bd5f8f 100644 --- a/fs/fat/dir.c +++ b/fs/fat/dir.c | |||
@@ -156,8 +156,8 @@ static int uni16_to_x8(struct super_block *sb, unsigned char *ascii, | |||
156 | } else { | 156 | } else { |
157 | if (uni_xlate == 1) { | 157 | if (uni_xlate == 1) { |
158 | *op++ = ':'; | 158 | *op++ = ':'; |
159 | op = pack_hex_byte(op, ec >> 8); | 159 | op = hex_byte_pack(op, ec >> 8); |
160 | op = pack_hex_byte(op, ec); | 160 | op = hex_byte_pack(op, ec); |
161 | len -= 5; | 161 | len -= 5; |
162 | } else { | 162 | } else { |
163 | *op++ = '?'; | 163 | *op++ = '?'; |
diff --git a/fs/fat/fat.h b/fs/fat/fat.h index a5d3853822e0..1510a4d51990 100644 --- a/fs/fat/fat.h +++ b/fs/fat/fat.h | |||
@@ -326,15 +326,14 @@ extern int fat_fill_super(struct super_block *sb, void *data, int silent, | |||
326 | extern int fat_flush_inodes(struct super_block *sb, struct inode *i1, | 326 | extern int fat_flush_inodes(struct super_block *sb, struct inode *i1, |
327 | struct inode *i2); | 327 | struct inode *i2); |
328 | /* fat/misc.c */ | 328 | /* fat/misc.c */ |
329 | extern void | 329 | extern __printf(3, 4) __cold |
330 | __fat_fs_error(struct super_block *sb, int report, const char *fmt, ...) | 330 | void __fat_fs_error(struct super_block *sb, int report, const char *fmt, ...); |
331 | __attribute__ ((format (printf, 3, 4))) __cold; | ||
332 | #define fat_fs_error(sb, fmt, args...) \ | 331 | #define fat_fs_error(sb, fmt, args...) \ |
333 | __fat_fs_error(sb, 1, fmt , ## args) | 332 | __fat_fs_error(sb, 1, fmt , ## args) |
334 | #define fat_fs_error_ratelimit(sb, fmt, args...) \ | 333 | #define fat_fs_error_ratelimit(sb, fmt, args...) \ |
335 | __fat_fs_error(sb, __ratelimit(&MSDOS_SB(sb)->ratelimit), fmt , ## args) | 334 | __fat_fs_error(sb, __ratelimit(&MSDOS_SB(sb)->ratelimit), fmt , ## args) |
336 | void fat_msg(struct super_block *sb, const char *level, const char *fmt, ...) | 335 | __printf(3, 4) __cold |
337 | __attribute__ ((format (printf, 3, 4))) __cold; | 336 | void fat_msg(struct super_block *sb, const char *level, const char *fmt, ...); |
338 | extern int fat_clusters_flush(struct super_block *sb); | 337 | extern int fat_clusters_flush(struct super_block *sb); |
339 | extern int fat_chain_add(struct inode *inode, int new_dclus, int nr_cluster); | 338 | extern int fat_chain_add(struct inode *inode, int new_dclus, int nr_cluster); |
340 | extern void fat_time_fat2unix(struct msdos_sb_info *sbi, struct timespec *ts, | 339 | extern void fat_time_fat2unix(struct msdos_sb_info *sbi, struct timespec *ts, |
diff --git a/fs/gfs2/glock.h b/fs/gfs2/glock.h index 66707118af25..2553b858a72e 100644 --- a/fs/gfs2/glock.h +++ b/fs/gfs2/glock.h | |||
@@ -201,7 +201,7 @@ int gfs2_glock_nq_m(unsigned int num_gh, struct gfs2_holder *ghs); | |||
201 | void gfs2_glock_dq_m(unsigned int num_gh, struct gfs2_holder *ghs); | 201 | void gfs2_glock_dq_m(unsigned int num_gh, struct gfs2_holder *ghs); |
202 | void gfs2_glock_dq_uninit_m(unsigned int num_gh, struct gfs2_holder *ghs); | 202 | void gfs2_glock_dq_uninit_m(unsigned int num_gh, struct gfs2_holder *ghs); |
203 | 203 | ||
204 | __attribute__ ((format(printf, 2, 3))) | 204 | __printf(2, 3) |
205 | void gfs2_print_dbg(struct seq_file *seq, const char *fmt, ...); | 205 | void gfs2_print_dbg(struct seq_file *seq, const char *fmt, ...); |
206 | 206 | ||
207 | /** | 207 | /** |
diff --git a/fs/hpfs/hpfs_fn.h b/fs/hpfs/hpfs_fn.h index 331b5e234ef3..de946170ebb1 100644 --- a/fs/hpfs/hpfs_fn.h +++ b/fs/hpfs/hpfs_fn.h | |||
@@ -311,8 +311,8 @@ static inline struct hpfs_sb_info *hpfs_sb(struct super_block *sb) | |||
311 | 311 | ||
312 | /* super.c */ | 312 | /* super.c */ |
313 | 313 | ||
314 | void hpfs_error(struct super_block *, const char *, ...) | 314 | __printf(2, 3) |
315 | __attribute__((format (printf, 2, 3))); | 315 | void hpfs_error(struct super_block *, const char *, ...); |
316 | int hpfs_stop_cycles(struct super_block *, int, int *, int *, char *); | 316 | int hpfs_stop_cycles(struct super_block *, int, int *, int *, char *); |
317 | unsigned hpfs_count_one_bitmap(struct super_block *, secno); | 317 | unsigned hpfs_count_one_bitmap(struct super_block *, secno); |
318 | 318 | ||
diff --git a/fs/logfs/logfs.h b/fs/logfs/logfs.h index f22d108bfa5d..398ecff6e548 100644 --- a/fs/logfs/logfs.h +++ b/fs/logfs/logfs.h | |||
@@ -618,7 +618,6 @@ static inline int logfs_buf_recover(struct logfs_area *area, u64 ofs, | |||
618 | struct page *emergency_read_begin(struct address_space *mapping, pgoff_t index); | 618 | struct page *emergency_read_begin(struct address_space *mapping, pgoff_t index); |
619 | void emergency_read_end(struct page *page); | 619 | void emergency_read_end(struct page *page); |
620 | void logfs_crash_dump(struct super_block *sb); | 620 | void logfs_crash_dump(struct super_block *sb); |
621 | void *memchr_inv(const void *s, int c, size_t n); | ||
622 | int logfs_statfs(struct dentry *dentry, struct kstatfs *stats); | 621 | int logfs_statfs(struct dentry *dentry, struct kstatfs *stats); |
623 | int logfs_check_ds(struct logfs_disk_super *ds); | 622 | int logfs_check_ds(struct logfs_disk_super *ds); |
624 | int logfs_write_sb(struct super_block *sb); | 623 | int logfs_write_sb(struct super_block *sb); |
diff --git a/fs/logfs/super.c b/fs/logfs/super.c index ce03a182c771..f2697e4df109 100644 --- a/fs/logfs/super.c +++ b/fs/logfs/super.c | |||
@@ -91,28 +91,6 @@ void logfs_crash_dump(struct super_block *sb) | |||
91 | } | 91 | } |
92 | 92 | ||
93 | /* | 93 | /* |
94 | * TODO: move to lib/string.c | ||
95 | */ | ||
96 | /** | ||
97 | * memchr_inv - Find a character in an area of memory. | ||
98 | * @s: The memory area | ||
99 | * @c: The byte to search for | ||
100 | * @n: The size of the area. | ||
101 | * | ||
102 | * returns the address of the first character other than @c, or %NULL | ||
103 | * if the whole buffer contains just @c. | ||
104 | */ | ||
105 | void *memchr_inv(const void *s, int c, size_t n) | ||
106 | { | ||
107 | const unsigned char *p = s; | ||
108 | while (n-- != 0) | ||
109 | if ((unsigned char)c != *p++) | ||
110 | return (void *)(p - 1); | ||
111 | |||
112 | return NULL; | ||
113 | } | ||
114 | |||
115 | /* | ||
116 | * FIXME: There should be a reserve for root, similar to ext2. | 94 | * FIXME: There should be a reserve for root, similar to ext2. |
117 | */ | 95 | */ |
118 | int logfs_statfs(struct dentry *dentry, struct kstatfs *stats) | 96 | int logfs_statfs(struct dentry *dentry, struct kstatfs *stats) |
diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h index 255d5e1c03b7..3777d138f895 100644 --- a/fs/nilfs2/nilfs.h +++ b/fs/nilfs2/nilfs.h | |||
@@ -276,10 +276,10 @@ int nilfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, | |||
276 | /* super.c */ | 276 | /* super.c */ |
277 | extern struct inode *nilfs_alloc_inode(struct super_block *); | 277 | extern struct inode *nilfs_alloc_inode(struct super_block *); |
278 | extern void nilfs_destroy_inode(struct inode *); | 278 | extern void nilfs_destroy_inode(struct inode *); |
279 | extern void nilfs_error(struct super_block *, const char *, const char *, ...) | 279 | extern __printf(3, 4) |
280 | __attribute__ ((format (printf, 3, 4))); | 280 | void nilfs_error(struct super_block *, const char *, const char *, ...); |
281 | extern void nilfs_warning(struct super_block *, const char *, const char *, ...) | 281 | extern __printf(3, 4) |
282 | __attribute__ ((format (printf, 3, 4))); | 282 | void nilfs_warning(struct super_block *, const char *, const char *, ...); |
283 | extern struct nilfs_super_block * | 283 | extern struct nilfs_super_block * |
284 | nilfs_read_super_block(struct super_block *, u64, int, struct buffer_head **); | 284 | nilfs_read_super_block(struct super_block *, u64, int, struct buffer_head **); |
285 | extern int nilfs_store_magic_and_option(struct super_block *, | 285 | extern int nilfs_store_magic_and_option(struct super_block *, |
diff --git a/fs/ntfs/debug.h b/fs/ntfs/debug.h index 2142b1c68b61..53c27eaf2307 100644 --- a/fs/ntfs/debug.h +++ b/fs/ntfs/debug.h | |||
@@ -30,8 +30,9 @@ | |||
30 | 30 | ||
31 | extern int debug_msgs; | 31 | extern int debug_msgs; |
32 | 32 | ||
33 | extern void __ntfs_debug(const char *file, int line, const char *function, | 33 | extern __printf(4, 5) |
34 | const char *format, ...) __attribute__ ((format (printf, 4, 5))); | 34 | void __ntfs_debug(const char *file, int line, const char *function, |
35 | const char *format, ...); | ||
35 | /** | 36 | /** |
36 | * ntfs_debug - write a debug level message to syslog | 37 | * ntfs_debug - write a debug level message to syslog |
37 | * @f: a printf format string containing the message | 38 | * @f: a printf format string containing the message |
@@ -52,12 +53,14 @@ extern void ntfs_debug_dump_runlist(const runlist_element *rl); | |||
52 | 53 | ||
53 | #endif /* !DEBUG */ | 54 | #endif /* !DEBUG */ |
54 | 55 | ||
55 | extern void __ntfs_warning(const char *function, const struct super_block *sb, | 56 | extern __printf(3, 4) |
56 | const char *fmt, ...) __attribute__ ((format (printf, 3, 4))); | 57 | void __ntfs_warning(const char *function, const struct super_block *sb, |
58 | const char *fmt, ...); | ||
57 | #define ntfs_warning(sb, f, a...) __ntfs_warning(__func__, sb, f, ##a) | 59 | #define ntfs_warning(sb, f, a...) __ntfs_warning(__func__, sb, f, ##a) |
58 | 60 | ||
59 | extern void __ntfs_error(const char *function, const struct super_block *sb, | 61 | extern __printf(3, 4) |
60 | const char *fmt, ...) __attribute__ ((format (printf, 3, 4))); | 62 | void __ntfs_error(const char *function, const struct super_block *sb, |
63 | const char *fmt, ...); | ||
61 | #define ntfs_error(sb, f, a...) __ntfs_error(__func__, sb, f, ##a) | 64 | #define ntfs_error(sb, f, a...) __ntfs_error(__func__, sb, f, ##a) |
62 | 65 | ||
63 | #endif /* _LINUX_NTFS_DEBUG_H */ | 66 | #endif /* _LINUX_NTFS_DEBUG_H */ |
diff --git a/fs/ocfs2/super.h b/fs/ocfs2/super.h index 40c7de084c10..74ff74cf78fe 100644 --- a/fs/ocfs2/super.h +++ b/fs/ocfs2/super.h | |||
@@ -31,17 +31,15 @@ extern struct workqueue_struct *ocfs2_wq; | |||
31 | int ocfs2_publish_get_mount_state(struct ocfs2_super *osb, | 31 | int ocfs2_publish_get_mount_state(struct ocfs2_super *osb, |
32 | int node_num); | 32 | int node_num); |
33 | 33 | ||
34 | void __ocfs2_error(struct super_block *sb, | 34 | __printf(3, 4) |
35 | const char *function, | 35 | void __ocfs2_error(struct super_block *sb, const char *function, |
36 | const char *fmt, ...) | 36 | const char *fmt, ...); |
37 | __attribute__ ((format (printf, 3, 4))); | ||
38 | 37 | ||
39 | #define ocfs2_error(sb, fmt, args...) __ocfs2_error(sb, __PRETTY_FUNCTION__, fmt, ##args) | 38 | #define ocfs2_error(sb, fmt, args...) __ocfs2_error(sb, __PRETTY_FUNCTION__, fmt, ##args) |
40 | 39 | ||
41 | void __ocfs2_abort(struct super_block *sb, | 40 | __printf(3, 4) |
42 | const char *function, | 41 | void __ocfs2_abort(struct super_block *sb, const char *function, |
43 | const char *fmt, ...) | 42 | const char *fmt, ...); |
44 | __attribute__ ((format (printf, 3, 4))); | ||
45 | 43 | ||
46 | #define ocfs2_abort(sb, fmt, args...) __ocfs2_abort(sb, __PRETTY_FUNCTION__, fmt, ##args) | 44 | #define ocfs2_abort(sb, fmt, args...) __ocfs2_abort(sb, __PRETTY_FUNCTION__, fmt, ##args) |
47 | 45 | ||
diff --git a/fs/partitions/ldm.c b/fs/partitions/ldm.c index af9fdf046769..bd8ae788f689 100644 --- a/fs/partitions/ldm.c +++ b/fs/partitions/ldm.c | |||
@@ -49,18 +49,20 @@ | |||
49 | #define ldm_error(f, a...) _ldm_printk (KERN_ERR, __func__, f, ##a) | 49 | #define ldm_error(f, a...) _ldm_printk (KERN_ERR, __func__, f, ##a) |
50 | #define ldm_info(f, a...) _ldm_printk (KERN_INFO, __func__, f, ##a) | 50 | #define ldm_info(f, a...) _ldm_printk (KERN_INFO, __func__, f, ##a) |
51 | 51 | ||
52 | __attribute__ ((format (printf, 3, 4))) | 52 | static __printf(3, 4) |
53 | static void _ldm_printk (const char *level, const char *function, | 53 | void _ldm_printk(const char *level, const char *function, const char *fmt, ...) |
54 | const char *fmt, ...) | ||
55 | { | 54 | { |
56 | static char buf[128]; | 55 | struct va_format vaf; |
57 | va_list args; | 56 | va_list args; |
58 | 57 | ||
59 | va_start (args, fmt); | 58 | va_start (args, fmt); |
60 | vsnprintf (buf, sizeof (buf), fmt, args); | ||
61 | va_end (args); | ||
62 | 59 | ||
63 | printk ("%s%s(): %s\n", level, function, buf); | 60 | vaf.fmt = fmt; |
61 | vaf.va = &args; | ||
62 | |||
63 | printk("%s%s(): %pV\n", level, function, &vaf); | ||
64 | |||
65 | va_end(args); | ||
64 | } | 66 | } |
65 | 67 | ||
66 | /** | 68 | /** |
@@ -1254,6 +1254,7 @@ out: | |||
1254 | 1254 | ||
1255 | static const struct super_operations pipefs_ops = { | 1255 | static const struct super_operations pipefs_ops = { |
1256 | .destroy_inode = free_inode_nonrcu, | 1256 | .destroy_inode = free_inode_nonrcu, |
1257 | .statfs = simple_statfs, | ||
1257 | }; | 1258 | }; |
1258 | 1259 | ||
1259 | /* | 1260 | /* |
diff --git a/fs/proc/base.c b/fs/proc/base.c index 5eb02069e1b8..8f0087e20e16 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
@@ -1107,13 +1107,6 @@ static ssize_t oom_adjust_write(struct file *file, const char __user *buf, | |||
1107 | goto err_sighand; | 1107 | goto err_sighand; |
1108 | } | 1108 | } |
1109 | 1109 | ||
1110 | if (oom_adjust != task->signal->oom_adj) { | ||
1111 | if (oom_adjust == OOM_DISABLE) | ||
1112 | atomic_inc(&task->mm->oom_disable_count); | ||
1113 | if (task->signal->oom_adj == OOM_DISABLE) | ||
1114 | atomic_dec(&task->mm->oom_disable_count); | ||
1115 | } | ||
1116 | |||
1117 | /* | 1110 | /* |
1118 | * Warn that /proc/pid/oom_adj is deprecated, see | 1111 | * Warn that /proc/pid/oom_adj is deprecated, see |
1119 | * Documentation/feature-removal-schedule.txt. | 1112 | * Documentation/feature-removal-schedule.txt. |
@@ -1215,12 +1208,6 @@ static ssize_t oom_score_adj_write(struct file *file, const char __user *buf, | |||
1215 | goto err_sighand; | 1208 | goto err_sighand; |
1216 | } | 1209 | } |
1217 | 1210 | ||
1218 | if (oom_score_adj != task->signal->oom_score_adj) { | ||
1219 | if (oom_score_adj == OOM_SCORE_ADJ_MIN) | ||
1220 | atomic_inc(&task->mm->oom_disable_count); | ||
1221 | if (task->signal->oom_score_adj == OOM_SCORE_ADJ_MIN) | ||
1222 | atomic_dec(&task->mm->oom_disable_count); | ||
1223 | } | ||
1224 | task->signal->oom_score_adj = oom_score_adj; | 1211 | task->signal->oom_score_adj = oom_score_adj; |
1225 | if (has_capability_noaudit(current, CAP_SYS_RESOURCE)) | 1212 | if (has_capability_noaudit(current, CAP_SYS_RESOURCE)) |
1226 | task->signal->oom_score_adj_min = oom_score_adj; | 1213 | task->signal->oom_score_adj_min = oom_score_adj; |
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 5afaa58a8630..e418c5abdb0e 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c | |||
@@ -44,6 +44,7 @@ void task_mem(struct seq_file *m, struct mm_struct *mm) | |||
44 | "VmPeak:\t%8lu kB\n" | 44 | "VmPeak:\t%8lu kB\n" |
45 | "VmSize:\t%8lu kB\n" | 45 | "VmSize:\t%8lu kB\n" |
46 | "VmLck:\t%8lu kB\n" | 46 | "VmLck:\t%8lu kB\n" |
47 | "VmPin:\t%8lu kB\n" | ||
47 | "VmHWM:\t%8lu kB\n" | 48 | "VmHWM:\t%8lu kB\n" |
48 | "VmRSS:\t%8lu kB\n" | 49 | "VmRSS:\t%8lu kB\n" |
49 | "VmData:\t%8lu kB\n" | 50 | "VmData:\t%8lu kB\n" |
@@ -55,6 +56,7 @@ void task_mem(struct seq_file *m, struct mm_struct *mm) | |||
55 | hiwater_vm << (PAGE_SHIFT-10), | 56 | hiwater_vm << (PAGE_SHIFT-10), |
56 | (total_vm - mm->reserved_vm) << (PAGE_SHIFT-10), | 57 | (total_vm - mm->reserved_vm) << (PAGE_SHIFT-10), |
57 | mm->locked_vm << (PAGE_SHIFT-10), | 58 | mm->locked_vm << (PAGE_SHIFT-10), |
59 | mm->pinned_vm << (PAGE_SHIFT-10), | ||
58 | hiwater_rss << (PAGE_SHIFT-10), | 60 | hiwater_rss << (PAGE_SHIFT-10), |
59 | total_rss << (PAGE_SHIFT-10), | 61 | total_rss << (PAGE_SHIFT-10), |
60 | data << (PAGE_SHIFT-10), | 62 | data << (PAGE_SHIFT-10), |
@@ -1039,6 +1041,9 @@ static int show_numa_map(struct seq_file *m, void *v) | |||
1039 | seq_printf(m, " stack"); | 1041 | seq_printf(m, " stack"); |
1040 | } | 1042 | } |
1041 | 1043 | ||
1044 | if (is_vm_hugetlb_page(vma)) | ||
1045 | seq_printf(m, " huge"); | ||
1046 | |||
1042 | walk_page_range(vma->vm_start, vma->vm_end, &walk); | 1047 | walk_page_range(vma->vm_start, vma->vm_end, &walk); |
1043 | 1048 | ||
1044 | if (!md->pages) | 1049 | if (!md->pages) |
diff --git a/fs/read_write.c b/fs/read_write.c index dfd125798791..5ad4248b0cd8 100644 --- a/fs/read_write.c +++ b/fs/read_write.c | |||
@@ -633,7 +633,8 @@ ssize_t do_loop_readv_writev(struct file *filp, struct iovec *iov, | |||
633 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, | 633 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, |
634 | unsigned long nr_segs, unsigned long fast_segs, | 634 | unsigned long nr_segs, unsigned long fast_segs, |
635 | struct iovec *fast_pointer, | 635 | struct iovec *fast_pointer, |
636 | struct iovec **ret_pointer) | 636 | struct iovec **ret_pointer, |
637 | int check_access) | ||
637 | { | 638 | { |
638 | unsigned long seg; | 639 | unsigned long seg; |
639 | ssize_t ret; | 640 | ssize_t ret; |
@@ -689,7 +690,8 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, | |||
689 | ret = -EINVAL; | 690 | ret = -EINVAL; |
690 | goto out; | 691 | goto out; |
691 | } | 692 | } |
692 | if (unlikely(!access_ok(vrfy_dir(type), buf, len))) { | 693 | if (check_access |
694 | && unlikely(!access_ok(vrfy_dir(type), buf, len))) { | ||
693 | ret = -EFAULT; | 695 | ret = -EFAULT; |
694 | goto out; | 696 | goto out; |
695 | } | 697 | } |
@@ -721,7 +723,7 @@ static ssize_t do_readv_writev(int type, struct file *file, | |||
721 | } | 723 | } |
722 | 724 | ||
723 | ret = rw_copy_check_uvector(type, uvector, nr_segs, | 725 | ret = rw_copy_check_uvector(type, uvector, nr_segs, |
724 | ARRAY_SIZE(iovstack), iovstack, &iov); | 726 | ARRAY_SIZE(iovstack), iovstack, &iov, 1); |
725 | if (ret <= 0) | 727 | if (ret <= 0) |
726 | goto out; | 728 | goto out; |
727 | 729 | ||
diff --git a/fs/super.c b/fs/super.c index 3f56a269a4f4..32a81f3467e0 100644 --- a/fs/super.c +++ b/fs/super.c | |||
@@ -61,7 +61,7 @@ static int prune_super(struct shrinker *shrink, struct shrink_control *sc) | |||
61 | return -1; | 61 | return -1; |
62 | 62 | ||
63 | if (!grab_super_passive(sb)) | 63 | if (!grab_super_passive(sb)) |
64 | return -1; | 64 | return !sc->nr_to_scan ? 0 : -1; |
65 | 65 | ||
66 | if (sb->s_op && sb->s_op->nr_cached_objects) | 66 | if (sb->s_op && sb->s_op->nr_cached_objects) |
67 | fs_objects = sb->s_op->nr_cached_objects(sb); | 67 | fs_objects = sb->s_op->nr_cached_objects(sb); |
diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index dbd52d4b5eed..dc8a8dcc5ae1 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h | |||
@@ -112,8 +112,8 @@ struct extent_position { | |||
112 | 112 | ||
113 | /* super.c */ | 113 | /* super.c */ |
114 | 114 | ||
115 | __attribute__((format(printf, 3, 4))) | 115 | extern __printf(3, 4) void udf_warning(struct super_block *, const char *, |
116 | extern void udf_warning(struct super_block *, const char *, const char *, ...); | 116 | const char *, ...); |
117 | static inline void udf_updated_lvid(struct super_block *sb) | 117 | static inline void udf_updated_lvid(struct super_block *sb) |
118 | { | 118 | { |
119 | struct buffer_head *bh = UDF_SB(sb)->s_lvid_bh; | 119 | struct buffer_head *bh = UDF_SB(sb)->s_lvid_bh; |
diff --git a/fs/ufs/ufs.h b/fs/ufs/ufs.h index 5be2755dd715..c26f2bcec264 100644 --- a/fs/ufs/ufs.h +++ b/fs/ufs/ufs.h | |||
@@ -117,9 +117,12 @@ extern int ufs_getfrag_block (struct inode *inode, sector_t fragment, struct buf | |||
117 | extern const struct file_operations ufs_dir_operations; | 117 | extern const struct file_operations ufs_dir_operations; |
118 | 118 | ||
119 | /* super.c */ | 119 | /* super.c */ |
120 | extern void ufs_warning (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); | 120 | extern __printf(3, 4) |
121 | extern void ufs_error (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); | 121 | void ufs_warning(struct super_block *, const char *, const char *, ...); |
122 | extern void ufs_panic (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4))); | 122 | extern __printf(3, 4) |
123 | void ufs_error(struct super_block *, const char *, const char *, ...); | ||
124 | extern __printf(3, 4) | ||
125 | void ufs_panic(struct super_block *, const char *, const char *, ...); | ||
123 | 126 | ||
124 | /* symlink.c */ | 127 | /* symlink.c */ |
125 | extern const struct inode_operations ufs_fast_symlink_inode_operations; | 128 | extern const struct inode_operations ufs_fast_symlink_inode_operations; |
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 11b2aad982d4..33b13310ee0c 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c | |||
@@ -902,11 +902,11 @@ xfs_vm_writepage( | |||
902 | * random callers for direct reclaim or memcg reclaim. We explicitly | 902 | * random callers for direct reclaim or memcg reclaim. We explicitly |
903 | * allow reclaim from kswapd as the stack usage there is relatively low. | 903 | * allow reclaim from kswapd as the stack usage there is relatively low. |
904 | * | 904 | * |
905 | * This should really be done by the core VM, but until that happens | 905 | * This should never happen except in the case of a VM regression so |
906 | * filesystems like XFS, btrfs and ext4 have to take care of this | 906 | * warn about it. |
907 | * by themselves. | ||
908 | */ | 907 | */ |
909 | if ((current->flags & (PF_MEMALLOC|PF_KSWAPD)) == PF_MEMALLOC) | 908 | if (WARN_ON_ONCE((current->flags & (PF_MEMALLOC|PF_KSWAPD)) == |
909 | PF_MEMALLOC)) | ||
910 | goto redirty; | 910 | goto redirty; |
911 | 911 | ||
912 | /* | 912 | /* |
diff --git a/fs/xfs/xfs_message.h b/fs/xfs/xfs_message.h index 7fb7ea007672..56dc0c17f16a 100644 --- a/fs/xfs/xfs_message.h +++ b/fs/xfs/xfs_message.h | |||
@@ -3,31 +3,29 @@ | |||
3 | 3 | ||
4 | struct xfs_mount; | 4 | struct xfs_mount; |
5 | 5 | ||
6 | extern void xfs_emerg(const struct xfs_mount *mp, const char *fmt, ...) | 6 | extern __printf(2, 3) |
7 | __attribute__ ((format (printf, 2, 3))); | 7 | void xfs_emerg(const struct xfs_mount *mp, const char *fmt, ...); |
8 | extern void xfs_alert(const struct xfs_mount *mp, const char *fmt, ...) | 8 | extern __printf(2, 3) |
9 | __attribute__ ((format (printf, 2, 3))); | 9 | void xfs_alert(const struct xfs_mount *mp, const char *fmt, ...); |
10 | extern void xfs_alert_tag(const struct xfs_mount *mp, int tag, | 10 | extern __printf(3, 4) |
11 | const char *fmt, ...) | 11 | void xfs_alert_tag(const struct xfs_mount *mp, int tag, const char *fmt, ...); |
12 | __attribute__ ((format (printf, 3, 4))); | 12 | extern __printf(2, 3) |
13 | extern void xfs_crit(const struct xfs_mount *mp, const char *fmt, ...) | 13 | void xfs_crit(const struct xfs_mount *mp, const char *fmt, ...); |
14 | __attribute__ ((format (printf, 2, 3))); | 14 | extern __printf(2, 3) |
15 | extern void xfs_err(const struct xfs_mount *mp, const char *fmt, ...) | 15 | void xfs_err(const struct xfs_mount *mp, const char *fmt, ...); |
16 | __attribute__ ((format (printf, 2, 3))); | 16 | extern __printf(2, 3) |
17 | extern void xfs_warn(const struct xfs_mount *mp, const char *fmt, ...) | 17 | void xfs_warn(const struct xfs_mount *mp, const char *fmt, ...); |
18 | __attribute__ ((format (printf, 2, 3))); | 18 | extern __printf(2, 3) |
19 | extern void xfs_notice(const struct xfs_mount *mp, const char *fmt, ...) | 19 | void xfs_notice(const struct xfs_mount *mp, const char *fmt, ...); |
20 | __attribute__ ((format (printf, 2, 3))); | 20 | extern __printf(2, 3) |
21 | extern void xfs_info(const struct xfs_mount *mp, const char *fmt, ...) | 21 | void xfs_info(const struct xfs_mount *mp, const char *fmt, ...); |
22 | __attribute__ ((format (printf, 2, 3))); | ||
23 | 22 | ||
24 | #ifdef DEBUG | 23 | #ifdef DEBUG |
25 | extern void xfs_debug(const struct xfs_mount *mp, const char *fmt, ...) | 24 | extern __printf(2, 3) |
26 | __attribute__ ((format (printf, 2, 3))); | 25 | void xfs_debug(const struct xfs_mount *mp, const char *fmt, ...); |
27 | #else | 26 | #else |
28 | static inline void | 27 | static inline __printf(2, 3) |
29 | __attribute__ ((format (printf, 2, 3))) | 28 | void xfs_debug(const struct xfs_mount *mp, const char *fmt, ...) |
30 | xfs_debug(const struct xfs_mount *mp, const char *fmt, ...) | ||
31 | { | 29 | { |
32 | } | 30 | } |
33 | #endif | 31 | #endif |