setting allocation size in cifs/smb3

Steve French smfrench at gmail.com
Mon Jul 21 13:27:27 MDT 2014


So depending on the file sizes and with strict allocate enabled in
smb.conf it does shrink the file (I will also experiment with e.g.
allocation roundup size)

What I was trying to do was extend allocation for a 4MB file to 5.4MB,
shrink it to 10K (which ended up shrinking it to 1MB for the Samba
case).

[sfrench at localhost cifs-2.6]$ stat /mnt/test/4M ; fallocate -n -l
5400000 /mnt/test/4M ; sleep 3 ; stat /mnt/test/4M ; fallocate -n -l
10000 /mnt/test/4M ; sleep 2; stat /mnt/test/4M
  File: ‘/mnt/test/4M’
  Size: 4194304   Blocks: 8192       IO Block: 16384  regular file
Device: 26h/38d Inode: 393820      Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:cifs_t:s0
Access: 2014-07-21 14:19:30.596249500 -0500
Modify: 2014-07-21 14:19:30.731591000 -0500
Change: 2014-07-21 14:19:30.731591000 -0500
 Birth: -

  File: ‘/mnt/test/4M’   (after fallocate 5400000)
  Size: 4194304   Blocks: 8192       IO Block: 16384  regular file
Device: 26h/38d Inode: 393820      Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:cifs_t:s0
Access: 2014-07-21 14:19:30.596249500 -0500
Modify: 2014-07-21 14:20:17.141270500 -0500
Change: 2014-07-21 14:20:17.141270500 -0500
 Birth: -

  File: ‘/mnt/test/4M’  (after fallocate 10000)
  Size: 1048576   Blocks: 2048       IO Block: 16384  regular file
Device: 26h/38d Inode: 393820      Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:cifs_t:s0
Access: 2014-07-21 14:19:30.596249500 -0500
Modify: 2014-07-21 14:20:20.157755800 -0500
Change: 2014-07-21 14:20:20.157755800 -0500
 Birth: -

(I will send jra the wireshark trace).

On Mon, Jul 21, 2014 at 1:55 PM, Jeremy Allison <jra at samba.org> wrote:
> On Mon, Jul 21, 2014 at 01:43:12PM -0500, Steve French wrote:
>> What about shrinking the file to the wrong size?
>
> In the set allocation path info it's going through:
>
>         if (allocation_size) {
>                 allocation_size = smb_roundup(conn, allocation_size);
>         }
>
> which by default uses 1MB allocation roundup values.
>
> If you need to set the file length, set the file length :-).
>
> It's arguable if the server can mess with allocation
> requests on file shrink, but this hasn't caused a
> problem in the SMB1/Windows SMB2 code paths so far,
> so I'm guessing it might be allowable....
>
> More research needed !



-- 
Thanks,

Steve


More information about the samba-technical mailing list