diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-06-05 00:12:39 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-06-05 00:12:39 -0400 |
commit | 7f0d384cafabfbb56663ee6944c18fc0450fc5d6 (patch) | |
tree | bf68721fb65b64392177f498a9ba61ef027b2b3d | |
parent | 90ec7819737d42a0ad1c2df1ff56016facae3c6e (diff) | |
parent | 01afaf61983d08ed1c9e5e8f2fcf4f40e9008033 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
Minix: Clean up left over label
fix truncate inode time modification breakage
fix setattr error handling in sysfs, configfs
fcntl: return -EFAULT if copy_to_user fails
wrong type for 'magic' argument in simple_fill_super()
fix the deadlock in qib_fs
mqueue doesn't need make_bad_inode()
-rw-r--r-- | drivers/infiniband/hw/qib/qib_fs.c | 4 | ||||
-rw-r--r-- | fs/ext2/inode.c | 2 | ||||
-rw-r--r-- | fs/fcntl.c | 7 | ||||
-rw-r--r-- | fs/libfs.c | 3 | ||||
-rw-r--r-- | fs/minix/dir.c | 4 | ||||
-rw-r--r-- | include/linux/fs.h | 2 | ||||
-rw-r--r-- | ipc/mqueue.c | 1 | ||||
-rw-r--r-- | mm/shmem.c | 5 |
8 files changed, 13 insertions, 15 deletions
diff --git a/drivers/infiniband/hw/qib/qib_fs.c b/drivers/infiniband/hw/qib/qib_fs.c index edef8527eb34..844954bf417b 100644 --- a/drivers/infiniband/hw/qib/qib_fs.c +++ b/drivers/infiniband/hw/qib/qib_fs.c | |||
@@ -542,10 +542,8 @@ static int qibfs_fill_super(struct super_block *sb, void *data, int silent) | |||
542 | list_for_each_entry_safe(dd, tmp, &qib_dev_list, list) { | 542 | list_for_each_entry_safe(dd, tmp, &qib_dev_list, list) { |
543 | spin_unlock_irqrestore(&qib_devs_lock, flags); | 543 | spin_unlock_irqrestore(&qib_devs_lock, flags); |
544 | ret = add_cntr_files(sb, dd); | 544 | ret = add_cntr_files(sb, dd); |
545 | if (ret) { | 545 | if (ret) |
546 | deactivate_super(sb); | ||
547 | goto bail; | 546 | goto bail; |
548 | } | ||
549 | spin_lock_irqsave(&qib_devs_lock, flags); | 547 | spin_lock_irqsave(&qib_devs_lock, flags); |
550 | } | 548 | } |
551 | 549 | ||
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 19214435b752..3675088cb88c 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c | |||
@@ -1552,7 +1552,7 @@ int ext2_setattr(struct dentry *dentry, struct iattr *iattr) | |||
1552 | if (error) | 1552 | if (error) |
1553 | return error; | 1553 | return error; |
1554 | } | 1554 | } |
1555 | if (iattr->ia_valid & ATTR_SIZE) { | 1555 | if (iattr->ia_valid & ATTR_SIZE && iattr->ia_size != inode->i_size) { |
1556 | error = ext2_setsize(inode, iattr->ia_size); | 1556 | error = ext2_setsize(inode, iattr->ia_size); |
1557 | if (error) | 1557 | if (error) |
1558 | return error; | 1558 | return error; |
diff --git a/fs/fcntl.c b/fs/fcntl.c index f74d270ba155..51e11bf5708f 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c | |||
@@ -274,7 +274,7 @@ static int f_setown_ex(struct file *filp, unsigned long arg) | |||
274 | 274 | ||
275 | ret = copy_from_user(&owner, owner_p, sizeof(owner)); | 275 | ret = copy_from_user(&owner, owner_p, sizeof(owner)); |
276 | if (ret) | 276 | if (ret) |
277 | return ret; | 277 | return -EFAULT; |
278 | 278 | ||
279 | switch (owner.type) { | 279 | switch (owner.type) { |
280 | case F_OWNER_TID: | 280 | case F_OWNER_TID: |
@@ -332,8 +332,11 @@ static int f_getown_ex(struct file *filp, unsigned long arg) | |||
332 | } | 332 | } |
333 | read_unlock(&filp->f_owner.lock); | 333 | read_unlock(&filp->f_owner.lock); |
334 | 334 | ||
335 | if (!ret) | 335 | if (!ret) { |
336 | ret = copy_to_user(owner_p, &owner, sizeof(owner)); | 336 | ret = copy_to_user(owner_p, &owner, sizeof(owner)); |
337 | if (ret) | ||
338 | ret = -EFAULT; | ||
339 | } | ||
337 | return ret; | 340 | return ret; |
338 | } | 341 | } |
339 | 342 | ||
diff --git a/fs/libfs.c b/fs/libfs.c index 09e1016eb774..dcaf972cbf1b 100644 --- a/fs/libfs.c +++ b/fs/libfs.c | |||
@@ -489,7 +489,8 @@ int simple_write_end(struct file *file, struct address_space *mapping, | |||
489 | * unique inode values later for this filesystem, then you must take care | 489 | * unique inode values later for this filesystem, then you must take care |
490 | * to pass it an appropriate max_reserved value to avoid collisions. | 490 | * to pass it an appropriate max_reserved value to avoid collisions. |
491 | */ | 491 | */ |
492 | int simple_fill_super(struct super_block *s, int magic, struct tree_descr *files) | 492 | int simple_fill_super(struct super_block *s, unsigned long magic, |
493 | struct tree_descr *files) | ||
493 | { | 494 | { |
494 | struct inode *inode; | 495 | struct inode *inode; |
495 | struct dentry *root; | 496 | struct dentry *root; |
diff --git a/fs/minix/dir.c b/fs/minix/dir.c index 91969589131c..1dbf921ca44b 100644 --- a/fs/minix/dir.c +++ b/fs/minix/dir.c | |||
@@ -75,10 +75,6 @@ static struct page * dir_get_page(struct inode *dir, unsigned long n) | |||
75 | if (!IS_ERR(page)) | 75 | if (!IS_ERR(page)) |
76 | kmap(page); | 76 | kmap(page); |
77 | return page; | 77 | return page; |
78 | |||
79 | fail: | ||
80 | dir_put_page(page); | ||
81 | return ERR_PTR(-EIO); | ||
82 | } | 78 | } |
83 | 79 | ||
84 | static inline void *minix_next_entry(void *de, struct minix_sb_info *sbi) | 80 | static inline void *minix_next_entry(void *de, struct minix_sb_info *sbi) |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 3428393942a6..471e1ff5079a 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -2388,7 +2388,7 @@ extern const struct file_operations simple_dir_operations; | |||
2388 | extern const struct inode_operations simple_dir_inode_operations; | 2388 | extern const struct inode_operations simple_dir_inode_operations; |
2389 | struct tree_descr { char *name; const struct file_operations *ops; int mode; }; | 2389 | struct tree_descr { char *name; const struct file_operations *ops; int mode; }; |
2390 | struct dentry *d_alloc_name(struct dentry *, const char *); | 2390 | struct dentry *d_alloc_name(struct dentry *, const char *); |
2391 | extern int simple_fill_super(struct super_block *, int, struct tree_descr *); | 2391 | extern int simple_fill_super(struct super_block *, unsigned long, struct tree_descr *); |
2392 | extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count); | 2392 | extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count); |
2393 | extern void simple_release_fs(struct vfsmount **mount, int *count); | 2393 | extern void simple_release_fs(struct vfsmount **mount, int *count); |
2394 | 2394 | ||
diff --git a/ipc/mqueue.c b/ipc/mqueue.c index 5108232f93d4..c93fd3faac2d 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c | |||
@@ -176,7 +176,6 @@ static struct inode *mqueue_get_inode(struct super_block *sb, | |||
176 | } | 176 | } |
177 | return inode; | 177 | return inode; |
178 | out_inode: | 178 | out_inode: |
179 | make_bad_inode(inode); | ||
180 | iput(inode); | 179 | iput(inode); |
181 | return NULL; | 180 | return NULL; |
182 | } | 181 | } |
diff --git a/mm/shmem.c b/mm/shmem.c index 7e5030ae18ff..f65f84062db5 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
@@ -764,10 +764,11 @@ done2: | |||
764 | static int shmem_notify_change(struct dentry *dentry, struct iattr *attr) | 764 | static int shmem_notify_change(struct dentry *dentry, struct iattr *attr) |
765 | { | 765 | { |
766 | struct inode *inode = dentry->d_inode; | 766 | struct inode *inode = dentry->d_inode; |
767 | loff_t newsize = attr->ia_size; | ||
767 | int error; | 768 | int error; |
768 | 769 | ||
769 | if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) { | 770 | if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE) |
770 | loff_t newsize = attr->ia_size; | 771 | && newsize != inode->i_size) { |
771 | struct page *page = NULL; | 772 | struct page *page = NULL; |
772 | 773 | ||
773 | if (newsize < inode->i_size) { | 774 | if (newsize < inode->i_size) { |