JFS fixes for 4.13
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEIodevzQLVs53l6BhNqiEXrVAjGQFAll3YIwACgkQNqiEXrVA jGQE9w//b/MyL9MtvGcKI7u3V7RrqbodzoL42KxV98TI3y7rpmUcmRsqDT045ufD S+AOqnIhvH2XbsF7jvZ0UROUtErBgh+pIRqCctVqQM+GKE7p/KR0rY/4eMPlbqQL Q2L0ZbokHU4mgvo7SqSJkYFRd0PPBaaw4aJaf8gg1g0pCb29jcer4ycKKHCjz0Wz YS2/v7NVWysehihiz/JF6ga5/n6VZeXq3fa48Mmt4TDzKt4IaqgLtAEbPa+eddwW z/t4YIoiQ4JUYPnLNmG1Kd8lACfeqKkr2WIh3143ipof4Tj3ZaNc315wVQUl58LP 6ZUg12tLDVH9OOPdI9VsVLostRbyKH3yUazULBXWIQQt6ZWcFiKFbturMlZevSJB OuGBsfpDDvkd+2n2iNcwane/+Ouw4LChzUvmp9/MuIRxinRVdXAVRjaUb2M54xSW qR/Yfw8qyky9tac1c1Md/bVo7oMEw0Xliv3HxmGKHNPLMOLzwfVTAw0gGXSrGFn8 veUKCl1J1+9NWoNExDkyUjsmD1CdkhQk1gpmU70KWQlCgKCtBhWiX6rEy0l8pw1t G5UmFpgqG8g61ODuW0dbnSdImmS8mcbY4I1lSvQFb3qVtCeBLz9q7OKSCuavbs4M egtaUNVMJ22dVv12loj2OOyVdneUXbUB0WVga3kfEq7QRCtSjF4= =fVR9 -----END PGP SIGNATURE----- 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
This commit is contained in:
Коммит
25f6a53799
24
fs/jfs/acl.c
24
fs/jfs/acl.c
|
@ -77,13 +77,6 @@ static int __jfs_set_acl(tid_t tid, struct inode *inode, int type,
|
|||
switch (type) {
|
||||
case ACL_TYPE_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;
|
||||
case ACL_TYPE_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)
|
|||
{
|
||||
int rc;
|
||||
tid_t tid;
|
||||
int update_mode = 0;
|
||||
umode_t mode = inode->i_mode;
|
||||
|
||||
tid = txBegin(inode->i_sb, 0);
|
||||
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);
|
||||
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);
|
||||
}
|
||||
end_tx:
|
||||
txEnd(tid);
|
||||
mutex_unlock(&JFS_IP(inode)->commit_mutex);
|
||||
return rc;
|
||||
|
|
|
@ -98,7 +98,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
|
|||
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 (newLVSize > VolumeSize) {
|
||||
|
@ -211,7 +211,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize)
|
|||
txQuiesce(sb);
|
||||
|
||||
/* 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) {
|
||||
/*
|
||||
|
|
|
@ -313,7 +313,7 @@ static int parse_options(char *options, struct super_block *sb, s64 *newLVSize,
|
|||
}
|
||||
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;
|
||||
if (*newLVSize == 0)
|
||||
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)
|
|||
goto out_unload;
|
||||
}
|
||||
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;
|
||||
hlist_add_fake(&inode->i_hash);
|
||||
mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
|
||||
|
|
Загрузка…
Ссылка в новой задаче