CIFS: Add SMB2 support for hardlink operation
Signed-off-by: Pavel Shilovsky <pshilovsky@samba.org> Signed-off-by: Steve French <smfrench@gmail.com>
This commit is contained in:

committed by
Steve French

parent
d6e906f1b5
commit
568798cc62
@@ -78,6 +78,10 @@ smb2_open_op_close(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
tmprc = SMB2_rename(xid, tcon, persistent_fid, volatile_fid,
|
||||
(__le16 *)data);
|
||||
break;
|
||||
case SMB2_OP_HARDLINK:
|
||||
tmprc = SMB2_set_hardlink(xid, tcon, persistent_fid,
|
||||
volatile_fid, (__le16 *)data);
|
||||
break;
|
||||
default:
|
||||
cERROR(1, "Invalid command");
|
||||
break;
|
||||
@@ -175,10 +179,10 @@ smb2_unlink(const unsigned int xid, struct cifs_tcon *tcon, const char *name,
|
||||
SMB2_OP_DELETE);
|
||||
}
|
||||
|
||||
int
|
||||
smb2_rename_path(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
const char *from_name, const char *to_name,
|
||||
struct cifs_sb_info *cifs_sb)
|
||||
static int
|
||||
smb2_set_path_attr(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
const char *from_name, const char *to_name,
|
||||
struct cifs_sb_info *cifs_sb, __u32 access, int command)
|
||||
{
|
||||
__le16 *smb2_to_name = NULL;
|
||||
int rc;
|
||||
@@ -189,9 +193,27 @@ smb2_rename_path(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
goto smb2_rename_path;
|
||||
}
|
||||
|
||||
rc = smb2_open_op_close(xid, tcon, cifs_sb, from_name, DELETE,
|
||||
FILE_OPEN, 0, 0, smb2_to_name, SMB2_OP_RENAME);
|
||||
rc = smb2_open_op_close(xid, tcon, cifs_sb, from_name, access,
|
||||
FILE_OPEN, 0, 0, smb2_to_name, command);
|
||||
smb2_rename_path:
|
||||
kfree(smb2_to_name);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int
|
||||
smb2_rename_path(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
const char *from_name, const char *to_name,
|
||||
struct cifs_sb_info *cifs_sb)
|
||||
{
|
||||
return smb2_set_path_attr(xid, tcon, from_name, to_name, cifs_sb,
|
||||
DELETE, SMB2_OP_RENAME);
|
||||
}
|
||||
|
||||
int
|
||||
smb2_create_hardlink(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
const char *from_name, const char *to_name,
|
||||
struct cifs_sb_info *cifs_sb)
|
||||
{
|
||||
return smb2_set_path_attr(xid, tcon, from_name, to_name, cifs_sb,
|
||||
FILE_READ_ATTRIBUTES, SMB2_OP_HARDLINK);
|
||||
}
|
||||
|
Reference in New Issue
Block a user