diff options
author | Steve French <smfrench@gmail.com> | 2014-08-11 21:05:25 -0500 |
---|---|---|
committer | Steve French <smfrench@gmail.com> | 2014-08-13 13:18:35 -0500 |
commit | 3d1a3745d8ca7ccdf00905b01fd5ab42ff523a94 (patch) | |
tree | 17ba01e56cbf7238e5ce59967f1e073da95b885b /fs/cifs/cifsglob.h | |
parent | 8ae31240ccc8ff339101e2d023b82cb7c93dd002 (diff) | |
download | linux-3d1a3745d8ca7ccdf00905b01fd5ab42ff523a94.tar.gz linux-3d1a3745d8ca7ccdf00905b01fd5ab42ff523a94.tar.bz2 linux-3d1a3745d8ca7ccdf00905b01fd5ab42ff523a94.zip |
Add sparse file support to SMB2/SMB3 mounts
Many Linux filesystes make a file "sparse" when extending
a file with ftruncate. This does work for CIFS to Samba
(only) but not for SMB2/SMB3 (to Samba or Windows) since
there is a "set sparse" fsctl which is supposed to be
sent to mark a file as sparse.
This patch marks a file as sparse by sending this simple
set sparse fsctl if it is extended more than 2 pages.
It has been tested to Windows 8.1, Samba and various
SMB2/SMB3 servers which do support setting sparse (and
MacOS which does not appear to support the fsctl yet).
If a server share does not support setting a file
as sparse, then we do not retry setting sparse on that
share.
The disk space savings for sparse files can be quite
large (even more significant on Windows servers than Samba).
Signed-off-by: Steve French <smfrench@gmail.com>
Reviewed-by: Shirish Pargaonkar <spargaonkar@suse.com>
Diffstat (limited to 'fs/cifs/cifsglob.h')
-rw-r--r-- | fs/cifs/cifsglob.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 0012e1e291d4..bc20a6ea6754 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h @@ -883,6 +883,7 @@ struct cifs_tcon { for this mount even if server would support */ bool local_lease:1; /* check leases (only) on local system not remote */ bool broken_posix_open; /* e.g. Samba server versions < 3.3.2, 3.2.9 */ + bool broken_sparse_sup; /* if server or share does not support sparse */ bool need_reconnect:1; /* connection reset, tid now invalid */ #ifdef CONFIG_CIFS_SMB2 bool print:1; /* set if connection to printer share */ |