Commit dd1db2de authored by Jeff Layton's avatar Jeff Layton Committed by Steve French
Browse files

cifs: don't use CREATE_DELETE_ON_CLOSE in cifs_rename_pending_delete



cifs: don't use CREATE_DELETE_ON_CLOSE in cifs_rename_pending_delete

CREATE_DELETE_ON_CLOSE apparently has different semantics than when you
set the DELETE_ON_CLOSE bit after opening the file. Setting it in the
open says "delete this file as soon as this filehandle is closed". That's
not what we want for cifs_rename_pending_delete.

Don't set this bit in the CreateFlags. Experimentation shows that
setting this flag in the SET_FILE_INFO call has no effect.

Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent 469ee614
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -784,8 +784,7 @@ cifs_rename_pending_delete(char *full_path, struct inode *inode, int xid)
	FILE_BASIC_INFO *info_buf;

	rc = CIFSSMBOpen(xid, tcon, full_path, FILE_OPEN,
			 DELETE|FILE_WRITE_ATTRIBUTES,
			 CREATE_NOT_DIR|CREATE_DELETE_ON_CLOSE,
			 DELETE|FILE_WRITE_ATTRIBUTES, CREATE_NOT_DIR,
			 &netfid, &oplock, NULL, cifs_sb->local_nls,
			 cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
	if (rc != 0)
@@ -810,17 +809,23 @@ cifs_rename_pending_delete(char *full_path, struct inode *inode, int xid)
		goto out_close;
	cifsInode->cifsAttrs = dosattr;

	/* silly-rename the file */
	CIFSSMBRenameOpenFile(xid, tcon, netfid, NULL, cifs_sb->local_nls,
	/* rename the file */
	rc = CIFSSMBRenameOpenFile(xid, tcon, netfid, NULL, cifs_sb->local_nls,
				   cifs_sb->mnt_cifs_flags &
					    CIFS_MOUNT_MAP_SPECIAL_CHR);
	if (rc != 0)
		goto out;

	/* set DELETE_ON_CLOSE */
	rc = CIFSSMBSetFileDisposition(xid, tcon, true, netfid, current->tgid);

	/*
	 * some samba versions return -ENOENT when we try to set the file
	 * disposition here. Likely a samba bug, but work around it for now
	 * disposition here. Likely a samba bug, but work around it for now.
	 * This means that some cifsXXX files may hang around after they
	 * shouldn't.
	 *
	 * BB: remove this once fixed samba servers are in the field
	 */
	if (rc == -ENOENT)
		rc = 0;