diff -Nur linux-2.6.0/fs/cifs/cifspdu.h linux-2.6.0.flo/fs/cifs/cifspdu.h --- linux-2.6.0/fs/cifs/cifspdu.h 2003-12-18 03:59:27.000000000 +0100 +++ linux-2.6.0.flo/fs/cifs/cifspdu.h 2003-12-30 18:31:20.000000000 +0100 @@ -1554,6 +1554,7 @@ #define UNIX_BLOCKDEV 4 #define UNIX_FIFO 5 #define UNIX_SOCKET 6 +#define UNIX_UNKNOWN 0xffffffff typedef struct { __u32 NextEntryOffset; diff -Nur linux-2.6.0/fs/cifs/cifssmb.c linux-2.6.0.flo/fs/cifs/cifssmb.c --- linux-2.6.0/fs/cifs/cifssmb.c 2003-12-18 03:58:28.000000000 +0100 +++ linux-2.6.0.flo/fs/cifs/cifssmb.c 2003-12-30 18:30:57.000000000 +0100 @@ -42,6 +42,26 @@ BAD_PROT, "\2"} }; +static u32 +smb_filetype_from_mode(int mode) +{ + if (mode & S_IFREG) + return UNIX_FILE; + if (mode & S_IFDIR) + return UNIX_DIR; + if (mode & S_IFLNK) + return UNIX_SYMLINK; + if (mode & S_IFCHR) + return UNIX_CHARDEV; + if (mode & S_IFBLK) + return UNIX_BLOCKDEV; + if (mode & S_IFIFO) + return UNIX_FIFO; + if (mode & S_IFSOCK) + return UNIX_SOCKET; + return UNIX_UNKNOWN; +} + int smb_init(int smb_command, int wct, struct cifsTconInfo *tcon, void **request_buf /* returned */ , @@ -2462,6 +2482,8 @@ data_offset->DevMajor = cpu_to_le64(MAJOR(device)); data_offset->DevMinor = cpu_to_le64(MINOR(device)); data_offset->Permissions = cpu_to_le64(mode); + data_offset->Type = cpu_to_le32(smb_filetype_from_mode(mode)); + pSMB->ByteCount = cpu_to_le16(pSMB->ByteCount); rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB, (struct smb_hdr *) pSMBr, &bytes_returned, 0);