Commit 25f6a537 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'jfs-4.13' of git://github.com/kleikamp/linux-shaggy

Pull JFS fixes from David Kleikamp.

* tag 'jfs-4.13' of git://github.com/kleikamp/linux-shaggy:
  jfs: preserve i_mode if __jfs_set_acl() fails
  jfs: Don't clear SGID when inheriting ACLs
  jfs: atomically read inode size
parents a9d0683e f070e5ac
...@@ -77,13 +77,6 @@ static int __jfs_set_acl(tid_t tid, struct inode *inode, int type, ...@@ -77,13 +77,6 @@ static int __jfs_set_acl(tid_t tid, struct inode *inode, int type,
switch (type) { switch (type) {
case ACL_TYPE_ACCESS: case ACL_TYPE_ACCESS:
ea_name = XATTR_NAME_POSIX_ACL_ACCESS; ea_name = XATTR_NAME_POSIX_ACL_ACCESS;
if (acl) {
rc = posix_acl_update_mode(inode, &inode->i_mode, &acl);
if (rc)
return rc;
inode->i_ctime = current_time(inode);
mark_inode_dirty(inode);
}
break; break;
case ACL_TYPE_DEFAULT: case ACL_TYPE_DEFAULT:
ea_name = XATTR_NAME_POSIX_ACL_DEFAULT; ea_name = XATTR_NAME_POSIX_ACL_DEFAULT;
...@@ -115,12 +108,27 @@ int jfs_set_acl(struct inode *inode, struct posix_acl *acl, int type) ...@@ -115,12 +108,27 @@ int jfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
{ {
int rc; int rc;
tid_t tid; tid_t tid;
int update_mode = 0;
umode_t mode = inode->i_mode;
tid = txBegin(inode->i_sb, 0); tid = txBegin(inode->i_sb, 0);
mutex_lock(&JFS_IP(inode)->commit_mutex); mutex_lock(&JFS_IP(inode)->commit_mutex);
if (type == ACL_TYPE_ACCESS && acl) {
rc = posix_acl_update_mode(inode, &mode, &acl);
if (rc)
goto end_tx;
update_mode = 1;
}
rc = __jfs_set_acl(tid, inode, type, acl); rc = __jfs_set_acl(tid, inode, type, acl);
if (!rc) if (!rc) {
if (update_mode) {
inode->i_mode = mode;
inode->i_ctime = current_time(inode);
mark_inode_dirty(inode);
}
rc = txCommit(tid, 1, &inode, 0); rc = txCommit(tid, 1, &inode, 0);
}
end_tx:
txEnd(tid); txEnd(tid);
mutex_unlock(&JFS_IP(inode)->commit_mutex); mutex_unlock(&JFS_IP(inode)->commit_mutex);
return rc; return rc;
......
...@@ -98,7 +98,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize) ...@@ -98,7 +98,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
goto out; goto out;
} }
VolumeSize = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits; VolumeSize = i_size_read(sb->s_bdev->bd_inode) >> sb->s_blocksize_bits;
if (VolumeSize) { if (VolumeSize) {
if (newLVSize > VolumeSize) { if (newLVSize > VolumeSize) {
...@@ -211,7 +211,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize) ...@@ -211,7 +211,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
txQuiesce(sb); txQuiesce(sb);
/* Reset size of direct inode */ /* Reset size of direct inode */
sbi->direct_inode->i_size = sb->s_bdev->bd_inode->i_size; sbi->direct_inode->i_size = i_size_read(sb->s_bdev->bd_inode);
if (sbi->mntflag & JFS_INLINELOG) { if (sbi->mntflag & JFS_INLINELOG) {
/* /*
......
...@@ -313,7 +313,7 @@ static int parse_options(char *options, struct super_block *sb, s64 *newLVSize, ...@@ -313,7 +313,7 @@ static int parse_options(char *options, struct super_block *sb, s64 *newLVSize,
} }
case Opt_resize_nosize: case Opt_resize_nosize:
{ {
*newLVSize = sb->s_bdev->bd_inode->i_size >> *newLVSize = i_size_read(sb->s_bdev->bd_inode) >>
sb->s_blocksize_bits; sb->s_blocksize_bits;
if (*newLVSize == 0) if (*newLVSize == 0)
pr_err("JFS: Cannot determine volume size\n"); pr_err("JFS: Cannot determine volume size\n");
...@@ -579,7 +579,7 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) ...@@ -579,7 +579,7 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent)
goto out_unload; goto out_unload;
} }
inode->i_ino = 0; inode->i_ino = 0;
inode->i_size = sb->s_bdev->bd_inode->i_size; inode->i_size = i_size_read(sb->s_bdev->bd_inode);
inode->i_mapping->a_ops = &jfs_metapage_aops; inode->i_mapping->a_ops = &jfs_metapage_aops;
hlist_add_fake(&inode->i_hash); hlist_add_fake(&inode->i_hash);
mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS); mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment