FAILED: patch "[PATCH] vboxsf: Honor excl flag to the dir-inode create op" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From cc3ddee97cff034cea4d095de4a484c92a219bf5 Mon Sep 17 00:00:00 2001
From: Hans de Goede <[email protected]>
Date: Thu, 21 Jan 2021 10:08:59 +0100
Subject: [PATCH] vboxsf: Honor excl flag to the dir-inode create op
Honor the excl flag to the dir-inode create op, instead of behaving as if it is always set.
Note the old behavior still worked most of the time since a non-exclusive open only calls the create op, if there is a race and the file is created between the dentry lookup and the calling of the create call.
While at it change the type of the is_dir parameter to the vboxsf_dir_create() helper from an int to a bool, to be consistent with the use of bool for the excl parameter.
fs/vboxsf/dir.c +9 -7
@@ -253,7 +253,7 @@ static int vboxsf_dir_instantiate(struct inode *parent, struct dentry *dentry, }static int vboxsf_dir_create (struct inode *parent,struct dentry *dentry, -umode_t mode,int is_dir) +umode_t mode,bool is_dir,bool excl) {struct vboxsf_inode *sf_parent_i =VBOXSF_I (parent);struct vboxsf_sbi *sbi =VBOXSF_SBI (parent->i_sb);
@@ -261,10 +261,12 @@ static int vboxsf_dir_create(struct inode *parent, struct dentry *dentry,int err; params.handle =SHFL_HANDLE_NIL ; - params.create_flags =SHFL_CF_ACT_CREATE_IF_NEW | -SHFL_CF_ACT_FAIL_IF_EXISTS | -SHFL_CF_ACCESS_READWRITE | - (is_dir ?SHFL_CF_DIRECTORY :0 ); + params.create_flags =SHFL_CF_ACT_CREATE_IF_NEW |SHFL_CF_ACCESS_READWRITE ; +if (is_dir) + params.create_flags |=SHFL_CF_DIRECTORY ; +if (excl) + params.create_flags |=SHFL_CF_ACT_FAIL_IF_EXISTS ; + params.info.attr.mode = (mode &0777 ) | (is_dir ?SHFL_TYPE_DIRECTORY :SHFL_TYPE_FILE ); params.info.attr.additional =SHFLFSOBJATTRADD_NOTHING ;
@@ -292,14 +294,14 @@ static int vboxsf_dir_mkfile(struct user_namespace *mnt_userns, struct inode *parent, struct dentry *dentry, umode_t mode, bool excl) { - return vboxsf_dir_create(parent, dentry, mode, 0); + return vboxsf_dir_create(parent, dentry, mode, false, excl); }static int vboxsf_dir_mkdir (struct user_namespace *mnt_userns,struct inode *parent,struct dentry *dentry,umode_t mode) { -return vboxsf_dir_create (parent, dentry, mode,1 ); +return vboxsf_dir_create (parent, dentry, mode, true, true); }static int vboxsf_dir_unlink (struct inode *parent,struct dentry *dentry)