[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250831123602.14037-28-pali@kernel.org>
Date: Sun, 31 Aug 2025 14:35:54 +0200
From: Pali Rohár <pali@...nel.org>
To: Steve French <sfrench@...ba.org>,
Paulo Alcantara <pc@...guebit.com>,
ronnie sahlberg <ronniesahlberg@...il.com>
Cc: linux-cifs@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [PATCH 27/35] cifs: Move SMB1 usage of CIFSPOSIXDelFile() from inode.c to cifssmb.c
Special case of unlinking file via SMB1 UNIX extension is currently in the
dialect agnostic function cifs_unlink() and hidden under the #ifdef
CONFIG_CIFS_ALLOW_INSECURE_LEGACY.
Cleanup the code and move this functionality into the SMB1 ->unlink()
callback, which removes one #ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
code block from inode.c
Signed-off-by: Pali Rohár <pali@...nel.org>
---
fs/smb/client/cifssmb.c | 12 ++++++++++++
fs/smb/client/inode.c | 20 +++-----------------
2 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/fs/smb/client/cifssmb.c b/fs/smb/client/cifssmb.c
index c09713ebdc7c..3a0452479a69 100644
--- a/fs/smb/client/cifssmb.c
+++ b/fs/smb/client/cifssmb.c
@@ -768,6 +768,18 @@ CIFSSMBDelFile(const unsigned int xid, struct cifs_tcon *tcon, const char *name,
int name_len;
int remap = cifs_remap(cifs_sb);
+ /* If UNIX extensions are available then use UNIX UNLINK call. */
+ if (cap_unix(tcon->ses) &&
+ (le64_to_cpu(tcon->fsUnixInfo.Capability) & CIFS_UNIX_POSIX_PATH_OPS_CAP)) {
+ rc = CIFSPOSIXDelFile(xid, tcon, name,
+ SMB_POSIX_UNLINK_FILE_TARGET,
+ cifs_sb->local_nls,
+ cifs_remap(cifs_sb));
+ cifs_dbg(FYI, "posix del rc %d\n", rc);
+ if (rc == 0 || rc == -ENOENT)
+ return rc;
+ }
+
DelFileRetry:
rc = smb_init(SMB_COM_DELETE, 1, tcon, (void **) &pSMB,
(void **) &pSMBr);
diff --git a/fs/smb/client/inode.c b/fs/smb/client/inode.c
index c3f101d10488..545964cac9cd 100644
--- a/fs/smb/client/inode.c
+++ b/fs/smb/client/inode.c
@@ -1947,27 +1947,13 @@ int cifs_unlink(struct inode *dir, struct dentry *dentry)
netfs_wait_for_outstanding_io(inode);
cifs_close_deferred_file_under_dentry(tcon, full_path);
-#ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY
- if (cap_unix(tcon->ses) && (CIFS_UNIX_POSIX_PATH_OPS_CAP &
- le64_to_cpu(tcon->fsUnixInfo.Capability))) {
- rc = CIFSPOSIXDelFile(xid, tcon, full_path,
- SMB_POSIX_UNLINK_FILE_TARGET, cifs_sb->local_nls,
- cifs_remap(cifs_sb));
- cifs_dbg(FYI, "posix del rc %d\n", rc);
- if ((rc == 0) || (rc == -ENOENT))
- goto psx_del_no_retry;
- }
-#endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */
retry_std_delete:
- if (!server->ops->unlink) {
+ if (!server->ops->unlink)
rc = -ENOSYS;
- goto psx_del_no_retry;
- }
-
- rc = server->ops->unlink(xid, tcon, full_path, cifs_sb, dentry);
+ else
+ rc = server->ops->unlink(xid, tcon, full_path, cifs_sb, dentry);
-psx_del_no_retry:
if (!rc) {
if (inode) {
cifs_mark_open_handles_for_deleted_file(inode, full_path);
--
2.20.1
Powered by blists - more mailing lists