xfs: fixes for 3.15-rc6
Code inspection of the XFS error number sign translations found a bunch of issues, including returning incorrectly signed errors for some data integrity operations. These leak to userspace and result in applications not getting the errors correctly reported. Hence they need fixing sooner rather than later. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJTdXBCAAoJEK3oKUf0dfoddHgP/11HEo2mAU4s3IZ0FXiWg7IX LLz5laDlK0hBTEzlE43Y3bhX5Euk9cMYYschXoX7o9gOBG5VmC4RF9oIlzbohu1D IlekaClr9UYiy7G6k3jLYFB8UDO4L88SM1pkJOus40VDD74fU2mYRrkFCnxWgGUz 9dcQkCB3C75rkH7LT5QGr1qejhmvC8WG0yVnwQB97/wiHDOeFuLIGpJtq8pYabfH HVm5VoWcBerX5q6Zd/8hFRLARfMcQLpeotByLRT6jiJHz/gteVou8jJhgBOW1c1/ Z/CnK7GlvnWUo06/8FRVoHXwuOL+iPa1kiJIGm6DaYEIfZcsif28w2IPZyPlNzzN vrR7Tdq6jSqpHo8JHGmBJDmS+RAdQtGEo/5pjqJAdhWOK4EW1fUxcrAH24A8ATLZ hb5aIozVAYhGLN8wtPushL7endzZ5qQJFCuGmBO0QRP+5Cbkq018tC/3K9NCPXmM MRTyiMs3ZxyYIcvgBo08eU6k419S9D/eZuHy+LU6ALWLf8+Km4aJyC6hKAQmQnzb pw/3tP0xbdUK83Xl8wHVGmNUlQgjB1ZhOLdF0xAc9MocRarPqbuvLKTIUHslE8uO 1+sGIkKeiTzeOd0fJ+UGQC8cFxYbRyhg/fpg2feWF69Rn+hkpUTaSXivhCgAoDVs fQ1SB/n97rNi68ZJF6z5 =5syB -----END PGP SIGNATURE----- Merge tag 'xfs-for-linus-3.15-rc6' of git://oss.sgi.com/xfs/xfs Pull xfs fixes from Dave Chinner: "Code inspection of the XFS error number sign translations found a bunch of issues, including returning incorrectly signed errors for some data integrity operations. These leak to userspace and result in applications not getting the errors correctly reported. Hence they need fixing sooner rather than later. A couple of the bugs are in data integrity operations, a couple more are in the new COLLAPSE_RANGE code. One of these came in through a recent ext4 merge and so I had to update the base tree to 3.15-rc5 before fixing the issues" * tag 'xfs-for-linus-3.15-rc6' of git://oss.sgi.com/xfs/xfs: xfs: list_lru_init returns a negative error xfs: negate xfs_icsb_init_counters error value xfs: negate mount workqueue init error value xfs: fix wrong err sign on xfs_set_acl() xfs: fix wrong errno from xfs_initxattrs xfs: correct error sign on COLLAPSE_RANGE errors xfs: xfs_commit_metadata returns wrong errno xfs: fix incorrect error sign in xfs_file_aio_read xfs: xfs_dir_fsync() returns positive errno
This commit is contained in:
Коммит
5e9d9fc4ed
|
@ -237,7 +237,7 @@ xfs_fs_nfs_commit_metadata(
|
|||
|
||||
if (!lsn)
|
||||
return 0;
|
||||
return _xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL);
|
||||
return -_xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL);
|
||||
}
|
||||
|
||||
const struct export_operations xfs_export_operations = {
|
||||
|
|
|
@ -155,7 +155,7 @@ xfs_dir_fsync(
|
|||
|
||||
if (!lsn)
|
||||
return 0;
|
||||
return _xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL);
|
||||
return -_xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
|
@ -295,7 +295,7 @@ xfs_file_aio_read(
|
|||
xfs_rw_ilock(ip, XFS_IOLOCK_EXCL);
|
||||
|
||||
if (inode->i_mapping->nrpages) {
|
||||
ret = -filemap_write_and_wait_range(
|
||||
ret = filemap_write_and_wait_range(
|
||||
VFS_I(ip)->i_mapping,
|
||||
pos, -1);
|
||||
if (ret) {
|
||||
|
@ -837,7 +837,7 @@ xfs_file_fallocate(
|
|||
unsigned blksize_mask = (1 << inode->i_blkbits) - 1;
|
||||
|
||||
if (offset & blksize_mask || len & blksize_mask) {
|
||||
error = -EINVAL;
|
||||
error = EINVAL;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
|
@ -846,7 +846,7 @@ xfs_file_fallocate(
|
|||
* in which case it is effectively a truncate operation
|
||||
*/
|
||||
if (offset + len >= i_size_read(inode)) {
|
||||
error = -EINVAL;
|
||||
error = EINVAL;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
|
|
|
@ -72,8 +72,8 @@ xfs_initxattrs(
|
|||
int error = 0;
|
||||
|
||||
for (xattr = xattr_array; xattr->name != NULL; xattr++) {
|
||||
error = xfs_attr_set(ip, xattr->name, xattr->value,
|
||||
xattr->value_len, ATTR_SECURE);
|
||||
error = -xfs_attr_set(ip, xattr->name, xattr->value,
|
||||
xattr->value_len, ATTR_SECURE);
|
||||
if (error < 0)
|
||||
break;
|
||||
}
|
||||
|
@ -93,8 +93,8 @@ xfs_init_security(
|
|||
struct inode *dir,
|
||||
const struct qstr *qstr)
|
||||
{
|
||||
return security_inode_init_security(inode, dir, qstr,
|
||||
&xfs_initxattrs, NULL);
|
||||
return -security_inode_init_security(inode, dir, qstr,
|
||||
&xfs_initxattrs, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -173,12 +173,12 @@ xfs_generic_create(
|
|||
|
||||
#ifdef CONFIG_XFS_POSIX_ACL
|
||||
if (default_acl) {
|
||||
error = xfs_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
|
||||
error = -xfs_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
|
||||
if (error)
|
||||
goto out_cleanup_inode;
|
||||
}
|
||||
if (acl) {
|
||||
error = xfs_set_acl(inode, acl, ACL_TYPE_ACCESS);
|
||||
error = -xfs_set_acl(inode, acl, ACL_TYPE_ACCESS);
|
||||
if (error)
|
||||
goto out_cleanup_inode;
|
||||
}
|
||||
|
|
|
@ -843,22 +843,17 @@ xfs_qm_init_quotainfo(
|
|||
|
||||
qinf = mp->m_quotainfo = kmem_zalloc(sizeof(xfs_quotainfo_t), KM_SLEEP);
|
||||
|
||||
if ((error = list_lru_init(&qinf->qi_lru))) {
|
||||
kmem_free(qinf);
|
||||
mp->m_quotainfo = NULL;
|
||||
return error;
|
||||
}
|
||||
error = -list_lru_init(&qinf->qi_lru);
|
||||
if (error)
|
||||
goto out_free_qinf;
|
||||
|
||||
/*
|
||||
* See if quotainodes are setup, and if not, allocate them,
|
||||
* and change the superblock accordingly.
|
||||
*/
|
||||
if ((error = xfs_qm_init_quotainos(mp))) {
|
||||
list_lru_destroy(&qinf->qi_lru);
|
||||
kmem_free(qinf);
|
||||
mp->m_quotainfo = NULL;
|
||||
return error;
|
||||
}
|
||||
error = xfs_qm_init_quotainos(mp);
|
||||
if (error)
|
||||
goto out_free_lru;
|
||||
|
||||
INIT_RADIX_TREE(&qinf->qi_uquota_tree, GFP_NOFS);
|
||||
INIT_RADIX_TREE(&qinf->qi_gquota_tree, GFP_NOFS);
|
||||
|
@ -918,7 +913,7 @@ xfs_qm_init_quotainfo(
|
|||
qinf->qi_isoftlimit = be64_to_cpu(ddqp->d_ino_softlimit);
|
||||
qinf->qi_rtbhardlimit = be64_to_cpu(ddqp->d_rtb_hardlimit);
|
||||
qinf->qi_rtbsoftlimit = be64_to_cpu(ddqp->d_rtb_softlimit);
|
||||
|
||||
|
||||
xfs_qm_dqdestroy(dqp);
|
||||
} else {
|
||||
qinf->qi_btimelimit = XFS_QM_BTIMELIMIT;
|
||||
|
@ -935,6 +930,13 @@ xfs_qm_init_quotainfo(
|
|||
qinf->qi_shrinker.flags = SHRINKER_NUMA_AWARE;
|
||||
register_shrinker(&qinf->qi_shrinker);
|
||||
return 0;
|
||||
|
||||
out_free_lru:
|
||||
list_lru_destroy(&qinf->qi_lru);
|
||||
out_free_qinf:
|
||||
kmem_free(qinf);
|
||||
mp->m_quotainfo = NULL;
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1433,11 +1433,11 @@ xfs_fs_fill_super(
|
|||
if (error)
|
||||
goto out_free_fsname;
|
||||
|
||||
error = xfs_init_mount_workqueues(mp);
|
||||
error = -xfs_init_mount_workqueues(mp);
|
||||
if (error)
|
||||
goto out_close_devices;
|
||||
|
||||
error = xfs_icsb_init_counters(mp);
|
||||
error = -xfs_icsb_init_counters(mp);
|
||||
if (error)
|
||||
goto out_destroy_workqueues;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче