diff options
70 files changed, 154 insertions, 250 deletions
diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c index 6296bfd9cb0b..e309ef70a531 100644 --- a/arch/powerpc/platforms/cell/spufs/inode.c +++ b/arch/powerpc/platforms/cell/spufs/inode.c | |||
| @@ -97,7 +97,6 @@ spufs_new_inode(struct super_block *sb, int mode) | |||
| 97 | inode->i_mode = mode; | 97 | inode->i_mode = mode; |
| 98 | inode->i_uid = current_fsuid(); | 98 | inode->i_uid = current_fsuid(); |
| 99 | inode->i_gid = current_fsgid(); | 99 | inode->i_gid = current_fsgid(); |
| 100 | inode->i_blocks = 0; | ||
| 101 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 100 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 102 | out: | 101 | out: |
| 103 | return inode; | 102 | return inode; |
diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c index 9d4f8e6c0800..5a805df216bb 100644 --- a/arch/s390/hypfs/inode.c +++ b/arch/s390/hypfs/inode.c | |||
| @@ -106,7 +106,6 @@ static struct inode *hypfs_make_inode(struct super_block *sb, int mode) | |||
| 106 | ret->i_mode = mode; | 106 | ret->i_mode = mode; |
| 107 | ret->i_uid = hypfs_info->uid; | 107 | ret->i_uid = hypfs_info->uid; |
| 108 | ret->i_gid = hypfs_info->gid; | 108 | ret->i_gid = hypfs_info->gid; |
| 109 | ret->i_blocks = 0; | ||
| 110 | ret->i_atime = ret->i_mtime = ret->i_ctime = CURRENT_TIME; | 109 | ret->i_atime = ret->i_mtime = ret->i_ctime = CURRENT_TIME; |
| 111 | if (mode & S_IFDIR) | 110 | if (mode & S_IFDIR) |
| 112 | ret->i_nlink = 2; | 111 | ret->i_nlink = 2; |
diff --git a/arch/um/Makefile b/arch/um/Makefile index d944c343acdb..0728def32234 100644 --- a/arch/um/Makefile +++ b/arch/um/Makefile | |||
| @@ -22,10 +22,11 @@ MODE_INCLUDE += -I$(srctree)/$(ARCH_DIR)/include/shared/skas | |||
| 22 | 22 | ||
| 23 | include $(srctree)/$(ARCH_DIR)/Makefile-skas | 23 | include $(srctree)/$(ARCH_DIR)/Makefile-skas |
| 24 | 24 | ||
| 25 | ARCH_INCLUDE := -I$(srctree)/$(ARCH_DIR)/include/shared | 25 | SHARED_HEADERS := $(ARCH_DIR)/include/shared |
| 26 | ARCH_INCLUDE := -I$(srctree)/$(SHARED_HEADERS) | ||
| 26 | ARCH_INCLUDE += -I$(srctree)/$(ARCH_DIR)/sys-$(SUBARCH)/shared | 27 | ARCH_INCLUDE += -I$(srctree)/$(ARCH_DIR)/sys-$(SUBARCH)/shared |
| 27 | ifneq ($(KBUILD_SRC),) | 28 | ifneq ($(KBUILD_SRC),) |
| 28 | ARCH_INCLUDE += -I$(ARCH_DIR)/include/shared # for two generated files | 29 | ARCH_INCLUDE += -I$(SHARED_HEADERS) |
| 29 | endif | 30 | endif |
| 30 | KBUILD_CPPFLAGS += -I$(srctree)/$(ARCH_DIR)/sys-$(SUBARCH) | 31 | KBUILD_CPPFLAGS += -I$(srctree)/$(ARCH_DIR)/sys-$(SUBARCH) |
| 31 | 32 | ||
| @@ -85,8 +86,8 @@ endef | |||
| 85 | 86 | ||
| 86 | KBUILD_KCONFIG := arch/um/Kconfig.$(HEADER_ARCH) | 87 | KBUILD_KCONFIG := arch/um/Kconfig.$(HEADER_ARCH) |
| 87 | 88 | ||
| 88 | archprepare: $(ARCH_DIR)/include/shared/user_constants.h | 89 | archprepare: $(SHARED_HEADERS)/user_constants.h |
| 89 | prepare: $(ARCH_DIR)/include/shared/kern_constants.h | 90 | archprepare: $(SHARED_HEADERS)/kern_constants.h |
| 90 | 91 | ||
| 91 | LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static | 92 | LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static |
| 92 | LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib | 93 | LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib |
| @@ -119,17 +120,13 @@ endef | |||
| 119 | # When cleaning we don't include .config, so we don't include | 120 | # When cleaning we don't include .config, so we don't include |
| 120 | # TT or skas makefiles and don't clean skas_ptregs.h. | 121 | # TT or skas makefiles and don't clean skas_ptregs.h. |
| 121 | CLEAN_FILES += linux x.i gmon.out \ | 122 | CLEAN_FILES += linux x.i gmon.out \ |
| 122 | $(ARCH_DIR)/include/shared/user_constants.h \ | 123 | $(SHARED_HEADERS)/user_constants.h \ |
| 123 | $(ARCH_DIR)/include/shared/kern_constants.h | 124 | $(SHARED_HEADERS)/kern_constants.h |
| 124 | 125 | ||
| 125 | archclean: | 126 | archclean: |
| 126 | @find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \ | 127 | @find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \ |
| 127 | -o -name '*.gcov' \) -type f -print | xargs rm -f | 128 | -o -name '*.gcov' \) -type f -print | xargs rm -f |
| 128 | 129 | ||
| 129 | $(objtree)/$(ARCH_DIR)/include/shared: | ||
| 130 | @echo ' MKDIR $@' | ||
| 131 | $(Q)mkdir -p $@ | ||
| 132 | |||
| 133 | # Generated files | 130 | # Generated files |
| 134 | 131 | ||
| 135 | $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s: FORCE | 132 | $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s: FORCE |
| @@ -148,11 +145,11 @@ define filechk_gen-asm-offsets | |||
| 148 | echo ""; ) | 145 | echo ""; ) |
| 149 | endef | 146 | endef |
| 150 | 147 | ||
| 151 | $(ARCH_DIR)/include/shared/user_constants.h: $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s | 148 | $(SHARED_HEADERS)/user_constants.h: $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s |
| 152 | $(call filechk,gen-asm-offsets) | 149 | $(call filechk,gen-asm-offsets) |
| 153 | 150 | ||
| 154 | $(ARCH_DIR)/include/shared/kern_constants.h: $(objtree)/$(ARCH_DIR)/include/shared | 151 | $(SHARED_HEADERS)/kern_constants.h: |
| 155 | @echo ' SYMLINK $@' | 152 | $(Q)mkdir -p $(dir $@) |
| 156 | $(Q)ln -sf ../../../../include/asm/asm-offsets.h $@ | 153 | $(Q)echo '#include "../../../../include/asm/asm-offsets.h"' >$@ |
| 157 | 154 | ||
| 158 | export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS HEADER_ARCH DEV_NULL_PATH | 155 | export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS HEADER_ARCH DEV_NULL_PATH |
diff --git a/arch/um/include/asm/system.h b/arch/um/include/asm/system.h index ae5f94d6317d..753346e2cdfd 100644 --- a/arch/um/include/asm/system.h +++ b/arch/um/include/asm/system.h | |||
| @@ -11,21 +11,21 @@ extern int get_signals(void); | |||
| 11 | extern void block_signals(void); | 11 | extern void block_signals(void); |
| 12 | extern void unblock_signals(void); | 12 | extern void unblock_signals(void); |
| 13 | 13 | ||
| 14 | #define raw_local_save_flags(flags) do { typecheck(unsigned long, flags); \ | 14 | #define local_save_flags(flags) do { typecheck(unsigned long, flags); \ |
| 15 | (flags) = get_signals(); } while(0) | 15 | (flags) = get_signals(); } while(0) |
| 16 | #define raw_local_irq_restore(flags) do { typecheck(unsigned long, flags); \ | 16 | #define local_irq_restore(flags) do { typecheck(unsigned long, flags); \ |
| 17 | set_signals(flags); } while(0) | 17 | set_signals(flags); } while(0) |
| 18 | 18 | ||
| 19 | #define raw_local_irq_save(flags) do { raw_local_save_flags(flags); \ | 19 | #define local_irq_save(flags) do { local_save_flags(flags); \ |
| 20 | raw_local_irq_disable(); } while(0) | 20 | local_irq_disable(); } while(0) |
| 21 | 21 | ||
| 22 | #define raw_local_irq_enable() unblock_signals() | 22 | #define local_irq_enable() unblock_signals() |
| 23 | #define raw_local_irq_disable() block_signals() | 23 | #define local_irq_disable() block_signals() |
| 24 | 24 | ||
| 25 | #define irqs_disabled() \ | 25 | #define irqs_disabled() \ |
| 26 | ({ \ | 26 | ({ \ |
| 27 | unsigned long flags; \ | 27 | unsigned long flags; \ |
| 28 | raw_local_save_flags(flags); \ | 28 | local_save_flags(flags); \ |
| 29 | (flags == 0); \ | 29 | (flags == 0); \ |
| 30 | }) | 30 | }) |
| 31 | 31 | ||
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu index 85a78575956c..8078955845ae 100644 --- a/arch/x86/Kconfig.cpu +++ b/arch/x86/Kconfig.cpu | |||
| @@ -408,7 +408,7 @@ config X86_MINIMUM_CPU_FAMILY | |||
| 408 | 408 | ||
| 409 | config X86_DEBUGCTLMSR | 409 | config X86_DEBUGCTLMSR |
| 410 | def_bool y | 410 | def_bool y |
| 411 | depends on !(MK6 || MWINCHIPC6 || MWINCHIP3D || MCYRIXIII || M586MMX || M586TSC || M586 || M486 || M386) | 411 | depends on !(MK6 || MWINCHIPC6 || MWINCHIP3D || MCYRIXIII || M586MMX || M586TSC || M586 || M486 || M386) && !UML |
| 412 | 412 | ||
| 413 | menuconfig PROCESSOR_SELECT | 413 | menuconfig PROCESSOR_SELECT |
| 414 | bool "Supported processor vendors" if EMBEDDED | 414 | bool "Supported processor vendors" if EMBEDDED |
diff --git a/drivers/infiniband/hw/ipath/ipath_fs.c b/drivers/infiniband/hw/ipath/ipath_fs.c index 53912c327bfe..8dc2bb781605 100644 --- a/drivers/infiniband/hw/ipath/ipath_fs.c +++ b/drivers/infiniband/hw/ipath/ipath_fs.c | |||
| @@ -57,9 +57,6 @@ static int ipathfs_mknod(struct inode *dir, struct dentry *dentry, | |||
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | inode->i_mode = mode; | 59 | inode->i_mode = mode; |
| 60 | inode->i_uid = 0; | ||
| 61 | inode->i_gid = 0; | ||
| 62 | inode->i_blocks = 0; | ||
| 63 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 60 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 64 | inode->i_private = data; | 61 | inode->i_private = data; |
| 65 | if ((mode & S_IFMT) == S_IFDIR) { | 62 | if ((mode & S_IFMT) == S_IFDIR) { |
diff --git a/drivers/isdn/capi/capifs.c b/drivers/isdn/capi/capifs.c index 0aa66ec4cbdd..b129409925af 100644 --- a/drivers/isdn/capi/capifs.c +++ b/drivers/isdn/capi/capifs.c | |||
| @@ -111,8 +111,6 @@ capifs_fill_super(struct super_block *s, void *data, int silent) | |||
| 111 | goto fail; | 111 | goto fail; |
| 112 | inode->i_ino = 1; | 112 | inode->i_ino = 1; |
| 113 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; | 113 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; |
| 114 | inode->i_blocks = 0; | ||
| 115 | inode->i_uid = inode->i_gid = 0; | ||
| 116 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR; | 114 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR; |
| 117 | inode->i_op = &simple_dir_inode_operations; | 115 | inode->i_op = &simple_dir_inode_operations; |
| 118 | inode->i_fop = &simple_dir_operations; | 116 | inode->i_fop = &simple_dir_operations; |
diff --git a/drivers/message/i2o/exec-osm.c b/drivers/message/i2o/exec-osm.c index 56faef1a1d55..06c655c55587 100644 --- a/drivers/message/i2o/exec-osm.c +++ b/drivers/message/i2o/exec-osm.c | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> | 19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> |
| 20 | * Deepak Saxena <deepak@plexity.net> | 20 | * Deepak Saxena <deepak@plexity.net> |
| 21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> | 21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> |
| 22 | * Alan Cox <alan@redhat.com>: | 22 | * Alan Cox <alan@lxorguk.ukuu.org.uk>: |
| 23 | * Ported to Linux 2.5. | 23 | * Ported to Linux 2.5. |
| 24 | * Markus Lidel <Markus.Lidel@shadowconnect.com>: | 24 | * Markus Lidel <Markus.Lidel@shadowconnect.com>: |
| 25 | * Minor fixes for 2.6. | 25 | * Minor fixes for 2.6. |
diff --git a/drivers/message/i2o/i2o_config.c b/drivers/message/i2o/i2o_config.c index f3384c32b9a1..efba7021948a 100644 --- a/drivers/message/i2o/i2o_config.c +++ b/drivers/message/i2o/i2o_config.c | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | * Changed ioctl_swdl(), implemented ioctl_swul() and ioctl_swdel() | 19 | * Changed ioctl_swdl(), implemented ioctl_swul() and ioctl_swdel() |
| 20 | * Deepak Saxena (11/18/1999): | 20 | * Deepak Saxena (11/18/1999): |
| 21 | * Added event managmenet support | 21 | * Added event managmenet support |
| 22 | * Alan Cox <alan@redhat.com>: | 22 | * Alan Cox <alan@lxorguk.ukuu.org.uk>: |
| 23 | * 2.4 rewrite ported to 2.5 | 23 | * 2.4 rewrite ported to 2.5 |
| 24 | * Markus Lidel <Markus.Lidel@shadowconnect.com>: | 24 | * Markus Lidel <Markus.Lidel@shadowconnect.com>: |
| 25 | * Added pass-thru support for Adaptec's raidutils | 25 | * Added pass-thru support for Adaptec's raidutils |
diff --git a/drivers/message/i2o/iop.c b/drivers/message/i2o/iop.c index 6e53a30bfd38..35c67d1f255e 100644 --- a/drivers/message/i2o/iop.c +++ b/drivers/message/i2o/iop.c | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> | 19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> |
| 20 | * Deepak Saxena <deepak@plexity.net> | 20 | * Deepak Saxena <deepak@plexity.net> |
| 21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> | 21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> |
| 22 | * Alan Cox <alan@redhat.com>: | 22 | * Alan Cox <alan@lxorguk.ukuu.org.uk>: |
| 23 | * Ported to Linux 2.5. | 23 | * Ported to Linux 2.5. |
| 24 | * Markus Lidel <Markus.Lidel@shadowconnect.com>: | 24 | * Markus Lidel <Markus.Lidel@shadowconnect.com>: |
| 25 | * Minor fixes for 2.6. | 25 | * Minor fixes for 2.6. |
diff --git a/drivers/message/i2o/pci.c b/drivers/message/i2o/pci.c index 610ef1204e68..25d6f2341983 100644 --- a/drivers/message/i2o/pci.c +++ b/drivers/message/i2o/pci.c | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> | 19 | * Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI> |
| 20 | * Deepak Saxena <deepak@plexity.net> | 20 | * Deepak Saxena <deepak@plexity.net> |
| 21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> | 21 | * Boji T Kannanthanam <boji.t.kannanthanam@intel.com> |
| 22 | * Alan Cox <alan@redhat.com>: | 22 | * Alan Cox <alan@lxorguk.ukuu.org.uk>: |
| 23 | * Ported to Linux 2.5. | 23 | * Ported to Linux 2.5. |
| 24 | * Markus Lidel <Markus.Lidel@shadowconnect.com>: | 24 | * Markus Lidel <Markus.Lidel@shadowconnect.com>: |
| 25 | * Minor fixes for 2.6. | 25 | * Minor fixes for 2.6. |
diff --git a/drivers/misc/ibmasm/ibmasmfs.c b/drivers/misc/ibmasm/ibmasmfs.c index 22a7e8ba211d..de966a6fb7e6 100644 --- a/drivers/misc/ibmasm/ibmasmfs.c +++ b/drivers/misc/ibmasm/ibmasmfs.c | |||
| @@ -146,8 +146,6 @@ static struct inode *ibmasmfs_make_inode(struct super_block *sb, int mode) | |||
| 146 | 146 | ||
| 147 | if (ret) { | 147 | if (ret) { |
| 148 | ret->i_mode = mode; | 148 | ret->i_mode = mode; |
| 149 | ret->i_uid = ret->i_gid = 0; | ||
| 150 | ret->i_blocks = 0; | ||
| 151 | ret->i_atime = ret->i_mtime = ret->i_ctime = CURRENT_TIME; | 149 | ret->i_atime = ret->i_mtime = ret->i_ctime = CURRENT_TIME; |
| 152 | } | 150 | } |
| 153 | return ret; | 151 | return ret; |
diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c index ddc4c59f02dc..b7e4cee24269 100644 --- a/drivers/oprofile/oprofilefs.c +++ b/drivers/oprofile/oprofilefs.c | |||
| @@ -29,9 +29,6 @@ static struct inode *oprofilefs_get_inode(struct super_block *sb, int mode) | |||
| 29 | 29 | ||
| 30 | if (inode) { | 30 | if (inode) { |
| 31 | inode->i_mode = mode; | 31 | inode->i_mode = mode; |
| 32 | inode->i_uid = 0; | ||
| 33 | inode->i_gid = 0; | ||
| 34 | inode->i_blocks = 0; | ||
| 35 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 32 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 36 | } | 33 | } |
| 37 | return inode; | 34 | return inode; |
diff --git a/drivers/usb/core/inode.c b/drivers/usb/core/inode.c index 185be760833e..2a129cb7bb56 100644 --- a/drivers/usb/core/inode.c +++ b/drivers/usb/core/inode.c | |||
| @@ -279,7 +279,6 @@ static struct inode *usbfs_get_inode (struct super_block *sb, int mode, dev_t de | |||
| 279 | inode->i_mode = mode; | 279 | inode->i_mode = mode; |
| 280 | inode->i_uid = current_fsuid(); | 280 | inode->i_uid = current_fsuid(); |
| 281 | inode->i_gid = current_fsgid(); | 281 | inode->i_gid = current_fsgid(); |
| 282 | inode->i_blocks = 0; | ||
| 283 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 282 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 284 | switch (mode & S_IFMT) { | 283 | switch (mode & S_IFMT) { |
| 285 | default: | 284 | default: |
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c index c4e62a6297d7..2e71368f45b4 100644 --- a/drivers/usb/gadget/file_storage.c +++ b/drivers/usb/gadget/file_storage.c | |||
| @@ -1863,26 +1863,10 @@ static int do_write(struct fsg_dev *fsg) | |||
| 1863 | static int fsync_sub(struct lun *curlun) | 1863 | static int fsync_sub(struct lun *curlun) |
| 1864 | { | 1864 | { |
| 1865 | struct file *filp = curlun->filp; | 1865 | struct file *filp = curlun->filp; |
| 1866 | struct inode *inode; | ||
| 1867 | int rc, err; | ||
| 1868 | 1866 | ||
| 1869 | if (curlun->ro || !filp) | 1867 | if (curlun->ro || !filp) |
| 1870 | return 0; | 1868 | return 0; |
| 1871 | if (!filp->f_op->fsync) | 1869 | return vfs_fsync(filp, filp->f_path.dentry, 1); |
| 1872 | return -EINVAL; | ||
| 1873 | |||
| 1874 | inode = filp->f_path.dentry->d_inode; | ||
| 1875 | mutex_lock(&inode->i_mutex); | ||
| 1876 | rc = filemap_fdatawrite(inode->i_mapping); | ||
| 1877 | err = filp->f_op->fsync(filp, filp->f_path.dentry, 1); | ||
| 1878 | if (!rc) | ||
| 1879 | rc = err; | ||
| 1880 | err = filemap_fdatawait(inode->i_mapping); | ||
| 1881 | if (!rc) | ||
| 1882 | rc = err; | ||
| 1883 | mutex_unlock(&inode->i_mutex); | ||
| 1884 | VLDBG(curlun, "fdatasync -> %d\n", rc); | ||
| 1885 | return rc; | ||
| 1886 | } | 1870 | } |
| 1887 | 1871 | ||
| 1888 | static void fsync_all(struct fsg_dev *fsg) | 1872 | static void fsync_all(struct fsg_dev *fsg) |
diff --git a/drivers/usb/gadget/inode.c b/drivers/usb/gadget/inode.c index eeb26c0f88e5..317b48fdbf01 100644 --- a/drivers/usb/gadget/inode.c +++ b/drivers/usb/gadget/inode.c | |||
| @@ -2001,7 +2001,6 @@ gadgetfs_make_inode (struct super_block *sb, | |||
| 2001 | inode->i_mode = mode; | 2001 | inode->i_mode = mode; |
| 2002 | inode->i_uid = default_uid; | 2002 | inode->i_uid = default_uid; |
| 2003 | inode->i_gid = default_gid; | 2003 | inode->i_gid = default_gid; |
| 2004 | inode->i_blocks = 0; | ||
| 2005 | inode->i_atime = inode->i_mtime = inode->i_ctime | 2004 | inode->i_atime = inode->i_mtime = inode->i_ctime |
| 2006 | = CURRENT_TIME; | 2005 | = CURRENT_TIME; |
| 2007 | inode->i_private = data; | 2006 | inode->i_private = data; |
diff --git a/fs/affs/inode.c b/fs/affs/inode.c index 415d9c67ac16..3c4ec7d864c4 100644 --- a/fs/affs/inode.c +++ b/fs/affs/inode.c | |||
| @@ -119,8 +119,7 @@ struct inode *affs_iget(struct super_block *sb, unsigned long ino) | |||
| 119 | goto bad_inode; | 119 | goto bad_inode; |
| 120 | #else | 120 | #else |
| 121 | inode->i_mode |= S_IFDIR; | 121 | inode->i_mode |= S_IFDIR; |
| 122 | inode->i_op = NULL; | 122 | /* ... and leave ->i_op and ->i_fop pointing to empty */ |
| 123 | inode->i_fop = NULL; | ||
| 124 | break; | 123 | break; |
| 125 | #endif | 124 | #endif |
| 126 | case ST_LINKFILE: | 125 | case ST_LINKFILE: |
diff --git a/fs/autofs/inode.c b/fs/autofs/inode.c index c773680d5c60..e1734f2d6e26 100644 --- a/fs/autofs/inode.c +++ b/fs/autofs/inode.c | |||
| @@ -251,13 +251,11 @@ struct inode *autofs_iget(struct super_block *sb, unsigned long ino) | |||
| 251 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; | 251 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; |
| 252 | inode->i_nlink = 2; | 252 | inode->i_nlink = 2; |
| 253 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; | 253 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; |
| 254 | inode->i_blocks = 0; | ||
| 255 | 254 | ||
| 256 | if (ino == AUTOFS_ROOT_INO) { | 255 | if (ino == AUTOFS_ROOT_INO) { |
| 257 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR; | 256 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR; |
| 258 | inode->i_op = &autofs_root_inode_operations; | 257 | inode->i_op = &autofs_root_inode_operations; |
| 259 | inode->i_fop = &autofs_root_operations; | 258 | inode->i_fop = &autofs_root_operations; |
| 260 | inode->i_uid = inode->i_gid = 0; /* Changed in read_super */ | ||
| 261 | goto done; | 259 | goto done; |
| 262 | } | 260 | } |
| 263 | 261 | ||
diff --git a/fs/autofs4/inode.c b/fs/autofs4/inode.c index 7b19802cfef4..cfc23e53b6f4 100644 --- a/fs/autofs4/inode.c +++ b/fs/autofs4/inode.c | |||
| @@ -455,11 +455,7 @@ struct inode *autofs4_get_inode(struct super_block *sb, | |||
| 455 | if (sb->s_root) { | 455 | if (sb->s_root) { |
| 456 | inode->i_uid = sb->s_root->d_inode->i_uid; | 456 | inode->i_uid = sb->s_root->d_inode->i_uid; |
| 457 | inode->i_gid = sb->s_root->d_inode->i_gid; | 457 | inode->i_gid = sb->s_root->d_inode->i_gid; |
| 458 | } else { | ||
| 459 | inode->i_uid = 0; | ||
| 460 | inode->i_gid = 0; | ||
| 461 | } | 458 | } |
| 462 | inode->i_blocks = 0; | ||
| 463 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 459 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 464 | 460 | ||
| 465 | if (S_ISDIR(inf->mode)) { | 461 | if (S_ISDIR(inf->mode)) { |
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c index f2744ab4e5b3..e1158cb4fbd6 100644 --- a/fs/binfmt_misc.c +++ b/fs/binfmt_misc.c | |||
| @@ -496,9 +496,6 @@ static struct inode *bm_get_inode(struct super_block *sb, int mode) | |||
| 496 | 496 | ||
| 497 | if (inode) { | 497 | if (inode) { |
| 498 | inode->i_mode = mode; | 498 | inode->i_mode = mode; |
| 499 | inode->i_uid = 0; | ||
| 500 | inode->i_gid = 0; | ||
| 501 | inode->i_blocks = 0; | ||
| 502 | inode->i_atime = inode->i_mtime = inode->i_ctime = | 499 | inode->i_atime = inode->i_mtime = inode->i_ctime = |
| 503 | current_fs_time(inode->i_sb); | 500 | current_fs_time(inode->i_sb); |
| 504 | } | 501 | } |
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index f247da9f4edc..5ab9896fdcb2 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
| @@ -1641,7 +1641,7 @@ do_expand: | |||
| 1641 | i_size_write(inode, offset); | 1641 | i_size_write(inode, offset); |
| 1642 | spin_unlock(&inode->i_lock); | 1642 | spin_unlock(&inode->i_lock); |
| 1643 | out_truncate: | 1643 | out_truncate: |
| 1644 | if (inode->i_op && inode->i_op->truncate) | 1644 | if (inode->i_op->truncate) |
| 1645 | inode->i_op->truncate(inode); | 1645 | inode->i_op->truncate(inode); |
| 1646 | return 0; | 1646 | return 0; |
| 1647 | out_sig: | 1647 | out_sig: |
diff --git a/fs/coda/file.c b/fs/coda/file.c index 466303db2df6..6a347fbc998a 100644 --- a/fs/coda/file.c +++ b/fs/coda/file.c | |||
| @@ -201,8 +201,7 @@ int coda_release(struct inode *coda_inode, struct file *coda_file) | |||
| 201 | int coda_fsync(struct file *coda_file, struct dentry *coda_dentry, int datasync) | 201 | int coda_fsync(struct file *coda_file, struct dentry *coda_dentry, int datasync) |
| 202 | { | 202 | { |
| 203 | struct file *host_file; | 203 | struct file *host_file; |
| 204 | struct dentry *host_dentry; | 204 | struct inode *coda_inode = coda_dentry->d_inode; |
| 205 | struct inode *host_inode, *coda_inode = coda_dentry->d_inode; | ||
| 206 | struct coda_file_info *cfi; | 205 | struct coda_file_info *cfi; |
| 207 | int err = 0; | 206 | int err = 0; |
| 208 | 207 | ||
| @@ -214,14 +213,7 @@ int coda_fsync(struct file *coda_file, struct dentry *coda_dentry, int datasync) | |||
| 214 | BUG_ON(!cfi || cfi->cfi_magic != CODA_MAGIC); | 213 | BUG_ON(!cfi || cfi->cfi_magic != CODA_MAGIC); |
| 215 | host_file = cfi->cfi_container; | 214 | host_file = cfi->cfi_container; |
| 216 | 215 | ||
| 217 | if (host_file->f_op && host_file->f_op->fsync) { | 216 | err = vfs_fsync(host_file, host_file->f_path.dentry, datasync); |
| 218 | host_dentry = host_file->f_path.dentry; | ||
| 219 | host_inode = host_dentry->d_inode; | ||
| 220 | mutex_lock(&host_inode->i_mutex); | ||
| 221 | err = host_file->f_op->fsync(host_file, host_dentry, datasync); | ||
| 222 | mutex_unlock(&host_inode->i_mutex); | ||
| 223 | } | ||
| 224 | |||
| 225 | if ( !err && !datasync ) { | 217 | if ( !err && !datasync ) { |
| 226 | lock_kernel(); | 218 | lock_kernel(); |
| 227 | err = venus_fsync(coda_inode->i_sb, coda_i2f(coda_inode)); | 219 | err = venus_fsync(coda_inode->i_sb, coda_i2f(coda_inode)); |
diff --git a/fs/configfs/inode.c b/fs/configfs/inode.c index 4803ccc94480..5d349d38e056 100644 --- a/fs/configfs/inode.c +++ b/fs/configfs/inode.c | |||
| @@ -117,8 +117,6 @@ int configfs_setattr(struct dentry * dentry, struct iattr * iattr) | |||
| 117 | static inline void set_default_inode_attr(struct inode * inode, mode_t mode) | 117 | static inline void set_default_inode_attr(struct inode * inode, mode_t mode) |
| 118 | { | 118 | { |
| 119 | inode->i_mode = mode; | 119 | inode->i_mode = mode; |
| 120 | inode->i_uid = 0; | ||
| 121 | inode->i_gid = 0; | ||
| 122 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 120 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 123 | } | 121 | } |
| 124 | 122 | ||
| @@ -136,7 +134,6 @@ struct inode * configfs_new_inode(mode_t mode, struct configfs_dirent * sd) | |||
| 136 | { | 134 | { |
| 137 | struct inode * inode = new_inode(configfs_sb); | 135 | struct inode * inode = new_inode(configfs_sb); |
| 138 | if (inode) { | 136 | if (inode) { |
| 139 | inode->i_blocks = 0; | ||
| 140 | inode->i_mapping->a_ops = &configfs_aops; | 137 | inode->i_mapping->a_ops = &configfs_aops; |
| 141 | inode->i_mapping->backing_dev_info = &configfs_backing_dev_info; | 138 | inode->i_mapping->backing_dev_info = &configfs_backing_dev_info; |
| 142 | inode->i_op = &configfs_inode_operations; | 139 | inode->i_op = &configfs_inode_operations; |
diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c index f40423eb1a14..a07338d2d140 100644 --- a/fs/cramfs/inode.c +++ b/fs/cramfs/inode.c | |||
| @@ -83,8 +83,6 @@ static struct inode *get_cramfs_inode(struct super_block *sb, | |||
| 83 | inode->i_op = &page_symlink_inode_operations; | 83 | inode->i_op = &page_symlink_inode_operations; |
| 84 | inode->i_data.a_ops = &cramfs_aops; | 84 | inode->i_data.a_ops = &cramfs_aops; |
| 85 | } else { | 85 | } else { |
| 86 | inode->i_size = 0; | ||
| 87 | inode->i_blocks = 0; | ||
| 88 | init_special_inode(inode, inode->i_mode, | 86 | init_special_inode(inode, inode->i_mode, |
| 89 | old_decode_dev(cramfs_inode->size)); | 87 | old_decode_dev(cramfs_inode->size)); |
| 90 | } | 88 | } |
diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c index 3dbe2169cf36..81ae9ea3c6e1 100644 --- a/fs/debugfs/inode.c +++ b/fs/debugfs/inode.c | |||
| @@ -37,9 +37,6 @@ static struct inode *debugfs_get_inode(struct super_block *sb, int mode, dev_t d | |||
| 37 | 37 | ||
| 38 | if (inode) { | 38 | if (inode) { |
| 39 | inode->i_mode = mode; | 39 | inode->i_mode = mode; |
| 40 | inode->i_uid = 0; | ||
| 41 | inode->i_gid = 0; | ||
| 42 | inode->i_blocks = 0; | ||
| 43 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 40 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 44 | switch (mode & S_IFMT) { | 41 | switch (mode & S_IFMT) { |
| 45 | default: | 42 | default: |
diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index fff96e152c0c..5f3231b9633f 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c | |||
| @@ -189,8 +189,6 @@ static int mknod_ptmx(struct super_block *sb) | |||
| 189 | } | 189 | } |
| 190 | 190 | ||
| 191 | inode->i_ino = 2; | 191 | inode->i_ino = 2; |
| 192 | inode->i_uid = inode->i_gid = 0; | ||
| 193 | inode->i_blocks = 0; | ||
| 194 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; | 192 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; |
| 195 | 193 | ||
| 196 | mode = S_IFCHR|opts->ptmxmode; | 194 | mode = S_IFCHR|opts->ptmxmode; |
| @@ -300,8 +298,6 @@ devpts_fill_super(struct super_block *s, void *data, int silent) | |||
| 300 | goto free_fsi; | 298 | goto free_fsi; |
| 301 | inode->i_ino = 1; | 299 | inode->i_ino = 1; |
| 302 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; | 300 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; |
| 303 | inode->i_blocks = 0; | ||
| 304 | inode->i_uid = inode->i_gid = 0; | ||
| 305 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR; | 301 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR; |
| 306 | inode->i_op = &simple_dir_inode_operations; | 302 | inode->i_op = &simple_dir_inode_operations; |
| 307 | inode->i_fop = &simple_dir_operations; | 303 | inode->i_fop = &simple_dir_operations; |
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c index eb3dc4c7ac06..713834371229 100644 --- a/fs/ecryptfs/file.c +++ b/fs/ecryptfs/file.c | |||
| @@ -275,18 +275,9 @@ static int ecryptfs_release(struct inode *inode, struct file *file) | |||
| 275 | static int | 275 | static int |
| 276 | ecryptfs_fsync(struct file *file, struct dentry *dentry, int datasync) | 276 | ecryptfs_fsync(struct file *file, struct dentry *dentry, int datasync) |
| 277 | { | 277 | { |
| 278 | struct file *lower_file = ecryptfs_file_to_lower(file); | 278 | return vfs_fsync(ecryptfs_file_to_lower(file), |
| 279 | struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry); | 279 | ecryptfs_dentry_to_lower(dentry), |
| 280 | struct inode *lower_inode = lower_dentry->d_inode; | 280 | datasync); |
| 281 | int rc = -EINVAL; | ||
| 282 | |||
| 283 | if (lower_inode->i_fop->fsync) { | ||
| 284 | mutex_lock(&lower_inode->i_mutex); | ||
| 285 | rc = lower_inode->i_fop->fsync(lower_file, lower_dentry, | ||
| 286 | datasync); | ||
| 287 | mutex_unlock(&lower_inode->i_mutex); | ||
| 288 | } | ||
| 289 | return rc; | ||
| 290 | } | 281 | } |
| 291 | 282 | ||
| 292 | static int ecryptfs_fasync(int fd, struct file *file, int flag) | 283 | static int ecryptfs_fasync(int fd, struct file *file, int flag) |
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 5e78fc179886..0111906a8877 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c | |||
| @@ -612,8 +612,7 @@ ecryptfs_readlink(struct dentry *dentry, char __user * buf, int bufsiz) | |||
| 612 | struct ecryptfs_crypt_stat *crypt_stat; | 612 | struct ecryptfs_crypt_stat *crypt_stat; |
| 613 | 613 | ||
| 614 | lower_dentry = ecryptfs_dentry_to_lower(dentry); | 614 | lower_dentry = ecryptfs_dentry_to_lower(dentry); |
| 615 | if (!lower_dentry->d_inode->i_op || | 615 | if (!lower_dentry->d_inode->i_op->readlink) { |
| 616 | !lower_dentry->d_inode->i_op->readlink) { | ||
| 617 | rc = -EINVAL; | 616 | rc = -EINVAL; |
| 618 | goto out; | 617 | goto out; |
| 619 | } | 618 | } |
| @@ -51,6 +51,7 @@ | |||
| 51 | #include <linux/audit.h> | 51 | #include <linux/audit.h> |
| 52 | #include <linux/tracehook.h> | 52 | #include <linux/tracehook.h> |
| 53 | #include <linux/kmod.h> | 53 | #include <linux/kmod.h> |
| 54 | #include <linux/fsnotify.h> | ||
| 54 | 55 | ||
| 55 | #include <asm/uaccess.h> | 56 | #include <asm/uaccess.h> |
| 56 | #include <asm/mmu_context.h> | 57 | #include <asm/mmu_context.h> |
| @@ -132,6 +133,8 @@ asmlinkage long sys_uselib(const char __user * library) | |||
| 132 | if (IS_ERR(file)) | 133 | if (IS_ERR(file)) |
| 133 | goto out; | 134 | goto out; |
| 134 | 135 | ||
| 136 | fsnotify_open(file->f_path.dentry); | ||
| 137 | |||
| 135 | error = -ENOEXEC; | 138 | error = -ENOEXEC; |
| 136 | if(file->f_op) { | 139 | if(file->f_op) { |
| 137 | struct linux_binfmt * fmt; | 140 | struct linux_binfmt * fmt; |
| @@ -684,6 +687,8 @@ struct file *open_exec(const char *name) | |||
| 684 | if (IS_ERR(file)) | 687 | if (IS_ERR(file)) |
| 685 | return file; | 688 | return file; |
| 686 | 689 | ||
| 690 | fsnotify_open(file->f_path.dentry); | ||
| 691 | |||
| 687 | err = deny_write_access(file); | 692 | err = deny_write_access(file); |
| 688 | if (err) { | 693 | if (err) { |
| 689 | fput(file); | 694 | fput(file); |
diff --git a/fs/filesystems.c b/fs/filesystems.c index d0e20ced62dd..d488dcd7f2bb 100644 --- a/fs/filesystems.c +++ b/fs/filesystems.c | |||
| @@ -253,24 +253,27 @@ static int __init proc_filesystems_init(void) | |||
| 253 | module_init(proc_filesystems_init); | 253 | module_init(proc_filesystems_init); |
| 254 | #endif | 254 | #endif |
| 255 | 255 | ||
| 256 | struct file_system_type *get_fs_type(const char *name) | 256 | static struct file_system_type *__get_fs_type(const char *name, int len) |
| 257 | { | 257 | { |
| 258 | struct file_system_type *fs; | 258 | struct file_system_type *fs; |
| 259 | const char *dot = strchr(name, '.'); | ||
| 260 | unsigned len = dot ? dot - name : strlen(name); | ||
| 261 | 259 | ||
| 262 | read_lock(&file_systems_lock); | 260 | read_lock(&file_systems_lock); |
| 263 | fs = *(find_filesystem(name, len)); | 261 | fs = *(find_filesystem(name, len)); |
| 264 | if (fs && !try_module_get(fs->owner)) | 262 | if (fs && !try_module_get(fs->owner)) |
| 265 | fs = NULL; | 263 | fs = NULL; |
| 266 | read_unlock(&file_systems_lock); | 264 | read_unlock(&file_systems_lock); |
| 267 | if (!fs && (request_module("%.*s", len, name) == 0)) { | 265 | return fs; |
| 268 | read_lock(&file_systems_lock); | 266 | } |
| 269 | fs = *(find_filesystem(name, len)); | 267 | |
| 270 | if (fs && !try_module_get(fs->owner)) | 268 | struct file_system_type *get_fs_type(const char *name) |
| 271 | fs = NULL; | 269 | { |
| 272 | read_unlock(&file_systems_lock); | 270 | struct file_system_type *fs; |
| 273 | } | 271 | const char *dot = strchr(name, '.'); |
| 272 | int len = dot ? dot - name : strlen(name); | ||
| 273 | |||
| 274 | fs = __get_fs_type(name, len); | ||
| 275 | if (!fs && (request_module("%.*s", len, name) == 0)) | ||
| 276 | fs = __get_fs_type(name, len); | ||
| 274 | 277 | ||
| 275 | if (dot && fs && !(fs->fs_flags & FS_HAS_SUBTYPE)) { | 278 | if (dot && fs && !(fs->fs_flags & FS_HAS_SUBTYPE)) { |
| 276 | put_filesystem(fs); | 279 | put_filesystem(fs); |
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 7d479ce3aceb..0ab0c6f5f438 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
| @@ -506,7 +506,6 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb, uid_t uid, | |||
| 506 | inode->i_mode = mode; | 506 | inode->i_mode = mode; |
| 507 | inode->i_uid = uid; | 507 | inode->i_uid = uid; |
| 508 | inode->i_gid = gid; | 508 | inode->i_gid = gid; |
| 509 | inode->i_blocks = 0; | ||
| 510 | inode->i_mapping->a_ops = &hugetlbfs_aops; | 509 | inode->i_mapping->a_ops = &hugetlbfs_aops; |
| 511 | inode->i_mapping->backing_dev_info =&hugetlbfs_backing_dev_info; | 510 | inode->i_mapping->backing_dev_info =&hugetlbfs_backing_dev_info; |
| 512 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 511 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
diff --git a/fs/inode.c b/fs/inode.c index 7de1cda92489..bd48e5e6d3e8 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
| @@ -131,6 +131,8 @@ struct inode *inode_init_always(struct super_block *sb, struct inode *inode) | |||
| 131 | inode->i_op = &empty_iops; | 131 | inode->i_op = &empty_iops; |
| 132 | inode->i_fop = &empty_fops; | 132 | inode->i_fop = &empty_fops; |
| 133 | inode->i_nlink = 1; | 133 | inode->i_nlink = 1; |
| 134 | inode->i_uid = 0; | ||
| 135 | inode->i_gid = 0; | ||
| 134 | atomic_set(&inode->i_writecount, 0); | 136 | atomic_set(&inode->i_writecount, 0); |
| 135 | inode->i_size = 0; | 137 | inode->i_size = 0; |
| 136 | inode->i_blocks = 0; | 138 | inode->i_blocks = 0; |
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index 3f8af0f1505b..6147ec3643a0 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c | |||
| @@ -855,10 +855,6 @@ root_found: | |||
| 855 | } | 855 | } |
| 856 | sbi->s_joliet_level = joliet_level; | 856 | sbi->s_joliet_level = joliet_level; |
| 857 | 857 | ||
| 858 | /* check the root inode */ | ||
| 859 | if (!inode->i_op) | ||
| 860 | goto out_bad_root; | ||
| 861 | |||
| 862 | /* Make sure the root inode is a directory */ | 858 | /* Make sure the root inode is a directory */ |
| 863 | if (!S_ISDIR(inode->i_mode)) { | 859 | if (!S_ISDIR(inode->i_mode)) { |
| 864 | printk(KERN_WARNING | 860 | printk(KERN_WARNING |
| @@ -886,8 +882,6 @@ root_found: | |||
| 886 | /* | 882 | /* |
| 887 | * Display error messages and free resources. | 883 | * Display error messages and free resources. |
| 888 | */ | 884 | */ |
| 889 | out_bad_root: | ||
| 890 | printk(KERN_WARNING "%s: root inode not initialized\n", __func__); | ||
| 891 | out_iput: | 885 | out_iput: |
| 892 | iput(inode); | 886 | iput(inode); |
| 893 | goto out_no_inode; | 887 | goto out_no_inode; |
diff --git a/fs/jfs/jfs_imap.c b/fs/jfs/jfs_imap.c index d6363d8309d0..0f94381ca6d0 100644 --- a/fs/jfs/jfs_imap.c +++ b/fs/jfs/jfs_imap.c | |||
| @@ -58,9 +58,9 @@ | |||
| 58 | 58 | ||
| 59 | /* | 59 | /* |
| 60 | * __mark_inode_dirty expects inodes to be hashed. Since we don't want | 60 | * __mark_inode_dirty expects inodes to be hashed. Since we don't want |
| 61 | * special inodes in the fileset inode space, we hash them to a dummy head | 61 | * special inodes in the fileset inode space, we make them appear hashed, |
| 62 | * but do not put on any lists. | ||
| 62 | */ | 63 | */ |
| 63 | static HLIST_HEAD(aggregate_hash); | ||
| 64 | 64 | ||
| 65 | /* | 65 | /* |
| 66 | * imap locks | 66 | * imap locks |
| @@ -496,7 +496,11 @@ struct inode *diReadSpecial(struct super_block *sb, ino_t inum, int secondary) | |||
| 496 | /* release the page */ | 496 | /* release the page */ |
| 497 | release_metapage(mp); | 497 | release_metapage(mp); |
| 498 | 498 | ||
| 499 | hlist_add_head(&ip->i_hash, &aggregate_hash); | 499 | /* |
| 500 | * that will look hashed, but won't be on any list; hlist_del() | ||
| 501 | * will work fine and require no locking. | ||
| 502 | */ | ||
| 503 | ip->i_hash.pprev = &ip->i_hash.next; | ||
| 500 | 504 | ||
| 501 | return (ip); | 505 | return (ip); |
| 502 | } | 506 | } |
diff --git a/fs/libfs.c b/fs/libfs.c index bdaec17fa388..49b44099dabb 100644 --- a/fs/libfs.c +++ b/fs/libfs.c | |||
| @@ -231,7 +231,6 @@ int get_sb_pseudo(struct file_system_type *fs_type, char *name, | |||
| 231 | */ | 231 | */ |
| 232 | root->i_ino = 1; | 232 | root->i_ino = 1; |
| 233 | root->i_mode = S_IFDIR | S_IRUSR | S_IWUSR; | 233 | root->i_mode = S_IFDIR | S_IRUSR | S_IWUSR; |
| 234 | root->i_uid = root->i_gid = 0; | ||
| 235 | root->i_atime = root->i_mtime = root->i_ctime = CURRENT_TIME; | 234 | root->i_atime = root->i_mtime = root->i_ctime = CURRENT_TIME; |
| 236 | dentry = d_alloc(NULL, &d_name); | 235 | dentry = d_alloc(NULL, &d_name); |
| 237 | if (!dentry) { | 236 | if (!dentry) { |
| @@ -436,8 +435,6 @@ int simple_fill_super(struct super_block *s, int magic, struct tree_descr *files | |||
| 436 | */ | 435 | */ |
| 437 | inode->i_ino = 1; | 436 | inode->i_ino = 1; |
| 438 | inode->i_mode = S_IFDIR | 0755; | 437 | inode->i_mode = S_IFDIR | 0755; |
| 439 | inode->i_uid = inode->i_gid = 0; | ||
| 440 | inode->i_blocks = 0; | ||
| 441 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 438 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 442 | inode->i_op = &simple_dir_inode_operations; | 439 | inode->i_op = &simple_dir_inode_operations; |
| 443 | inode->i_fop = &simple_dir_operations; | 440 | inode->i_fop = &simple_dir_operations; |
| @@ -464,8 +461,6 @@ int simple_fill_super(struct super_block *s, int magic, struct tree_descr *files | |||
| 464 | if (!inode) | 461 | if (!inode) |
| 465 | goto out; | 462 | goto out; |
| 466 | inode->i_mode = S_IFREG | files->mode; | 463 | inode->i_mode = S_IFREG | files->mode; |
| 467 | inode->i_uid = inode->i_gid = 0; | ||
| 468 | inode->i_blocks = 0; | ||
| 469 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 464 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 470 | inode->i_fop = files->ops; | 465 | inode->i_fop = files->ops; |
| 471 | inode->i_ino = i; | 466 | inode->i_ino = i; |
diff --git a/fs/namei.c b/fs/namei.c index df2d3df4f049..f05bed242422 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
| @@ -257,7 +257,7 @@ int inode_permission(struct inode *inode, int mask) | |||
| 257 | return -EACCES; | 257 | return -EACCES; |
| 258 | } | 258 | } |
| 259 | 259 | ||
| 260 | if (inode->i_op && inode->i_op->permission) | 260 | if (inode->i_op->permission) |
| 261 | retval = inode->i_op->permission(inode, mask); | 261 | retval = inode->i_op->permission(inode, mask); |
| 262 | else | 262 | else |
| 263 | retval = generic_permission(inode, mask, NULL); | 263 | retval = generic_permission(inode, mask, NULL); |
| @@ -432,7 +432,7 @@ static int exec_permission_lite(struct inode *inode) | |||
| 432 | { | 432 | { |
| 433 | umode_t mode = inode->i_mode; | 433 | umode_t mode = inode->i_mode; |
| 434 | 434 | ||
| 435 | if (inode->i_op && inode->i_op->permission) | 435 | if (inode->i_op->permission) |
| 436 | return -EAGAIN; | 436 | return -EAGAIN; |
| 437 | 437 | ||
| 438 | if (current_fsuid() == inode->i_uid) | 438 | if (current_fsuid() == inode->i_uid) |
| @@ -908,9 +908,6 @@ static int __link_path_walk(const char *name, struct nameidata *nd) | |||
| 908 | inode = next.dentry->d_inode; | 908 | inode = next.dentry->d_inode; |
| 909 | if (!inode) | 909 | if (!inode) |
| 910 | goto out_dput; | 910 | goto out_dput; |
| 911 | err = -ENOTDIR; | ||
| 912 | if (!inode->i_op) | ||
| 913 | goto out_dput; | ||
| 914 | 911 | ||
| 915 | if (inode->i_op->follow_link) { | 912 | if (inode->i_op->follow_link) { |
| 916 | err = do_follow_link(&next, nd); | 913 | err = do_follow_link(&next, nd); |
| @@ -920,9 +917,6 @@ static int __link_path_walk(const char *name, struct nameidata *nd) | |||
| 920 | inode = nd->path.dentry->d_inode; | 917 | inode = nd->path.dentry->d_inode; |
| 921 | if (!inode) | 918 | if (!inode) |
| 922 | break; | 919 | break; |
| 923 | err = -ENOTDIR; | ||
| 924 | if (!inode->i_op) | ||
| 925 | break; | ||
| 926 | } else | 920 | } else |
| 927 | path_to_nameidata(&next, nd); | 921 | path_to_nameidata(&next, nd); |
| 928 | err = -ENOTDIR; | 922 | err = -ENOTDIR; |
| @@ -961,7 +955,7 @@ last_component: | |||
| 961 | break; | 955 | break; |
| 962 | inode = next.dentry->d_inode; | 956 | inode = next.dentry->d_inode; |
| 963 | if ((lookup_flags & LOOKUP_FOLLOW) | 957 | if ((lookup_flags & LOOKUP_FOLLOW) |
| 964 | && inode && inode->i_op && inode->i_op->follow_link) { | 958 | && inode && inode->i_op->follow_link) { |
| 965 | err = do_follow_link(&next, nd); | 959 | err = do_follow_link(&next, nd); |
| 966 | if (err) | 960 | if (err) |
| 967 | goto return_err; | 961 | goto return_err; |
| @@ -973,7 +967,7 @@ last_component: | |||
| 973 | break; | 967 | break; |
| 974 | if (lookup_flags & LOOKUP_DIRECTORY) { | 968 | if (lookup_flags & LOOKUP_DIRECTORY) { |
| 975 | err = -ENOTDIR; | 969 | err = -ENOTDIR; |
| 976 | if (!inode->i_op || !inode->i_op->lookup) | 970 | if (!inode->i_op->lookup) |
| 977 | break; | 971 | break; |
| 978 | } | 972 | } |
| 979 | goto return_base; | 973 | goto return_base; |
| @@ -1469,7 +1463,7 @@ int vfs_create(struct inode *dir, struct dentry *dentry, int mode, | |||
| 1469 | if (error) | 1463 | if (error) |
| 1470 | return error; | 1464 | return error; |
| 1471 | 1465 | ||
| 1472 | if (!dir->i_op || !dir->i_op->create) | 1466 | if (!dir->i_op->create) |
| 1473 | return -EACCES; /* shouldn't it be ENOSYS? */ | 1467 | return -EACCES; /* shouldn't it be ENOSYS? */ |
| 1474 | mode &= S_IALLUGO; | 1468 | mode &= S_IALLUGO; |
| 1475 | mode |= S_IFREG; | 1469 | mode |= S_IFREG; |
| @@ -1752,7 +1746,7 @@ do_last: | |||
| 1752 | error = -ENOENT; | 1746 | error = -ENOENT; |
| 1753 | if (!path.dentry->d_inode) | 1747 | if (!path.dentry->d_inode) |
| 1754 | goto exit_dput; | 1748 | goto exit_dput; |
| 1755 | if (path.dentry->d_inode->i_op && path.dentry->d_inode->i_op->follow_link) | 1749 | if (path.dentry->d_inode->i_op->follow_link) |
| 1756 | goto do_link; | 1750 | goto do_link; |
| 1757 | 1751 | ||
| 1758 | path_to_nameidata(&path, &nd); | 1752 | path_to_nameidata(&path, &nd); |
| @@ -1933,7 +1927,7 @@ int vfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev) | |||
| 1933 | if ((S_ISCHR(mode) || S_ISBLK(mode)) && !capable(CAP_MKNOD)) | 1927 | if ((S_ISCHR(mode) || S_ISBLK(mode)) && !capable(CAP_MKNOD)) |
| 1934 | return -EPERM; | 1928 | return -EPERM; |
| 1935 | 1929 | ||
| 1936 | if (!dir->i_op || !dir->i_op->mknod) | 1930 | if (!dir->i_op->mknod) |
| 1937 | return -EPERM; | 1931 | return -EPERM; |
| 1938 | 1932 | ||
| 1939 | error = devcgroup_inode_mknod(mode, dev); | 1933 | error = devcgroup_inode_mknod(mode, dev); |
| @@ -2035,7 +2029,7 @@ int vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
| 2035 | if (error) | 2029 | if (error) |
| 2036 | return error; | 2030 | return error; |
| 2037 | 2031 | ||
| 2038 | if (!dir->i_op || !dir->i_op->mkdir) | 2032 | if (!dir->i_op->mkdir) |
| 2039 | return -EPERM; | 2033 | return -EPERM; |
| 2040 | 2034 | ||
| 2041 | mode &= (S_IRWXUGO|S_ISVTX); | 2035 | mode &= (S_IRWXUGO|S_ISVTX); |
| @@ -2126,7 +2120,7 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
| 2126 | if (error) | 2120 | if (error) |
| 2127 | return error; | 2121 | return error; |
| 2128 | 2122 | ||
| 2129 | if (!dir->i_op || !dir->i_op->rmdir) | 2123 | if (!dir->i_op->rmdir) |
| 2130 | return -EPERM; | 2124 | return -EPERM; |
| 2131 | 2125 | ||
| 2132 | DQUOT_INIT(dir); | 2126 | DQUOT_INIT(dir); |
| @@ -2213,7 +2207,7 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry) | |||
| 2213 | if (error) | 2207 | if (error) |
| 2214 | return error; | 2208 | return error; |
| 2215 | 2209 | ||
| 2216 | if (!dir->i_op || !dir->i_op->unlink) | 2210 | if (!dir->i_op->unlink) |
| 2217 | return -EPERM; | 2211 | return -EPERM; |
| 2218 | 2212 | ||
| 2219 | DQUOT_INIT(dir); | 2213 | DQUOT_INIT(dir); |
| @@ -2320,7 +2314,7 @@ int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname) | |||
| 2320 | if (error) | 2314 | if (error) |
| 2321 | return error; | 2315 | return error; |
| 2322 | 2316 | ||
| 2323 | if (!dir->i_op || !dir->i_op->symlink) | 2317 | if (!dir->i_op->symlink) |
| 2324 | return -EPERM; | 2318 | return -EPERM; |
| 2325 | 2319 | ||
| 2326 | error = security_inode_symlink(dir, dentry, oldname); | 2320 | error = security_inode_symlink(dir, dentry, oldname); |
| @@ -2401,7 +2395,7 @@ int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_de | |||
| 2401 | */ | 2395 | */ |
| 2402 | if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) | 2396 | if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) |
| 2403 | return -EPERM; | 2397 | return -EPERM; |
| 2404 | if (!dir->i_op || !dir->i_op->link) | 2398 | if (!dir->i_op->link) |
| 2405 | return -EPERM; | 2399 | return -EPERM; |
| 2406 | if (S_ISDIR(inode->i_mode)) | 2400 | if (S_ISDIR(inode->i_mode)) |
| 2407 | return -EPERM; | 2401 | return -EPERM; |
| @@ -2608,7 +2602,7 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
| 2608 | if (error) | 2602 | if (error) |
| 2609 | return error; | 2603 | return error; |
| 2610 | 2604 | ||
| 2611 | if (!old_dir->i_op || !old_dir->i_op->rename) | 2605 | if (!old_dir->i_op->rename) |
| 2612 | return -EPERM; | 2606 | return -EPERM; |
| 2613 | 2607 | ||
| 2614 | DQUOT_INIT(old_dir); | 2608 | DQUOT_INIT(old_dir); |
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index d1c5f787b365..44aa92aba891 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c | |||
| @@ -744,45 +744,16 @@ nfsd_close(struct file *filp) | |||
| 744 | fput(filp); | 744 | fput(filp); |
| 745 | } | 745 | } |
| 746 | 746 | ||
| 747 | /* | ||
| 748 | * Sync a file | ||
| 749 | * As this calls fsync (not fdatasync) there is no need for a write_inode | ||
| 750 | * after it. | ||
| 751 | */ | ||
| 752 | static inline int nfsd_dosync(struct file *filp, struct dentry *dp, | ||
| 753 | const struct file_operations *fop) | ||
| 754 | { | ||
| 755 | struct inode *inode = dp->d_inode; | ||
| 756 | int (*fsync) (struct file *, struct dentry *, int); | ||
| 757 | int err; | ||
| 758 | |||
| 759 | err = filemap_fdatawrite(inode->i_mapping); | ||
| 760 | if (err == 0 && fop && (fsync = fop->fsync)) | ||
| 761 | err = fsync(filp, dp, 0); | ||
| 762 | if (err == 0) | ||
| 763 | err = filemap_fdatawait(inode->i_mapping); | ||
| 764 | |||
| 765 | return err; | ||
| 766 | } | ||
| 767 | |||
| 768 | |||
| 769 | static int | 747 | static int |
| 770 | nfsd_sync(struct file *filp) | 748 | nfsd_sync(struct file *filp) |
| 771 | { | 749 | { |
| 772 | int err; | 750 | return vfs_fsync(filp, filp->f_path.dentry, 0); |
| 773 | struct inode *inode = filp->f_path.dentry->d_inode; | ||
| 774 | dprintk("nfsd: sync file %s\n", filp->f_path.dentry->d_name.name); | ||
| 775 | mutex_lock(&inode->i_mutex); | ||
| 776 | err=nfsd_dosync(filp, filp->f_path.dentry, filp->f_op); | ||
| 777 | mutex_unlock(&inode->i_mutex); | ||
| 778 | |||
| 779 | return err; | ||
| 780 | } | 751 | } |
| 781 | 752 | ||
| 782 | int | 753 | int |
| 783 | nfsd_sync_dir(struct dentry *dp) | 754 | nfsd_sync_dir(struct dentry *dentry) |
| 784 | { | 755 | { |
| 785 | return nfsd_dosync(NULL, dp, dp->d_inode->i_fop); | 756 | return vfs_fsync(NULL, dentry, 0); |
| 786 | } | 757 | } |
| 787 | 758 | ||
| 788 | /* | 759 | /* |
| @@ -1211,7 +1182,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, | |||
| 1211 | dirp = dentry->d_inode; | 1182 | dirp = dentry->d_inode; |
| 1212 | 1183 | ||
| 1213 | err = nfserr_notdir; | 1184 | err = nfserr_notdir; |
| 1214 | if(!dirp->i_op || !dirp->i_op->lookup) | 1185 | if (!dirp->i_op->lookup) |
| 1215 | goto out; | 1186 | goto out; |
| 1216 | /* | 1187 | /* |
| 1217 | * Check whether the response file handle has been verified yet. | 1188 | * Check whether the response file handle has been verified yet. |
| @@ -1347,7 +1318,7 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, | |||
| 1347 | /* Get all the sanity checks out of the way before | 1318 | /* Get all the sanity checks out of the way before |
| 1348 | * we lock the parent. */ | 1319 | * we lock the parent. */ |
| 1349 | err = nfserr_notdir; | 1320 | err = nfserr_notdir; |
| 1350 | if(!dirp->i_op || !dirp->i_op->lookup) | 1321 | if (!dirp->i_op->lookup) |
| 1351 | goto out; | 1322 | goto out; |
| 1352 | fh_lock_nested(fhp, I_MUTEX_PARENT); | 1323 | fh_lock_nested(fhp, I_MUTEX_PARENT); |
| 1353 | 1324 | ||
| @@ -1482,7 +1453,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp) | |||
| 1482 | inode = dentry->d_inode; | 1453 | inode = dentry->d_inode; |
| 1483 | 1454 | ||
| 1484 | err = nfserr_inval; | 1455 | err = nfserr_inval; |
| 1485 | if (!inode->i_op || !inode->i_op->readlink) | 1456 | if (!inode->i_op->readlink) |
| 1486 | goto out; | 1457 | goto out; |
| 1487 | 1458 | ||
| 1488 | touch_atime(fhp->fh_export->ex_path.mnt, dentry); | 1459 | touch_atime(fhp->fh_export->ex_path.mnt, dentry); |
| @@ -2162,7 +2133,7 @@ nfsd_set_posix_acl(struct svc_fh *fhp, int type, struct posix_acl *acl) | |||
| 2162 | size_t size; | 2133 | size_t size; |
| 2163 | int error; | 2134 | int error; |
| 2164 | 2135 | ||
| 2165 | if (!IS_POSIXACL(inode) || !inode->i_op || | 2136 | if (!IS_POSIXACL(inode) || |
| 2166 | !inode->i_op->setxattr || !inode->i_op->removexattr) | 2137 | !inode->i_op->setxattr || !inode->i_op->removexattr) |
| 2167 | return -EOPNOTSUPP; | 2138 | return -EOPNOTSUPP; |
| 2168 | switch(type) { | 2139 | switch(type) { |
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c index 400f8064a548..81b8644b0136 100644 --- a/fs/notify/inotify/inotify_user.c +++ b/fs/notify/inotify/inotify_user.c | |||
| @@ -704,7 +704,7 @@ fput_and_out: | |||
| 704 | return ret; | 704 | return ret; |
| 705 | } | 705 | } |
| 706 | 706 | ||
| 707 | asmlinkage long sys_inotify_rm_watch(int fd, u32 wd) | 707 | asmlinkage long sys_inotify_rm_watch(int fd, __s32 wd) |
| 708 | { | 708 | { |
| 709 | struct file *filp; | 709 | struct file *filp; |
| 710 | struct inotify_device *dev; | 710 | struct inotify_device *dev; |
diff --git a/fs/ntfs/inode.c b/fs/ntfs/inode.c index e9da092e2772..86bef156cf0a 100644 --- a/fs/ntfs/inode.c +++ b/fs/ntfs/inode.c | |||
| @@ -1406,9 +1406,6 @@ static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi) | |||
| 1406 | ni->allocated_size = sle64_to_cpu( | 1406 | ni->allocated_size = sle64_to_cpu( |
| 1407 | a->data.non_resident.allocated_size); | 1407 | a->data.non_resident.allocated_size); |
| 1408 | } | 1408 | } |
| 1409 | /* Setup the operations for this attribute inode. */ | ||
| 1410 | vi->i_op = NULL; | ||
| 1411 | vi->i_fop = NULL; | ||
| 1412 | if (NInoMstProtected(ni)) | 1409 | if (NInoMstProtected(ni)) |
| 1413 | vi->i_mapping->a_ops = &ntfs_mst_aops; | 1410 | vi->i_mapping->a_ops = &ntfs_mst_aops; |
| 1414 | else | 1411 | else |
diff --git a/fs/ocfs2/dlm/dlmfs.c b/fs/ocfs2/dlm/dlmfs.c index 6f7a77d54020..1c9efb406a96 100644 --- a/fs/ocfs2/dlm/dlmfs.c +++ b/fs/ocfs2/dlm/dlmfs.c | |||
| @@ -341,7 +341,6 @@ static struct inode *dlmfs_get_root_inode(struct super_block *sb) | |||
| 341 | inode->i_mode = mode; | 341 | inode->i_mode = mode; |
| 342 | inode->i_uid = current_fsuid(); | 342 | inode->i_uid = current_fsuid(); |
| 343 | inode->i_gid = current_fsgid(); | 343 | inode->i_gid = current_fsgid(); |
| 344 | inode->i_blocks = 0; | ||
| 345 | inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info; | 344 | inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info; |
| 346 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 345 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 347 | inc_nlink(inode); | 346 | inc_nlink(inode); |
| @@ -367,7 +366,6 @@ static struct inode *dlmfs_get_inode(struct inode *parent, | |||
| 367 | inode->i_mode = mode; | 366 | inode->i_mode = mode; |
| 368 | inode->i_uid = current_fsuid(); | 367 | inode->i_uid = current_fsuid(); |
| 369 | inode->i_gid = current_fsgid(); | 368 | inode->i_gid = current_fsgid(); |
| 370 | inode->i_blocks = 0; | ||
| 371 | inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info; | 369 | inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info; |
| 372 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 370 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 373 | 371 | ||
diff --git a/fs/omfs/inode.c b/fs/omfs/inode.c index 6afe57c84f84..633e9dc972bb 100644 --- a/fs/omfs/inode.c +++ b/fs/omfs/inode.c | |||
| @@ -39,7 +39,6 @@ struct inode *omfs_new_inode(struct inode *dir, int mode) | |||
| 39 | inode->i_mode = mode; | 39 | inode->i_mode = mode; |
| 40 | inode->i_uid = current_fsuid(); | 40 | inode->i_uid = current_fsuid(); |
| 41 | inode->i_gid = current_fsgid(); | 41 | inode->i_gid = current_fsgid(); |
| 42 | inode->i_blocks = 0; | ||
| 43 | inode->i_mapping->a_ops = &omfs_aops; | 42 | inode->i_mapping->a_ops = &omfs_aops; |
| 44 | 43 | ||
| 45 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 44 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| @@ -412,7 +412,7 @@ asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len) | |||
| 412 | if (((offset + len) > inode->i_sb->s_maxbytes) || ((offset + len) < 0)) | 412 | if (((offset + len) > inode->i_sb->s_maxbytes) || ((offset + len) < 0)) |
| 413 | goto out_fput; | 413 | goto out_fput; |
| 414 | 414 | ||
| 415 | if (inode->i_op && inode->i_op->fallocate) | 415 | if (inode->i_op->fallocate) |
| 416 | ret = inode->i_op->fallocate(inode, mode, offset, len); | 416 | ret = inode->i_op->fallocate(inode, mode, offset, len); |
| 417 | else | 417 | else |
| 418 | ret = -EOPNOTSUPP; | 418 | ret = -EOPNOTSUPP; |
diff --git a/fs/openpromfs/inode.c b/fs/openpromfs/inode.c index d41bdc784de4..ffcd04f0012c 100644 --- a/fs/openpromfs/inode.c +++ b/fs/openpromfs/inode.c | |||
| @@ -256,9 +256,6 @@ found: | |||
| 256 | break; | 256 | break; |
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | inode->i_gid = 0; | ||
| 260 | inode->i_uid = 0; | ||
| 261 | |||
| 262 | d_add(dentry, inode); | 259 | d_add(dentry, inode); |
| 263 | return NULL; | 260 | return NULL; |
| 264 | } | 261 | } |
diff --git a/fs/proc/base.c b/fs/proc/base.c index cad92c1ac2b3..10fd5223d600 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
| @@ -1426,8 +1426,6 @@ static struct inode *proc_pid_make_inode(struct super_block * sb, struct task_st | |||
| 1426 | if (!ei->pid) | 1426 | if (!ei->pid) |
| 1427 | goto out_unlock; | 1427 | goto out_unlock; |
| 1428 | 1428 | ||
| 1429 | inode->i_uid = 0; | ||
| 1430 | inode->i_gid = 0; | ||
| 1431 | if (task_dumpable(task)) { | 1429 | if (task_dumpable(task)) { |
| 1432 | rcu_read_lock(); | 1430 | rcu_read_lock(); |
| 1433 | cred = __task_cred(task); | 1431 | cred = __task_cred(task); |
| @@ -2349,8 +2347,6 @@ static struct dentry *proc_base_instantiate(struct inode *dir, | |||
| 2349 | if (!ei->pid) | 2347 | if (!ei->pid) |
| 2350 | goto out_iput; | 2348 | goto out_iput; |
| 2351 | 2349 | ||
| 2352 | inode->i_uid = 0; | ||
| 2353 | inode->i_gid = 0; | ||
| 2354 | inode->i_mode = p->mode; | 2350 | inode->i_mode = p->mode; |
| 2355 | if (S_ISDIR(inode->i_mode)) | 2351 | if (S_ISDIR(inode->i_mode)) |
| 2356 | inode->i_nlink = 2; | 2352 | inode->i_nlink = 2; |
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index 06ed10b7da9e..94fcfff6863a 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c | |||
| @@ -31,7 +31,6 @@ static struct inode *proc_sys_make_inode(struct super_block *sb, | |||
| 31 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; | 31 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; |
| 32 | inode->i_flags |= S_PRIVATE; /* tell selinux to ignore this inode */ | 32 | inode->i_flags |= S_PRIVATE; /* tell selinux to ignore this inode */ |
| 33 | inode->i_mode = table->mode; | 33 | inode->i_mode = table->mode; |
| 34 | inode->i_uid = inode->i_gid = 0; | ||
| 35 | if (!table->child) { | 34 | if (!table->child) { |
| 36 | inode->i_mode |= S_IFREG; | 35 | inode->i_mode |= S_IFREG; |
| 37 | inode->i_op = &proc_sys_inode_operations; | 36 | inode->i_op = &proc_sys_inode_operations; |
diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c index a83a3518ae33..b7e6ac706b87 100644 --- a/fs/ramfs/inode.c +++ b/fs/ramfs/inode.c | |||
| @@ -57,7 +57,6 @@ struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev) | |||
| 57 | inode->i_mode = mode; | 57 | inode->i_mode = mode; |
| 58 | inode->i_uid = current_fsuid(); | 58 | inode->i_uid = current_fsuid(); |
| 59 | inode->i_gid = current_fsgid(); | 59 | inode->i_gid = current_fsgid(); |
| 60 | inode->i_blocks = 0; | ||
| 61 | inode->i_mapping->a_ops = &ramfs_aops; | 60 | inode->i_mapping->a_ops = &ramfs_aops; |
| 62 | inode->i_mapping->backing_dev_info = &ramfs_backing_dev_info; | 61 | inode->i_mapping->backing_dev_info = &ramfs_backing_dev_info; |
| 63 | mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); | 62 | mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); |
diff --git a/fs/read_write.c b/fs/read_write.c index 969a6d9c020b..5cc6924eb158 100644 --- a/fs/read_write.c +++ b/fs/read_write.c | |||
| @@ -50,6 +50,14 @@ generic_file_llseek_unlocked(struct file *file, loff_t offset, int origin) | |||
| 50 | offset += inode->i_size; | 50 | offset += inode->i_size; |
| 51 | break; | 51 | break; |
| 52 | case SEEK_CUR: | 52 | case SEEK_CUR: |
| 53 | /* | ||
| 54 | * Here we special-case the lseek(fd, 0, SEEK_CUR) | ||
| 55 | * position-querying operation. Avoid rewriting the "same" | ||
| 56 | * f_pos value back to the file because a concurrent read(), | ||
| 57 | * write() or lseek() might have altered it | ||
| 58 | */ | ||
| 59 | if (offset == 0) | ||
| 60 | return file->f_pos; | ||
| 53 | offset += file->f_pos; | 61 | offset += file->f_pos; |
| 54 | break; | 62 | break; |
| 55 | } | 63 | } |
| @@ -105,6 +113,10 @@ loff_t default_llseek(struct file *file, loff_t offset, int origin) | |||
| 105 | offset += i_size_read(file->f_path.dentry->d_inode); | 113 | offset += i_size_read(file->f_path.dentry->d_inode); |
| 106 | break; | 114 | break; |
| 107 | case SEEK_CUR: | 115 | case SEEK_CUR: |
| 116 | if (offset == 0) { | ||
| 117 | retval = file->f_pos; | ||
| 118 | goto out; | ||
| 119 | } | ||
| 108 | offset += file->f_pos; | 120 | offset += file->f_pos; |
| 109 | } | 121 | } |
| 110 | retval = -EINVAL; | 122 | retval = -EINVAL; |
| @@ -115,6 +127,7 @@ loff_t default_llseek(struct file *file, loff_t offset, int origin) | |||
| 115 | } | 127 | } |
| 116 | retval = offset; | 128 | retval = offset; |
| 117 | } | 129 | } |
| 130 | out: | ||
| 118 | unlock_kernel(); | 131 | unlock_kernel(); |
| 119 | return retval; | 132 | return retval; |
| 120 | } | 133 | } |
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index ed04f47007f8..55fce92cdf18 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c | |||
| @@ -1782,6 +1782,12 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th, | |||
| 1782 | goto out_bad_inode; | 1782 | goto out_bad_inode; |
| 1783 | } | 1783 | } |
| 1784 | args.objectid = inode->i_ino = le32_to_cpu(ih.ih_key.k_objectid); | 1784 | args.objectid = inode->i_ino = le32_to_cpu(ih.ih_key.k_objectid); |
| 1785 | if (old_format_only(sb)) | ||
| 1786 | make_le_item_head(&ih, NULL, KEY_FORMAT_3_5, SD_OFFSET, | ||
| 1787 | TYPE_STAT_DATA, SD_V1_SIZE, MAX_US_INT); | ||
| 1788 | else | ||
| 1789 | make_le_item_head(&ih, NULL, KEY_FORMAT_3_6, SD_OFFSET, | ||
| 1790 | TYPE_STAT_DATA, SD_SIZE, MAX_US_INT); | ||
| 1785 | memcpy(INODE_PKEY(inode), &(ih.ih_key), KEY_SIZE); | 1791 | memcpy(INODE_PKEY(inode), &(ih.ih_key), KEY_SIZE); |
| 1786 | args.dirid = le32_to_cpu(ih.ih_key.k_dir_id); | 1792 | args.dirid = le32_to_cpu(ih.ih_key.k_dir_id); |
| 1787 | if (insert_inode_locked4(inode, args.objectid, | 1793 | if (insert_inode_locked4(inode, args.objectid, |
| @@ -1834,13 +1840,6 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th, | |||
| 1834 | reiserfs_init_acl_default(inode); | 1840 | reiserfs_init_acl_default(inode); |
| 1835 | reiserfs_init_xattr_rwsem(inode); | 1841 | reiserfs_init_xattr_rwsem(inode); |
| 1836 | 1842 | ||
| 1837 | if (old_format_only(sb)) | ||
| 1838 | make_le_item_head(&ih, NULL, KEY_FORMAT_3_5, SD_OFFSET, | ||
| 1839 | TYPE_STAT_DATA, SD_V1_SIZE, MAX_US_INT); | ||
| 1840 | else | ||
| 1841 | make_le_item_head(&ih, NULL, KEY_FORMAT_3_6, SD_OFFSET, | ||
| 1842 | TYPE_STAT_DATA, SD_SIZE, MAX_US_INT); | ||
| 1843 | |||
| 1844 | /* key to search for correct place for new stat data */ | 1843 | /* key to search for correct place for new stat data */ |
| 1845 | _make_cpu_key(&key, KEY_FORMAT_3_6, le32_to_cpu(ih.ih_key.k_dir_id), | 1844 | _make_cpu_key(&key, KEY_FORMAT_3_6, le32_to_cpu(ih.ih_key.k_dir_id), |
| 1846 | le32_to_cpu(ih.ih_key.k_objectid), SD_OFFSET, | 1845 | le32_to_cpu(ih.ih_key.k_objectid), SD_OFFSET, |
diff --git a/fs/romfs/inode.c b/fs/romfs/inode.c index 60d2f822e87b..c97d4c931715 100644 --- a/fs/romfs/inode.c +++ b/fs/romfs/inode.c | |||
| @@ -524,7 +524,6 @@ romfs_iget(struct super_block *sb, unsigned long ino) | |||
| 524 | i->i_size = be32_to_cpu(ri.size); | 524 | i->i_size = be32_to_cpu(ri.size); |
| 525 | i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = 0; | 525 | i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = 0; |
| 526 | i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0; | 526 | i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0; |
| 527 | i->i_uid = i->i_gid = 0; | ||
| 528 | 527 | ||
| 529 | /* Precalculate the data offset */ | 528 | /* Precalculate the data offset */ |
| 530 | ino = romfs_strnlen(i, ino+ROMFH_SIZE, ROMFS_MAXFN); | 529 | ino = romfs_strnlen(i, ino+ROMFH_SIZE, ROMFS_MAXFN); |
| @@ -305,7 +305,7 @@ asmlinkage long sys_readlinkat(int dfd, const char __user *pathname, | |||
| 305 | struct inode *inode = path.dentry->d_inode; | 305 | struct inode *inode = path.dentry->d_inode; |
| 306 | 306 | ||
| 307 | error = -EINVAL; | 307 | error = -EINVAL; |
| 308 | if (inode->i_op && inode->i_op->readlink) { | 308 | if (inode->i_op->readlink) { |
| 309 | error = security_inode_readlink(path.dentry); | 309 | error = security_inode_readlink(path.dentry); |
| 310 | if (!error) { | 310 | if (!error) { |
| 311 | touch_atime(path.mnt, path.dentry); | 311 | touch_atime(path.mnt, path.dentry); |
| @@ -75,14 +75,39 @@ int file_fsync(struct file *filp, struct dentry *dentry, int datasync) | |||
| 75 | return ret; | 75 | return ret; |
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | long do_fsync(struct file *file, int datasync) | 78 | /** |
| 79 | * vfs_fsync - perform a fsync or fdatasync on a file | ||
| 80 | * @file: file to sync | ||
| 81 | * @dentry: dentry of @file | ||
| 82 | * @data: only perform a fdatasync operation | ||
| 83 | * | ||
| 84 | * Write back data and metadata for @file to disk. If @datasync is | ||
| 85 | * set only metadata needed to access modified file data is written. | ||
| 86 | * | ||
| 87 | * In case this function is called from nfsd @file may be %NULL and | ||
| 88 | * only @dentry is set. This can only happen when the filesystem | ||
| 89 | * implements the export_operations API. | ||
| 90 | */ | ||
| 91 | int vfs_fsync(struct file *file, struct dentry *dentry, int datasync) | ||
| 79 | { | 92 | { |
| 80 | int ret; | 93 | const struct file_operations *fop; |
| 81 | int err; | 94 | struct address_space *mapping; |
| 82 | struct address_space *mapping = file->f_mapping; | 95 | int err, ret; |
| 96 | |||
| 97 | /* | ||
| 98 | * Get mapping and operations from the file in case we have | ||
| 99 | * as file, or get the default values for them in case we | ||
| 100 | * don't have a struct file available. Damn nfsd.. | ||
| 101 | */ | ||
| 102 | if (file) { | ||
| 103 | mapping = file->f_mapping; | ||
| 104 | fop = file->f_op; | ||
| 105 | } else { | ||
| 106 | mapping = dentry->d_inode->i_mapping; | ||
| 107 | fop = dentry->d_inode->i_fop; | ||
| 108 | } | ||
| 83 | 109 | ||
| 84 | if (!file->f_op || !file->f_op->fsync) { | 110 | if (!fop || !fop->fsync) { |
| 85 | /* Why? We can still call filemap_fdatawrite */ | ||
| 86 | ret = -EINVAL; | 111 | ret = -EINVAL; |
| 87 | goto out; | 112 | goto out; |
| 88 | } | 113 | } |
| @@ -94,7 +119,7 @@ long do_fsync(struct file *file, int datasync) | |||
| 94 | * livelocks in fsync_buffers_list(). | 119 | * livelocks in fsync_buffers_list(). |
| 95 | */ | 120 | */ |
| 96 | mutex_lock(&mapping->host->i_mutex); | 121 | mutex_lock(&mapping->host->i_mutex); |
| 97 | err = file->f_op->fsync(file, file->f_path.dentry, datasync); | 122 | err = fop->fsync(file, dentry, datasync); |
| 98 | if (!ret) | 123 | if (!ret) |
| 99 | ret = err; | 124 | ret = err; |
| 100 | mutex_unlock(&mapping->host->i_mutex); | 125 | mutex_unlock(&mapping->host->i_mutex); |
| @@ -104,15 +129,16 @@ long do_fsync(struct file *file, int datasync) | |||
| 104 | out: | 129 | out: |
| 105 | return ret; | 130 | return ret; |
| 106 | } | 131 | } |
| 132 | EXPORT_SYMBOL(vfs_fsync); | ||
| 107 | 133 | ||
| 108 | static long __do_fsync(unsigned int fd, int datasync) | 134 | static int do_fsync(unsigned int fd, int datasync) |
| 109 | { | 135 | { |
| 110 | struct file *file; | 136 | struct file *file; |
| 111 | int ret = -EBADF; | 137 | int ret = -EBADF; |
| 112 | 138 | ||
| 113 | file = fget(fd); | 139 | file = fget(fd); |
| 114 | if (file) { | 140 | if (file) { |
| 115 | ret = do_fsync(file, datasync); | 141 | ret = vfs_fsync(file, file->f_path.dentry, datasync); |
| 116 | fput(file); | 142 | fput(file); |
| 117 | } | 143 | } |
| 118 | return ret; | 144 | return ret; |
| @@ -120,12 +146,12 @@ static long __do_fsync(unsigned int fd, int datasync) | |||
| 120 | 146 | ||
| 121 | asmlinkage long sys_fsync(unsigned int fd) | 147 | asmlinkage long sys_fsync(unsigned int fd) |
| 122 | { | 148 | { |
| 123 | return __do_fsync(fd, 0); | 149 | return do_fsync(fd, 0); |
| 124 | } | 150 | } |
| 125 | 151 | ||
| 126 | asmlinkage long sys_fdatasync(unsigned int fd) | 152 | asmlinkage long sys_fdatasync(unsigned int fd) |
| 127 | { | 153 | { |
| 128 | return __do_fsync(fd, 1); | 154 | return do_fsync(fd, 1); |
| 129 | } | 155 | } |
| 130 | 156 | ||
| 131 | /* | 157 | /* |
diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c index eb53c632f856..dfa3d94cfc74 100644 --- a/fs/sysfs/inode.c +++ b/fs/sysfs/inode.c | |||
| @@ -107,8 +107,6 @@ int sysfs_setattr(struct dentry * dentry, struct iattr * iattr) | |||
| 107 | static inline void set_default_inode_attr(struct inode * inode, mode_t mode) | 107 | static inline void set_default_inode_attr(struct inode * inode, mode_t mode) |
| 108 | { | 108 | { |
| 109 | inode->i_mode = mode; | 109 | inode->i_mode = mode; |
| 110 | inode->i_uid = 0; | ||
| 111 | inode->i_gid = 0; | ||
| 112 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 110 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 113 | } | 111 | } |
| 114 | 112 | ||
| @@ -149,7 +147,6 @@ static void sysfs_init_inode(struct sysfs_dirent *sd, struct inode *inode) | |||
| 149 | { | 147 | { |
| 150 | struct bin_attribute *bin_attr; | 148 | struct bin_attribute *bin_attr; |
| 151 | 149 | ||
| 152 | inode->i_blocks = 0; | ||
| 153 | inode->i_mapping->a_ops = &sysfs_aops; | 150 | inode->i_mapping->a_ops = &sysfs_aops; |
| 154 | inode->i_mapping->backing_dev_info = &sysfs_backing_dev_info; | 151 | inode->i_mapping->backing_dev_info = &sysfs_backing_dev_info; |
| 155 | inode->i_op = &sysfs_inode_operations; | 152 | inode->i_op = &sysfs_inode_operations; |
diff --git a/fs/xattr.c b/fs/xattr.c index 468377e66531..237804cd6b56 100644 --- a/fs/xattr.c +++ b/fs/xattr.c | |||
| @@ -175,7 +175,7 @@ vfs_listxattr(struct dentry *d, char *list, size_t size) | |||
| 175 | if (error) | 175 | if (error) |
| 176 | return error; | 176 | return error; |
| 177 | error = -EOPNOTSUPP; | 177 | error = -EOPNOTSUPP; |
| 178 | if (d->d_inode->i_op && d->d_inode->i_op->listxattr) { | 178 | if (d->d_inode->i_op->listxattr) { |
| 179 | error = d->d_inode->i_op->listxattr(d, list, size); | 179 | error = d->d_inode->i_op->listxattr(d, list, size); |
| 180 | } else { | 180 | } else { |
| 181 | error = security_inode_listsecurity(d->d_inode, list, size); | 181 | error = security_inode_listsecurity(d->d_inode, list, size); |
diff --git a/include/linux/fs.h b/include/linux/fs.h index f2a3010140e3..8b916ce92e73 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -1830,7 +1830,7 @@ extern int __filemap_fdatawrite_range(struct address_space *mapping, | |||
| 1830 | extern int filemap_fdatawrite_range(struct address_space *mapping, | 1830 | extern int filemap_fdatawrite_range(struct address_space *mapping, |
| 1831 | loff_t start, loff_t end); | 1831 | loff_t start, loff_t end); |
| 1832 | 1832 | ||
| 1833 | extern long do_fsync(struct file *file, int datasync); | 1833 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); |
| 1834 | extern void sync_supers(void); | 1834 | extern void sync_supers(void); |
| 1835 | extern void sync_filesystems(int wait); | 1835 | extern void sync_filesystems(int wait); |
| 1836 | extern void __fsync_super(struct super_block *sb); | 1836 | extern void __fsync_super(struct super_block *sb); |
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h index a916c6660dfa..355f6e80db0d 100644 --- a/include/linux/radix-tree.h +++ b/include/linux/radix-tree.h | |||
| @@ -136,7 +136,7 @@ do { \ | |||
| 136 | */ | 136 | */ |
| 137 | static inline void *radix_tree_deref_slot(void **pslot) | 137 | static inline void *radix_tree_deref_slot(void **pslot) |
| 138 | { | 138 | { |
| 139 | void *ret = *pslot; | 139 | void *ret = rcu_dereference(*pslot); |
| 140 | if (unlikely(radix_tree_is_indirect_ptr(ret))) | 140 | if (unlikely(radix_tree_is_indirect_ptr(ret))) |
| 141 | ret = RADIX_TREE_RETRY; | 141 | ret = RADIX_TREE_RETRY; |
| 142 | return ret; | 142 | return ret; |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 04fb47bfb920..18d0a243a7b3 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -549,7 +549,7 @@ asmlinkage long sys_inotify_init(void); | |||
| 549 | asmlinkage long sys_inotify_init1(int flags); | 549 | asmlinkage long sys_inotify_init1(int flags); |
| 550 | asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, | 550 | asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, |
| 551 | u32 mask); | 551 | u32 mask); |
| 552 | asmlinkage long sys_inotify_rm_watch(int fd, u32 wd); | 552 | asmlinkage long sys_inotify_rm_watch(int fd, __s32 wd); |
| 553 | 553 | ||
| 554 | asmlinkage long sys_spu_run(int fd, __u32 __user *unpc, | 554 | asmlinkage long sys_spu_run(int fd, __u32 __user *unpc, |
| 555 | __u32 __user *ustatus); | 555 | __u32 __user *ustatus); |
diff --git a/ipc/mqueue.c b/ipc/mqueue.c index d448b69672b5..eddb6247a553 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c | |||
| @@ -120,7 +120,6 @@ static struct inode *mqueue_get_inode(struct super_block *sb, int mode, | |||
| 120 | inode->i_mode = mode; | 120 | inode->i_mode = mode; |
| 121 | inode->i_uid = current_fsuid(); | 121 | inode->i_uid = current_fsuid(); |
| 122 | inode->i_gid = current_fsgid(); | 122 | inode->i_gid = current_fsgid(); |
| 123 | inode->i_blocks = 0; | ||
| 124 | inode->i_mtime = inode->i_ctime = inode->i_atime = | 123 | inode->i_mtime = inode->i_ctime = inode->i_atime = |
| 125 | CURRENT_TIME; | 124 | CURRENT_TIME; |
| 126 | 125 | ||
| @@ -58,7 +58,7 @@ | |||
| 58 | * SMP-threaded, sysctl's added | 58 | * SMP-threaded, sysctl's added |
| 59 | * (c) 1999 Manfred Spraul <manfred@colorfullife.com> | 59 | * (c) 1999 Manfred Spraul <manfred@colorfullife.com> |
| 60 | * Enforced range limit on SEM_UNDO | 60 | * Enforced range limit on SEM_UNDO |
| 61 | * (c) 2001 Red Hat Inc <alan@redhat.com> | 61 | * (c) 2001 Red Hat Inc |
| 62 | * Lockless wakeup | 62 | * Lockless wakeup |
| 63 | * (c) 2003 Manfred Spraul <manfred@colorfullife.com> | 63 | * (c) 2003 Manfred Spraul <manfred@colorfullife.com> |
| 64 | * | 64 | * |
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 891a84eb9d30..87bb0258fd27 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
| @@ -573,7 +573,6 @@ static struct inode *cgroup_new_inode(mode_t mode, struct super_block *sb) | |||
| 573 | inode->i_mode = mode; | 573 | inode->i_mode = mode; |
| 574 | inode->i_uid = current_fsuid(); | 574 | inode->i_uid = current_fsuid(); |
| 575 | inode->i_gid = current_fsgid(); | 575 | inode->i_gid = current_fsgid(); |
| 576 | inode->i_blocks = 0; | ||
| 577 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 576 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 578 | inode->i_mapping->backing_dev_info = &cgroup_backing_dev_info; | 577 | inode->i_mapping->backing_dev_info = &cgroup_backing_dev_info; |
| 579 | } | 578 | } |
diff --git a/mm/filemap.c b/mm/filemap.c index f8c69273c37f..f5769b4dc075 100644 --- a/mm/filemap.c +++ b/mm/filemap.c | |||
| @@ -1766,7 +1766,7 @@ int should_remove_suid(struct dentry *dentry) | |||
| 1766 | if (unlikely((mode & S_ISGID) && (mode & S_IXGRP))) | 1766 | if (unlikely((mode & S_ISGID) && (mode & S_IXGRP))) |
| 1767 | kill |= ATTR_KILL_SGID; | 1767 | kill |= ATTR_KILL_SGID; |
| 1768 | 1768 | ||
| 1769 | if (unlikely(kill && !capable(CAP_FSETID))) | 1769 | if (unlikely(kill && !capable(CAP_FSETID) && S_ISREG(mode))) |
| 1770 | return kill; | 1770 | return kill; |
| 1771 | 1771 | ||
| 1772 | return 0; | 1772 | return 0; |
diff --git a/mm/memory.c b/mm/memory.c index 0a2010a9518c..7b9db658aca2 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
| @@ -2266,7 +2266,7 @@ int vmtruncate(struct inode * inode, loff_t offset) | |||
| 2266 | unmap_mapping_range(mapping, offset + PAGE_SIZE - 1, 0, 1); | 2266 | unmap_mapping_range(mapping, offset + PAGE_SIZE - 1, 0, 1); |
| 2267 | } | 2267 | } |
| 2268 | 2268 | ||
| 2269 | if (inode->i_op && inode->i_op->truncate) | 2269 | if (inode->i_op->truncate) |
| 2270 | inode->i_op->truncate(inode); | 2270 | inode->i_op->truncate(inode); |
| 2271 | return 0; | 2271 | return 0; |
| 2272 | 2272 | ||
| @@ -2286,7 +2286,7 @@ int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end) | |||
| 2286 | * a way to truncate a range of blocks (punch a hole) - | 2286 | * a way to truncate a range of blocks (punch a hole) - |
| 2287 | * we should return failure right now. | 2287 | * we should return failure right now. |
| 2288 | */ | 2288 | */ |
| 2289 | if (!inode->i_op || !inode->i_op->truncate_range) | 2289 | if (!inode->i_op->truncate_range) |
| 2290 | return -ENOSYS; | 2290 | return -ENOSYS; |
| 2291 | 2291 | ||
| 2292 | mutex_lock(&inode->i_mutex); | 2292 | mutex_lock(&inode->i_mutex); |
| @@ -3,7 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * Written by obz. | 4 | * Written by obz. |
| 5 | * | 5 | * |
| 6 | * Address space accounting code <alan@redhat.com> | 6 | * Address space accounting code <alan@lxorguk.ukuu.org.uk> |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | #include <linux/slab.h> | 9 | #include <linux/slab.h> |
diff --git a/mm/mprotect.c b/mm/mprotect.c index fded06f923f4..cfb4c4852062 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * (C) Copyright 1994 Linus Torvalds | 4 | * (C) Copyright 1994 Linus Torvalds |
| 5 | * (C) Copyright 2002 Christoph Hellwig | 5 | * (C) Copyright 2002 Christoph Hellwig |
| 6 | * | 6 | * |
| 7 | * Address space accounting code <alan@redhat.com> | 7 | * Address space accounting code <alan@lxorguk.ukuu.org.uk> |
| 8 | * (C) Copyright 2002 Red Hat Inc, All Rights Reserved | 8 | * (C) Copyright 2002 Red Hat Inc, All Rights Reserved |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
diff --git a/mm/mremap.c b/mm/mremap.c index 58a2908f42f5..646de959aa58 100644 --- a/mm/mremap.c +++ b/mm/mremap.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * (C) Copyright 1996 Linus Torvalds | 4 | * (C) Copyright 1996 Linus Torvalds |
| 5 | * | 5 | * |
| 6 | * Address space accounting code <alan@redhat.com> | 6 | * Address space accounting code <alan@lxorguk.ukuu.org.uk> |
| 7 | * (C) Copyright 2002 Red Hat Inc, All Rights Reserved | 7 | * (C) Copyright 2002 Red Hat Inc, All Rights Reserved |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
diff --git a/mm/msync.c b/mm/msync.c index 144a7570535d..07dae08cf31c 100644 --- a/mm/msync.c +++ b/mm/msync.c | |||
| @@ -82,7 +82,7 @@ asmlinkage long sys_msync(unsigned long start, size_t len, int flags) | |||
| 82 | (vma->vm_flags & VM_SHARED)) { | 82 | (vma->vm_flags & VM_SHARED)) { |
| 83 | get_file(file); | 83 | get_file(file); |
| 84 | up_read(&mm->mmap_sem); | 84 | up_read(&mm->mmap_sem); |
| 85 | error = do_fsync(file, 0); | 85 | error = vfs_fsync(file, file->f_path.dentry, 0); |
| 86 | fput(file); | 86 | fput(file); |
| 87 | if (error || start >= end) | 87 | if (error || start >= end) |
| 88 | goto out; | 88 | goto out; |
diff --git a/mm/nommu.c b/mm/nommu.c index 7695dc850785..1c28ea3a4e9c 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
| @@ -86,7 +86,7 @@ do_expand: | |||
| 86 | i_size_write(inode, offset); | 86 | i_size_write(inode, offset); |
| 87 | 87 | ||
| 88 | out_truncate: | 88 | out_truncate: |
| 89 | if (inode->i_op && inode->i_op->truncate) | 89 | if (inode->i_op->truncate) |
| 90 | inode->i_op->truncate(inode); | 90 | inode->i_op->truncate(inode); |
| 91 | return 0; | 91 | return 0; |
| 92 | out_sig: | 92 | out_sig: |
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index 192453248870..577385a4a5dc 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c | |||
| @@ -522,8 +522,6 @@ rpc_get_inode(struct super_block *sb, int mode) | |||
| 522 | if (!inode) | 522 | if (!inode) |
| 523 | return NULL; | 523 | return NULL; |
| 524 | inode->i_mode = mode; | 524 | inode->i_mode = mode; |
| 525 | inode->i_uid = inode->i_gid = 0; | ||
| 526 | inode->i_blocks = 0; | ||
| 527 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 525 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 528 | switch(mode & S_IFMT) { | 526 | switch(mode & S_IFMT) { |
| 529 | case S_IFDIR: | 527 | case S_IFDIR: |
diff --git a/security/commoncap.c b/security/commoncap.c index 79713545cd63..69fc9952650f 100644 --- a/security/commoncap.c +++ b/security/commoncap.c | |||
| @@ -238,7 +238,7 @@ int cap_inode_need_killpriv(struct dentry *dentry) | |||
| 238 | struct inode *inode = dentry->d_inode; | 238 | struct inode *inode = dentry->d_inode; |
| 239 | int error; | 239 | int error; |
| 240 | 240 | ||
| 241 | if (!inode->i_op || !inode->i_op->getxattr) | 241 | if (!inode->i_op->getxattr) |
| 242 | return 0; | 242 | return 0; |
| 243 | 243 | ||
| 244 | error = inode->i_op->getxattr(dentry, XATTR_NAME_CAPS, NULL, 0); | 244 | error = inode->i_op->getxattr(dentry, XATTR_NAME_CAPS, NULL, 0); |
| @@ -259,7 +259,7 @@ int cap_inode_killpriv(struct dentry *dentry) | |||
| 259 | { | 259 | { |
| 260 | struct inode *inode = dentry->d_inode; | 260 | struct inode *inode = dentry->d_inode; |
| 261 | 261 | ||
| 262 | if (!inode->i_op || !inode->i_op->removexattr) | 262 | if (!inode->i_op->removexattr) |
| 263 | return 0; | 263 | return 0; |
| 264 | 264 | ||
| 265 | return inode->i_op->removexattr(dentry, XATTR_NAME_CAPS); | 265 | return inode->i_op->removexattr(dentry, XATTR_NAME_CAPS); |
| @@ -317,7 +317,7 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data | |||
| 317 | 317 | ||
| 318 | memset(cpu_caps, 0, sizeof(struct cpu_vfs_cap_data)); | 318 | memset(cpu_caps, 0, sizeof(struct cpu_vfs_cap_data)); |
| 319 | 319 | ||
| 320 | if (!inode || !inode->i_op || !inode->i_op->getxattr) | 320 | if (!inode || !inode->i_op->getxattr) |
| 321 | return -ENODATA; | 321 | return -ENODATA; |
| 322 | 322 | ||
| 323 | size = inode->i_op->getxattr((struct dentry *)dentry, XATTR_NAME_CAPS, &caps, | 323 | size = inode->i_op->getxattr((struct dentry *)dentry, XATTR_NAME_CAPS, &caps, |
diff --git a/security/inode.c b/security/inode.c index efea5a605466..007ef252dde7 100644 --- a/security/inode.c +++ b/security/inode.c | |||
| @@ -61,9 +61,6 @@ static struct inode *get_inode(struct super_block *sb, int mode, dev_t dev) | |||
| 61 | 61 | ||
| 62 | if (inode) { | 62 | if (inode) { |
| 63 | inode->i_mode = mode; | 63 | inode->i_mode = mode; |
| 64 | inode->i_uid = 0; | ||
| 65 | inode->i_gid = 0; | ||
| 66 | inode->i_blocks = 0; | ||
| 67 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 64 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
| 68 | switch (mode & S_IFMT) { | 65 | switch (mode & S_IFMT) { |
| 69 | default: | 66 | default: |
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index e5520996a75b..8f612c8becb5 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c | |||
| @@ -847,8 +847,6 @@ static struct inode *sel_make_inode(struct super_block *sb, int mode) | |||
| 847 | 847 | ||
| 848 | if (ret) { | 848 | if (ret) { |
| 849 | ret->i_mode = mode; | 849 | ret->i_mode = mode; |
| 850 | ret->i_uid = ret->i_gid = 0; | ||
| 851 | ret->i_blocks = 0; | ||
| 852 | ret->i_atime = ret->i_mtime = ret->i_ctime = CURRENT_TIME; | 850 | ret->i_atime = ret->i_mtime = ret->i_ctime = CURRENT_TIME; |
| 853 | } | 851 | } |
| 854 | return ret; | 852 | return ret; |
