Jan Kara <jack@xxxxxxx> writes: > On Wed 17-02-10 21:47:06, Dmitry Monakhov wrote: >> >> Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx> >> --- >> fs/udf/ialloc.c | 11 ++--------- >> fs/udf/namei.c | 3 --- >> 2 files changed, 2 insertions(+), 12 deletions(-) > Hmm, this patch looks kind of half baked. There are several calls to > udf_new_inode() in udf/namei.c. From your patch I'd expect they all should > pass correct final mode to udf_new_inode which they currently don't to (the > case of udf_mkdir and udf_symlink). Otherwise I'm fine with this change. Yeah, you right. I was to lazy to check all callers :(. Correct version are follows:
>From 612e46abea261e9fdaea5f3285c5deee4f86f162 Mon Sep 17 00:00:00 2001 From: Dmitry Monakhov <dmonakhov@xxxxxxxxxx> Date: Thu, 18 Feb 2010 09:42:52 +0300 Subject: [PATCH 18/19] udf: replace inode uid,gid,mode init with helper v2 Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx> --- fs/udf/ialloc.c | 11 ++--------- fs/udf/namei.c | 8 +------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/fs/udf/ialloc.c b/fs/udf/ialloc.c index c10fa39..52d6e4d 100644 --- a/fs/udf/ialloc.c +++ b/fs/udf/ialloc.c @@ -124,15 +124,8 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) udf_updated_lvid(sb); } mutex_unlock(&sbi->s_alloc_mutex); - inode->i_mode = mode; - inode->i_uid = current_fsuid(); - if (dir->i_mode & S_ISGID) { - inode->i_gid = dir->i_gid; - if (S_ISDIR(mode)) - mode |= S_ISGID; - } else { - inode->i_gid = current_fsgid(); - } + + inode_init_owner(inode, dir, mode); iinfo->i_location.logicalBlockNum = block; iinfo->i_location.partitionReferenceNum = diff --git a/fs/udf/namei.c b/fs/udf/namei.c index cd21150..5a59b97 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c @@ -577,7 +577,6 @@ static int udf_create(struct inode *dir, struct dentry *dentry, int mode, inode->i_data.a_ops = &udf_aops; inode->i_op = &udf_file_inode_operations; inode->i_fop = &udf_file_operations; - inode->i_mode = mode; mark_inode_dirty(inode); fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); @@ -623,7 +622,6 @@ static int udf_mknod(struct inode *dir, struct dentry *dentry, int mode, goto out; iinfo = UDF_I(inode); - inode->i_uid = current_fsuid(); init_special_inode(inode, mode, rdev); fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); if (!fi) { @@ -691,9 +689,6 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode) FID_FILE_CHAR_DIRECTORY | FID_FILE_CHAR_PARENT; udf_write_fi(inode, &cfi, fi, &fibh, NULL, NULL); brelse(fibh.sbh); - inode->i_mode = S_IFDIR | mode; - if (dir->i_mode & S_ISGID) - inode->i_mode |= S_ISGID; mark_inode_dirty(inode); fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); @@ -900,7 +895,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry, struct udf_inode_info *iinfo; lock_kernel(); - inode = udf_new_inode(dir, S_IFLNK, &err); + inode = udf_new_inode(dir, S_IFLNK | S_IRWXUGO, &err); if (!inode) goto out; @@ -911,7 +906,6 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry, } iinfo = UDF_I(inode); - inode->i_mode = S_IFLNK | S_IRWXUGO; inode->i_data.a_ops = &udf_symlink_aops; inode->i_op = &page_symlink_inode_operations; -- 1.6.6