}
 
        inode->i_uid = le32_to_cpu(fe->uid);
-       if (inode->i_uid == -1 || UDF_QUERY_FLAG(inode->i_sb,
-                                                UDF_FLAG_UID_IGNORE))
+       if (inode->i_uid == -1 ||
+           UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_IGNORE) ||
+           UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_SET))
                inode->i_uid = UDF_SB(inode->i_sb)->s_uid;
 
        inode->i_gid = le32_to_cpu(fe->gid);
-       if (inode->i_gid == -1 || UDF_QUERY_FLAG(inode->i_sb,
-                                                UDF_FLAG_GID_IGNORE))
+       if (inode->i_gid == -1 ||
+           UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_IGNORE) ||
+           UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_SET))
                inode->i_gid = UDF_SB(inode->i_sb)->s_gid;
 
        inode->i_nlink = le16_to_cpu(fe->fileLinkCount);
 
                        if (match_int(args, &option))
                                return 0;
                        uopt->gid = option;
+                       uopt->flags |= (1 << UDF_FLAG_GID_SET);
                        break;
                case Opt_uid:
                        if (match_int(args, &option))
                                return 0;
                        uopt->uid = option;
+                       uopt->flags |= (1 << UDF_FLAG_UID_SET);
                        break;
                case Opt_umask:
                        if (match_octal(args, &option))
 
 #define UDF_FLAG_UID_IGNORE     12    /* use sb uid instead of on disk uid */
 #define UDF_FLAG_GID_FORGET     13
 #define UDF_FLAG_GID_IGNORE     14
+#define UDF_FLAG_UID_SET       15
+#define UDF_FLAG_GID_SET       16
 
 #define UDF_PART_FLAG_UNALLOC_BITMAP   0x0001
 #define UDF_PART_FLAG_UNALLOC_TABLE    0x0002