diff options
| -rw-r--r-- | fs/udf/inode.c | 21 | ||||
| -rw-r--r-- | fs/udf/udfdecl.h | 2 |
2 files changed, 15 insertions, 8 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 9021c15cec17..c80765d62f7e 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
| @@ -1275,6 +1275,7 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode) | |||
| 1275 | unsigned int indirections = 0; | 1275 | unsigned int indirections = 0; |
| 1276 | int bs = inode->i_sb->s_blocksize; | 1276 | int bs = inode->i_sb->s_blocksize; |
| 1277 | int ret = -EIO; | 1277 | int ret = -EIO; |
| 1278 | uint32_t uid, gid; | ||
| 1278 | 1279 | ||
| 1279 | reread: | 1280 | reread: |
| 1280 | if (iloc->partitionReferenceNum >= sbi->s_partitions) { | 1281 | if (iloc->partitionReferenceNum >= sbi->s_partitions) { |
| @@ -1400,15 +1401,19 @@ reread: | |||
| 1400 | 1401 | ||
| 1401 | ret = -EIO; | 1402 | ret = -EIO; |
| 1402 | read_lock(&sbi->s_cred_lock); | 1403 | read_lock(&sbi->s_cred_lock); |
| 1403 | i_uid_write(inode, le32_to_cpu(fe->uid)); | 1404 | uid = le32_to_cpu(fe->uid); |
| 1404 | if (!uid_valid(inode->i_uid) || | 1405 | if (uid == UDF_INVALID_ID || |
| 1405 | UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_SET)) | 1406 | UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_SET)) |
| 1406 | inode->i_uid = UDF_SB(inode->i_sb)->s_uid; | 1407 | inode->i_uid = sbi->s_uid; |
| 1408 | else | ||
| 1409 | i_uid_write(inode, uid); | ||
| 1407 | 1410 | ||
| 1408 | i_gid_write(inode, le32_to_cpu(fe->gid)); | 1411 | gid = le32_to_cpu(fe->gid); |
| 1409 | if (!gid_valid(inode->i_gid) || | 1412 | if (gid == UDF_INVALID_ID || |
| 1410 | UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_SET)) | 1413 | UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_SET)) |
| 1411 | inode->i_gid = UDF_SB(inode->i_sb)->s_gid; | 1414 | inode->i_gid = sbi->s_gid; |
| 1415 | else | ||
| 1416 | i_gid_write(inode, gid); | ||
| 1412 | 1417 | ||
| 1413 | if (fe->icbTag.fileType != ICBTAG_FILE_TYPE_DIRECTORY && | 1418 | if (fe->icbTag.fileType != ICBTAG_FILE_TYPE_DIRECTORY && |
| 1414 | sbi->s_fmode != UDF_INVALID_MODE) | 1419 | sbi->s_fmode != UDF_INVALID_MODE) |
| @@ -1653,12 +1658,12 @@ static int udf_update_inode(struct inode *inode, int do_sync) | |||
| 1653 | } | 1658 | } |
| 1654 | 1659 | ||
| 1655 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_FORGET)) | 1660 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_FORGET)) |
| 1656 | fe->uid = cpu_to_le32(-1); | 1661 | fe->uid = cpu_to_le32(UDF_INVALID_ID); |
| 1657 | else | 1662 | else |
| 1658 | fe->uid = cpu_to_le32(i_uid_read(inode)); | 1663 | fe->uid = cpu_to_le32(i_uid_read(inode)); |
| 1659 | 1664 | ||
| 1660 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_FORGET)) | 1665 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_FORGET)) |
| 1661 | fe->gid = cpu_to_le32(-1); | 1666 | fe->gid = cpu_to_le32(UDF_INVALID_ID); |
| 1662 | else | 1667 | else |
| 1663 | fe->gid = cpu_to_le32(i_gid_read(inode)); | 1668 | fe->gid = cpu_to_le32(i_gid_read(inode)); |
| 1664 | 1669 | ||
diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index f5e0fe78979e..68e8a64d22e0 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h | |||
| @@ -48,6 +48,8 @@ extern __printf(3, 4) void _udf_warn(struct super_block *sb, | |||
| 48 | #define UDF_EXTENT_LENGTH_MASK 0x3FFFFFFF | 48 | #define UDF_EXTENT_LENGTH_MASK 0x3FFFFFFF |
| 49 | #define UDF_EXTENT_FLAG_MASK 0xC0000000 | 49 | #define UDF_EXTENT_FLAG_MASK 0xC0000000 |
| 50 | 50 | ||
| 51 | #define UDF_INVALID_ID ((uint32_t)-1) | ||
| 52 | |||
| 51 | #define UDF_NAME_PAD 4 | 53 | #define UDF_NAME_PAD 4 |
| 52 | #define UDF_NAME_LEN 254 | 54 | #define UDF_NAME_LEN 254 |
| 53 | #define UDF_NAME_LEN_CS0 255 | 55 | #define UDF_NAME_LEN_CS0 255 |
