mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs updates from Al Viro: "Assorted stuff; the biggest pile here is Christoph's ACL series. Plus assorted cleanups and fixes all over the place... There will be another pile later this week" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (43 commits) __dentry_path() fixes vfs: Remove second variable named error in __dentry_path vfs: Is mounted should be testing mnt_ns for NULL or error. Fix race when checking i_size on direct i/o read hfsplus: remove can_set_xattr nfsd: use get_acl and ->set_acl fs: remove generic_acl nfs: use generic posix ACL infrastructure for v3 Posix ACLs gfs2: use generic posix ACL infrastructure jfs: use generic posix ACL infrastructure xfs: use generic posix ACL infrastructure reiserfs: use generic posix ACL infrastructure ocfs2: use generic posix ACL infrastructure jffs2: use generic posix ACL infrastructure hfsplus: use generic posix ACL infrastructure f2fs: use generic posix ACL infrastructure ext2/3/4: use generic posix ACL infrastructure btrfs: use generic posix ACL infrastructure fs: make posix_acl_create more useful fs: make posix_acl_chmod more useful ...
This commit is contained in:
commit
bf3d846b78
179 changed files with 1543 additions and 3851 deletions
42
mm/filemap.c
42
mm/filemap.c
|
|
@ -1428,30 +1428,28 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
|
|||
if (!count)
|
||||
goto out; /* skip atime */
|
||||
size = i_size_read(inode);
|
||||
if (pos < size) {
|
||||
retval = filemap_write_and_wait_range(mapping, pos,
|
||||
retval = filemap_write_and_wait_range(mapping, pos,
|
||||
pos + iov_length(iov, nr_segs) - 1);
|
||||
if (!retval) {
|
||||
retval = mapping->a_ops->direct_IO(READ, iocb,
|
||||
iov, pos, nr_segs);
|
||||
}
|
||||
if (retval > 0) {
|
||||
*ppos = pos + retval;
|
||||
count -= retval;
|
||||
}
|
||||
if (!retval) {
|
||||
retval = mapping->a_ops->direct_IO(READ, iocb,
|
||||
iov, pos, nr_segs);
|
||||
}
|
||||
if (retval > 0) {
|
||||
*ppos = pos + retval;
|
||||
count -= retval;
|
||||
}
|
||||
|
||||
/*
|
||||
* Btrfs can have a short DIO read if we encounter
|
||||
* compressed extents, so if there was an error, or if
|
||||
* we've already read everything we wanted to, or if
|
||||
* there was a short read because we hit EOF, go ahead
|
||||
* and return. Otherwise fallthrough to buffered io for
|
||||
* the rest of the read.
|
||||
*/
|
||||
if (retval < 0 || !count || *ppos >= size) {
|
||||
file_accessed(filp);
|
||||
goto out;
|
||||
}
|
||||
/*
|
||||
* Btrfs can have a short DIO read if we encounter
|
||||
* compressed extents, so if there was an error, or if
|
||||
* we've already read everything we wanted to, or if
|
||||
* there was a short read because we hit EOF, go ahead
|
||||
* and return. Otherwise fallthrough to buffered io for
|
||||
* the rest of the read.
|
||||
*/
|
||||
if (retval < 0 || !count || *ppos >= size) {
|
||||
file_accessed(filp);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
57
mm/shmem.c
57
mm/shmem.c
|
|
@ -45,7 +45,7 @@ static struct vfsmount *shm_mnt;
|
|||
#include <linux/xattr.h>
|
||||
#include <linux/exportfs.h>
|
||||
#include <linux/posix_acl.h>
|
||||
#include <linux/generic_acl.h>
|
||||
#include <linux/posix_acl_xattr.h>
|
||||
#include <linux/mman.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/slab.h>
|
||||
|
|
@ -620,10 +620,8 @@ static int shmem_setattr(struct dentry *dentry, struct iattr *attr)
|
|||
}
|
||||
|
||||
setattr_copy(inode, attr);
|
||||
#ifdef CONFIG_TMPFS_POSIX_ACL
|
||||
if (attr->ia_valid & ATTR_MODE)
|
||||
error = generic_acl_chmod(inode);
|
||||
#endif
|
||||
error = posix_acl_chmod(inode, inode->i_mode);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
@ -1937,22 +1935,14 @@ shmem_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
|
|||
|
||||
inode = shmem_get_inode(dir->i_sb, dir, mode, dev, VM_NORESERVE);
|
||||
if (inode) {
|
||||
#ifdef CONFIG_TMPFS_POSIX_ACL
|
||||
error = generic_acl_init(inode, dir);
|
||||
if (error) {
|
||||
iput(inode);
|
||||
return error;
|
||||
}
|
||||
#endif
|
||||
error = simple_acl_create(dir, inode);
|
||||
if (error)
|
||||
goto out_iput;
|
||||
error = security_inode_init_security(inode, dir,
|
||||
&dentry->d_name,
|
||||
shmem_initxattrs, NULL);
|
||||
if (error) {
|
||||
if (error != -EOPNOTSUPP) {
|
||||
iput(inode);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
if (error && error != -EOPNOTSUPP)
|
||||
goto out_iput;
|
||||
|
||||
error = 0;
|
||||
dir->i_size += BOGO_DIRENT_SIZE;
|
||||
|
|
@ -1961,6 +1951,9 @@ shmem_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
|
|||
dget(dentry); /* Extra count - pin the dentry in core */
|
||||
}
|
||||
return error;
|
||||
out_iput:
|
||||
iput(inode);
|
||||
return error;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
@ -1974,24 +1967,17 @@ shmem_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
|
|||
error = security_inode_init_security(inode, dir,
|
||||
NULL,
|
||||
shmem_initxattrs, NULL);
|
||||
if (error) {
|
||||
if (error != -EOPNOTSUPP) {
|
||||
iput(inode);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
#ifdef CONFIG_TMPFS_POSIX_ACL
|
||||
error = generic_acl_init(inode, dir);
|
||||
if (error) {
|
||||
iput(inode);
|
||||
return error;
|
||||
}
|
||||
#else
|
||||
error = 0;
|
||||
#endif
|
||||
if (error && error != -EOPNOTSUPP)
|
||||
goto out_iput;
|
||||
error = simple_acl_create(dir, inode);
|
||||
if (error)
|
||||
goto out_iput;
|
||||
d_tmpfile(dentry, inode);
|
||||
}
|
||||
return error;
|
||||
out_iput:
|
||||
iput(inode);
|
||||
return error;
|
||||
}
|
||||
|
||||
static int shmem_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
|
|
@ -2223,8 +2209,8 @@ static int shmem_initxattrs(struct inode *inode,
|
|||
|
||||
static const struct xattr_handler *shmem_xattr_handlers[] = {
|
||||
#ifdef CONFIG_TMPFS_POSIX_ACL
|
||||
&generic_acl_access_handler,
|
||||
&generic_acl_default_handler,
|
||||
&posix_acl_access_xattr_handler,
|
||||
&posix_acl_default_xattr_handler,
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
|
@ -2740,6 +2726,7 @@ static const struct inode_operations shmem_inode_operations = {
|
|||
.getxattr = shmem_getxattr,
|
||||
.listxattr = shmem_listxattr,
|
||||
.removexattr = shmem_removexattr,
|
||||
.set_acl = simple_set_acl,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
@ -2764,6 +2751,7 @@ static const struct inode_operations shmem_dir_inode_operations = {
|
|||
#endif
|
||||
#ifdef CONFIG_TMPFS_POSIX_ACL
|
||||
.setattr = shmem_setattr,
|
||||
.set_acl = simple_set_acl,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
@ -2776,6 +2764,7 @@ static const struct inode_operations shmem_special_inode_operations = {
|
|||
#endif
|
||||
#ifdef CONFIG_TMPFS_POSIX_ACL
|
||||
.setattr = shmem_setattr,
|
||||
.set_acl = simple_set_acl,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue