Skip to content

Commit f770e4c

Browse files
author
Al Viro
committed
do_fchownat(): unspaghettify a bit...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent 7f583ad commit f770e4c

1 file changed

Lines changed: 12 additions & 16 deletions

File tree

fs/open.c

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -810,30 +810,26 @@ int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group,
810810
struct path path;
811811
int error;
812812
int lookup_flags;
813-
struct filename *name;
814813

815814
if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) != 0)
816815
return -EINVAL;
817816

818817
lookup_flags = (flag & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW;
819-
name = getname_uflags(filename, flag);
818+
CLASS(filename_uflags, name)(filename, flag);
820819
retry:
821820
error = filename_lookup(dfd, name, lookup_flags, &path, NULL);
822-
if (error)
823-
goto out;
824-
error = mnt_want_write(path.mnt);
825-
if (error)
826-
goto out_release;
827-
error = chown_common(&path, user, group);
828-
mnt_drop_write(path.mnt);
829-
out_release:
830-
path_put(&path);
831-
if (retry_estale(error, lookup_flags)) {
832-
lookup_flags |= LOOKUP_REVAL;
833-
goto retry;
821+
if (!error) {
822+
error = mnt_want_write(path.mnt);
823+
if (!error) {
824+
error = chown_common(&path, user, group);
825+
mnt_drop_write(path.mnt);
826+
}
827+
path_put(&path);
828+
if (retry_estale(error, lookup_flags)) {
829+
lookup_flags |= LOOKUP_REVAL;
830+
goto retry;
831+
}
834832
}
835-
out:
836-
putname(name);
837833
return error;
838834
}
839835

0 commit comments

Comments
 (0)