mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
Merge with /home/shaggy/git/linus-clean/
This commit is contained in:
commit
0a0fc0ddbe
6410 changed files with 367438 additions and 204722 deletions
|
|
@ -302,8 +302,7 @@ int dbSync(struct inode *ipbmap)
|
|||
/*
|
||||
* write out dirty pages of bmap
|
||||
*/
|
||||
filemap_fdatawrite(ipbmap->i_mapping);
|
||||
filemap_fdatawait(ipbmap->i_mapping);
|
||||
filemap_write_and_wait(ipbmap->i_mapping);
|
||||
|
||||
diWriteSpecial(ipbmap, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -265,8 +265,7 @@ int diSync(struct inode *ipimap)
|
|||
/*
|
||||
* write out dirty pages of imap
|
||||
*/
|
||||
filemap_fdatawrite(ipimap->i_mapping);
|
||||
filemap_fdatawait(ipimap->i_mapping);
|
||||
filemap_write_and_wait(ipimap->i_mapping);
|
||||
|
||||
diWriteSpecial(ipimap, 0);
|
||||
|
||||
|
|
@ -565,8 +564,7 @@ void diFreeSpecial(struct inode *ip)
|
|||
jfs_err("diFreeSpecial called with NULL ip!");
|
||||
return;
|
||||
}
|
||||
filemap_fdatawrite(ip->i_mapping);
|
||||
filemap_fdatawait(ip->i_mapping);
|
||||
filemap_write_and_wait(ip->i_mapping);
|
||||
truncate_inode_pages(ip->i_mapping, 0);
|
||||
iput(ip);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ struct jfs_inode_info {
|
|||
/*
|
||||
* rdwrlock serializes xtree between reads & writes and synchronizes
|
||||
* changes to special inodes. It's use would be redundant on
|
||||
* directories since the i_sem taken in the VFS is sufficient.
|
||||
* directories since the i_mutex taken in the VFS is sufficient.
|
||||
*/
|
||||
struct rw_semaphore rdwrlock;
|
||||
/*
|
||||
|
|
@ -68,7 +68,7 @@ struct jfs_inode_info {
|
|||
* inode is blocked in txBegin or TxBeginAnon
|
||||
*/
|
||||
struct semaphore commit_sem;
|
||||
/* xattr_sem allows us to access the xattrs without taking i_sem */
|
||||
/* xattr_sem allows us to access the xattrs without taking i_mutex */
|
||||
struct rw_semaphore xattr_sem;
|
||||
lid_t xtlid; /* lid of xtree lock on directory */
|
||||
#ifdef CONFIG_JFS_POSIX_ACL
|
||||
|
|
|
|||
|
|
@ -1231,10 +1231,8 @@ int txCommit(tid_t tid, /* transaction identifier */
|
|||
* when we don't need to worry about it at all.
|
||||
*
|
||||
* if ((!S_ISDIR(ip->i_mode))
|
||||
* && (tblk->flag & COMMIT_DELETE) == 0) {
|
||||
* filemap_fdatawrite(ip->i_mapping);
|
||||
* filemap_fdatawait(ip->i_mapping);
|
||||
* }
|
||||
* && (tblk->flag & COMMIT_DELETE) == 0)
|
||||
* filemap_write_and_wait(ip->i_mapping);
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -108,8 +108,7 @@ int jfs_umount(struct super_block *sb)
|
|||
* Make sure all metadata makes it to disk before we mark
|
||||
* the superblock as clean
|
||||
*/
|
||||
filemap_fdatawrite(sbi->direct_inode->i_mapping);
|
||||
filemap_fdatawait(sbi->direct_inode->i_mapping);
|
||||
filemap_write_and_wait(sbi->direct_inode->i_mapping);
|
||||
|
||||
/*
|
||||
* ensure all file system file pages are propagated to their
|
||||
|
|
@ -161,8 +160,7 @@ int jfs_umount_rw(struct super_block *sb)
|
|||
* mark the superblock clean before everything is flushed to
|
||||
* disk.
|
||||
*/
|
||||
filemap_fdatawrite(sbi->direct_inode->i_mapping);
|
||||
filemap_fdatawait(sbi->direct_inode->i_mapping);
|
||||
filemap_write_and_wait(sbi->direct_inode->i_mapping);
|
||||
|
||||
updateSuper(sb, FM_CLEAN);
|
||||
|
||||
|
|
|
|||
|
|
@ -376,8 +376,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
|
|||
* by txCommit();
|
||||
*/
|
||||
filemap_fdatawait(ipbmap->i_mapping);
|
||||
filemap_fdatawrite(ipbmap->i_mapping);
|
||||
filemap_fdatawait(ipbmap->i_mapping);
|
||||
filemap_write_and_wait(ipbmap->i_mapping);
|
||||
diWriteSpecial(ipbmap, 0);
|
||||
|
||||
newPage = nPages; /* first new page number */
|
||||
|
|
|
|||
|
|
@ -502,8 +502,7 @@ out_no_rw:
|
|||
jfs_err("jfs_umount failed with return code %d", rc);
|
||||
}
|
||||
out_mount_failed:
|
||||
filemap_fdatawrite(sbi->direct_inode->i_mapping);
|
||||
filemap_fdatawait(sbi->direct_inode->i_mapping);
|
||||
filemap_write_and_wait(sbi->direct_inode->i_mapping);
|
||||
truncate_inode_pages(sbi->direct_inode->i_mapping, 0);
|
||||
make_bad_inode(sbi->direct_inode);
|
||||
iput(sbi->direct_inode);
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/capability.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/xattr.h>
|
||||
#include <linux/posix_acl_xattr.h>
|
||||
|
|
@ -83,21 +84,6 @@ struct ea_buffer {
|
|||
#define EA_NEW 0x0004
|
||||
#define EA_MALLOC 0x0008
|
||||
|
||||
/* Namespaces */
|
||||
#define XATTR_SYSTEM_PREFIX "system."
|
||||
#define XATTR_SYSTEM_PREFIX_LEN (sizeof (XATTR_SYSTEM_PREFIX) - 1)
|
||||
|
||||
#define XATTR_USER_PREFIX "user."
|
||||
#define XATTR_USER_PREFIX_LEN (sizeof (XATTR_USER_PREFIX) - 1)
|
||||
|
||||
#define XATTR_OS2_PREFIX "os2."
|
||||
#define XATTR_OS2_PREFIX_LEN (sizeof (XATTR_OS2_PREFIX) - 1)
|
||||
|
||||
/* XATTR_SECURITY_PREFIX is defined in include/linux/xattr.h */
|
||||
#define XATTR_SECURITY_PREFIX_LEN (sizeof (XATTR_SECURITY_PREFIX) - 1)
|
||||
|
||||
#define XATTR_TRUSTED_PREFIX "trusted."
|
||||
#define XATTR_TRUSTED_PREFIX_LEN (sizeof (XATTR_TRUSTED_PREFIX) - 1)
|
||||
|
||||
/*
|
||||
* These three routines are used to recognize on-disk extended attributes
|
||||
|
|
@ -773,36 +759,23 @@ static int can_set_system_xattr(struct inode *inode, const char *name,
|
|||
static int can_set_xattr(struct inode *inode, const char *name,
|
||||
const void *value, size_t value_len)
|
||||
{
|
||||
if (IS_RDONLY(inode))
|
||||
return -EROFS;
|
||||
|
||||
if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
|
||||
return -EPERM;
|
||||
|
||||
if(strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN) == 0)
|
||||
/*
|
||||
* "system.*"
|
||||
*/
|
||||
if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
|
||||
return can_set_system_xattr(inode, name, value, value_len);
|
||||
|
||||
if(strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) == 0)
|
||||
return (capable(CAP_SYS_ADMIN) ? 0 : -EPERM);
|
||||
|
||||
#ifdef CONFIG_JFS_SECURITY
|
||||
if (strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN)
|
||||
== 0)
|
||||
return 0; /* Leave it to the security module */
|
||||
#endif
|
||||
|
||||
if((strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) != 0) &&
|
||||
(strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) != 0))
|
||||
/*
|
||||
* Don't allow setting an attribute in an unknown namespace.
|
||||
*/
|
||||
if (strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) &&
|
||||
strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) &&
|
||||
strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) &&
|
||||
strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!S_ISREG(inode->i_mode) &&
|
||||
(!S_ISDIR(inode->i_mode) || inode->i_mode &S_ISVTX))
|
||||
return -EPERM;
|
||||
|
||||
return permission(inode, MAY_WRITE, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __jfs_setxattr(tid_t tid, struct inode *inode, const char *name,
|
||||
|
|
@ -972,22 +945,6 @@ int jfs_setxattr(struct dentry *dentry, const char *name, const void *value,
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int can_get_xattr(struct inode *inode, const char *name)
|
||||
{
|
||||
#ifdef CONFIG_JFS_SECURITY
|
||||
if(strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) == 0)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
if(strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) == 0)
|
||||
return (capable(CAP_SYS_ADMIN) ? 0 : -EPERM);
|
||||
|
||||
if(strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN) == 0)
|
||||
return 0;
|
||||
|
||||
return permission(inode, MAY_READ, NULL);
|
||||
}
|
||||
|
||||
ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
|
||||
size_t buf_size)
|
||||
{
|
||||
|
|
@ -998,12 +955,8 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
|
|||
ssize_t size;
|
||||
int namelen = strlen(name);
|
||||
char *os2name = NULL;
|
||||
int rc;
|
||||
char *value;
|
||||
|
||||
if ((rc = can_get_xattr(inode, name)))
|
||||
return rc;
|
||||
|
||||
if (strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) == 0) {
|
||||
os2name = kmalloc(namelen - XATTR_OS2_PREFIX_LEN + 1,
|
||||
GFP_KERNEL);
|
||||
|
|
|
|||
Loading…
Reference in a new issue