diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/compat.c | 4 | ||||
-rw-r--r-- | fs/debugfs/inode.c | 16 | ||||
-rw-r--r-- | fs/partitions/check.c | 4 | ||||
-rw-r--r-- | fs/read_write.c | 14 |
4 files changed, 32 insertions, 6 deletions
diff --git a/fs/compat.c b/fs/compat.c index 1c859dae758f..3f84d5f15889 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
@@ -1236,7 +1236,7 @@ compat_sys_readv(unsigned long fd, const struct compat_iovec __user *vec, | |||
1236 | 1236 | ||
1237 | asmlinkage ssize_t | 1237 | asmlinkage ssize_t |
1238 | compat_sys_preadv(unsigned long fd, const struct compat_iovec __user *vec, | 1238 | compat_sys_preadv(unsigned long fd, const struct compat_iovec __user *vec, |
1239 | unsigned long vlen, u32 pos_high, u32 pos_low) | 1239 | unsigned long vlen, u32 pos_low, u32 pos_high) |
1240 | { | 1240 | { |
1241 | loff_t pos = ((loff_t)pos_high << 32) | pos_low; | 1241 | loff_t pos = ((loff_t)pos_high << 32) | pos_low; |
1242 | struct file *file; | 1242 | struct file *file; |
@@ -1293,7 +1293,7 @@ compat_sys_writev(unsigned long fd, const struct compat_iovec __user *vec, | |||
1293 | 1293 | ||
1294 | asmlinkage ssize_t | 1294 | asmlinkage ssize_t |
1295 | compat_sys_pwritev(unsigned long fd, const struct compat_iovec __user *vec, | 1295 | compat_sys_pwritev(unsigned long fd, const struct compat_iovec __user *vec, |
1296 | unsigned long vlen, u32 pos_high, u32 pos_low) | 1296 | unsigned long vlen, u32 pos_low, u32 pos_high) |
1297 | { | 1297 | { |
1298 | loff_t pos = ((loff_t)pos_high << 32) | pos_low; | 1298 | loff_t pos = ((loff_t)pos_high << 32) | pos_low; |
1299 | struct file *file; | 1299 | struct file *file; |
diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c index 81ae9ea3c6e1..0662ba6de85a 100644 --- a/fs/debugfs/inode.c +++ b/fs/debugfs/inode.c | |||
@@ -30,6 +30,7 @@ | |||
30 | 30 | ||
31 | static struct vfsmount *debugfs_mount; | 31 | static struct vfsmount *debugfs_mount; |
32 | static int debugfs_mount_count; | 32 | static int debugfs_mount_count; |
33 | static bool debugfs_registered; | ||
33 | 34 | ||
34 | static struct inode *debugfs_get_inode(struct super_block *sb, int mode, dev_t dev) | 35 | static struct inode *debugfs_get_inode(struct super_block *sb, int mode, dev_t dev) |
35 | { | 36 | { |
@@ -496,6 +497,16 @@ exit: | |||
496 | } | 497 | } |
497 | EXPORT_SYMBOL_GPL(debugfs_rename); | 498 | EXPORT_SYMBOL_GPL(debugfs_rename); |
498 | 499 | ||
500 | /** | ||
501 | * debugfs_initialized - Tells whether debugfs has been registered | ||
502 | */ | ||
503 | bool debugfs_initialized(void) | ||
504 | { | ||
505 | return debugfs_registered; | ||
506 | } | ||
507 | EXPORT_SYMBOL_GPL(debugfs_initialized); | ||
508 | |||
509 | |||
499 | static struct kobject *debug_kobj; | 510 | static struct kobject *debug_kobj; |
500 | 511 | ||
501 | static int __init debugfs_init(void) | 512 | static int __init debugfs_init(void) |
@@ -509,11 +520,16 @@ static int __init debugfs_init(void) | |||
509 | retval = register_filesystem(&debug_fs_type); | 520 | retval = register_filesystem(&debug_fs_type); |
510 | if (retval) | 521 | if (retval) |
511 | kobject_put(debug_kobj); | 522 | kobject_put(debug_kobj); |
523 | else | ||
524 | debugfs_registered = true; | ||
525 | |||
512 | return retval; | 526 | return retval; |
513 | } | 527 | } |
514 | 528 | ||
515 | static void __exit debugfs_exit(void) | 529 | static void __exit debugfs_exit(void) |
516 | { | 530 | { |
531 | debugfs_registered = false; | ||
532 | |||
517 | simple_release_fs(&debugfs_mount, &debugfs_mount_count); | 533 | simple_release_fs(&debugfs_mount, &debugfs_mount_count); |
518 | unregister_filesystem(&debug_fs_type); | 534 | unregister_filesystem(&debug_fs_type); |
519 | kobject_put(debug_kobj); | 535 | kobject_put(debug_kobj); |
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 38e337d51ced..99e33ef40be4 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/kmod.h> | 19 | #include <linux/kmod.h> |
20 | #include <linux/ctype.h> | 20 | #include <linux/ctype.h> |
21 | #include <linux/genhd.h> | 21 | #include <linux/genhd.h> |
22 | #include <linux/blktrace_api.h> | ||
22 | 23 | ||
23 | #include "check.h" | 24 | #include "check.h" |
24 | 25 | ||
@@ -294,6 +295,9 @@ static struct attribute_group part_attr_group = { | |||
294 | 295 | ||
295 | static struct attribute_group *part_attr_groups[] = { | 296 | static struct attribute_group *part_attr_groups[] = { |
296 | &part_attr_group, | 297 | &part_attr_group, |
298 | #ifdef CONFIG_BLK_DEV_IO_TRACE | ||
299 | &blk_trace_attr_group, | ||
300 | #endif | ||
297 | NULL | 301 | NULL |
298 | }; | 302 | }; |
299 | 303 | ||
diff --git a/fs/read_write.c b/fs/read_write.c index 6d5d8ff238aa..9d1e76bb9ee1 100644 --- a/fs/read_write.c +++ b/fs/read_write.c | |||
@@ -731,10 +731,16 @@ SYSCALL_DEFINE3(writev, unsigned long, fd, const struct iovec __user *, vec, | |||
731 | return ret; | 731 | return ret; |
732 | } | 732 | } |
733 | 733 | ||
734 | static inline loff_t pos_from_hilo(unsigned long high, unsigned long low) | ||
735 | { | ||
736 | #define HALF_LONG_BITS (BITS_PER_LONG / 2) | ||
737 | return (((loff_t)high << HALF_LONG_BITS) << HALF_LONG_BITS) | low; | ||
738 | } | ||
739 | |||
734 | SYSCALL_DEFINE5(preadv, unsigned long, fd, const struct iovec __user *, vec, | 740 | SYSCALL_DEFINE5(preadv, unsigned long, fd, const struct iovec __user *, vec, |
735 | unsigned long, vlen, u32, pos_high, u32, pos_low) | 741 | unsigned long, vlen, unsigned long, pos_l, unsigned long, pos_h) |
736 | { | 742 | { |
737 | loff_t pos = ((loff_t)pos_high << 32) | pos_low; | 743 | loff_t pos = pos_from_hilo(pos_h, pos_l); |
738 | struct file *file; | 744 | struct file *file; |
739 | ssize_t ret = -EBADF; | 745 | ssize_t ret = -EBADF; |
740 | int fput_needed; | 746 | int fput_needed; |
@@ -757,9 +763,9 @@ SYSCALL_DEFINE5(preadv, unsigned long, fd, const struct iovec __user *, vec, | |||
757 | } | 763 | } |
758 | 764 | ||
759 | SYSCALL_DEFINE5(pwritev, unsigned long, fd, const struct iovec __user *, vec, | 765 | SYSCALL_DEFINE5(pwritev, unsigned long, fd, const struct iovec __user *, vec, |
760 | unsigned long, vlen, u32, pos_high, u32, pos_low) | 766 | unsigned long, vlen, unsigned long, pos_l, unsigned long, pos_h) |
761 | { | 767 | { |
762 | loff_t pos = ((loff_t)pos_high << 32) | pos_low; | 768 | loff_t pos = pos_from_hilo(pos_h, pos_l); |
763 | struct file *file; | 769 | struct file *file; |
764 | ssize_t ret = -EBADF; | 770 | ssize_t ret = -EBADF; |
765 | int fput_needed; | 771 | int fput_needed; |