fs: add a vfs_fchown helper
[sfrench/cifs-2.6.git] / fs / open.c
index 6cd48a61cda3b969c0717c30c8bed879efa3d8cc..103c66309bee673eae050e3ae66a9d38a9c516a7 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -740,23 +740,28 @@ SYSCALL_DEFINE3(lchown, const char __user *, filename, uid_t, user, gid_t, group
                           AT_SYMLINK_NOFOLLOW);
 }
 
+int vfs_fchown(struct file *file, uid_t user, gid_t group)
+{
+       int error;
+
+       error = mnt_want_write_file(file);
+       if (error)
+               return error;
+       audit_file(file);
+       error = chown_common(&file->f_path, user, group);
+       mnt_drop_write_file(file);
+       return error;
+}
+
 int ksys_fchown(unsigned int fd, uid_t user, gid_t group)
 {
        struct fd f = fdget(fd);
        int error = -EBADF;
 
-       if (!f.file)
-               goto out;
-
-       error = mnt_want_write_file(f.file);
-       if (error)
-               goto out_fput;
-       audit_file(f.file);
-       error = chown_common(&f.file->f_path, user, group);
-       mnt_drop_write_file(f.file);
-out_fput:
-       fdput(f);
-out:
+       if (f.file) {
+               error = vfs_fchown(f.file, user, group);
+               fdput(f);
+       }
        return error;
 }