UDF: fix UID and GID mount option ignorance
PATCH 1/1 UDF: fix UID and GID mount option ignorance
This patch fix weird behaviour of UDF mounting procedure. To get UID changed (for now) we have to type
mount -t udf -o uid=some_user,uid=ignore /dev/device /mnt/moun_point
and specifying two uid at once is strange a bit. So with the patch we are able to mount without additional 'uid=ignore' option. The same for GID option is done.
This patch will not break current mount scheme (with two option).
Signed-off-by Cyrill Gorcunov <[email protected]>
---
Andrew, Jan comments?
Btw this does fix (I hope) the following
[BUG 6124] mount of UDF fs ignores UID and GID options
http://bugzilla.kernel.org/show_bug.cgi?id=6124fs/udf/inode.c | 10 ++++++---- fs/udf/super.c | 2 ++ fs/udf/udf_sb.h | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-)
fs/udf/inode.c +6 -4
@@ -1127,13 +1127,15 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) } 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);
fs/udf/super.c +2 -0
@@ -366,11 +366,13 @@ static int udf_parse_options(char *options, struct udf_options *uopt)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))
fs/udf/udf_sb.h +2 -0
@@ -24,6 +24,8 @@#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