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()
This commit is contained in:
Коммит
7f0d384caf
|
@ -542,10 +542,8 @@ static int qibfs_fill_super(struct super_block *sb, void *data, int silent)
|
|||
list_for_each_entry_safe(dd, tmp, &qib_dev_list, list) {
|
||||
spin_unlock_irqrestore(&qib_devs_lock, flags);
|
||||
ret = add_cntr_files(sb, dd);
|
||||
if (ret) {
|
||||
deactivate_super(sb);
|
||||
if (ret)
|
||||
goto bail;
|
||||
}
|
||||
spin_lock_irqsave(&qib_devs_lock, flags);
|
||||
}
|
||||
|
||||
|
|
|
@ -1552,7 +1552,7 @@ int ext2_setattr(struct dentry *dentry, struct iattr *iattr)
|
|||
if (error)
|
||||
return error;
|
||||
}
|
||||
if (iattr->ia_valid & ATTR_SIZE) {
|
||||
if (iattr->ia_valid & ATTR_SIZE && iattr->ia_size != inode->i_size) {
|
||||
error = ext2_setsize(inode, iattr->ia_size);
|
||||
if (error)
|
||||
return error;
|
||||
|
|
|
@ -274,7 +274,7 @@ static int f_setown_ex(struct file *filp, unsigned long arg)
|
|||
|
||||
ret = copy_from_user(&owner, owner_p, sizeof(owner));
|
||||
if (ret)
|
||||
return ret;
|
||||
return -EFAULT;
|
||||
|
||||
switch (owner.type) {
|
||||
case F_OWNER_TID:
|
||||
|
@ -332,8 +332,11 @@ static int f_getown_ex(struct file *filp, unsigned long arg)
|
|||
}
|
||||
read_unlock(&filp->f_owner.lock);
|
||||
|
||||
if (!ret)
|
||||
if (!ret) {
|
||||
ret = copy_to_user(owner_p, &owner, sizeof(owner));
|
||||
if (ret)
|
||||
ret = -EFAULT;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -489,7 +489,8 @@ int simple_write_end(struct file *file, struct address_space *mapping,
|
|||
* unique inode values later for this filesystem, then you must take care
|
||||
* to pass it an appropriate max_reserved value to avoid collisions.
|
||||
*/
|
||||
int simple_fill_super(struct super_block *s, int magic, struct tree_descr *files)
|
||||
int simple_fill_super(struct super_block *s, unsigned long magic,
|
||||
struct tree_descr *files)
|
||||
{
|
||||
struct inode *inode;
|
||||
struct dentry *root;
|
||||
|
|
|
@ -75,10 +75,6 @@ static struct page * dir_get_page(struct inode *dir, unsigned long n)
|
|||
if (!IS_ERR(page))
|
||||
kmap(page);
|
||||
return page;
|
||||
|
||||
fail:
|
||||
dir_put_page(page);
|
||||
return ERR_PTR(-EIO);
|
||||
}
|
||||
|
||||
static inline void *minix_next_entry(void *de, struct minix_sb_info *sbi)
|
||||
|
|
|
@ -2388,7 +2388,7 @@ extern const struct file_operations simple_dir_operations;
|
|||
extern const struct inode_operations simple_dir_inode_operations;
|
||||
struct tree_descr { char *name; const struct file_operations *ops; int mode; };
|
||||
struct dentry *d_alloc_name(struct dentry *, const char *);
|
||||
extern int simple_fill_super(struct super_block *, int, struct tree_descr *);
|
||||
extern int simple_fill_super(struct super_block *, unsigned long, struct tree_descr *);
|
||||
extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count);
|
||||
extern void simple_release_fs(struct vfsmount **mount, int *count);
|
||||
|
||||
|
|
|
@ -176,7 +176,6 @@ static struct inode *mqueue_get_inode(struct super_block *sb,
|
|||
}
|
||||
return inode;
|
||||
out_inode:
|
||||
make_bad_inode(inode);
|
||||
iput(inode);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -764,10 +764,11 @@ done2:
|
|||
static int shmem_notify_change(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
loff_t newsize = attr->ia_size;
|
||||
int error;
|
||||
|
||||
if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) {
|
||||
loff_t newsize = attr->ia_size;
|
||||
if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)
|
||||
&& newsize != inode->i_size) {
|
||||
struct page *page = NULL;
|
||||
|
||||
if (newsize < inode->i_size) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче