mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
smb: client: insert compression check/call on write requests
On smb2_async_writev(), set CIFS_COMPRESS_REQ on request flags if should_compress() returns true. On smb_send_rqst() check the flags, and compress and send the request to the server. (*) If the compression fails with -EMSGSIZE (i.e. compressed size is >= uncompressed size), the original uncompressed request is sent instead. Signed-off-by: Enzo Matsumiya <ematsumiya@suse.de> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
d14bbfff25
commit
f046d71e84
@ -42,6 +42,7 @@
|
||||
#include "dfs_cache.h"
|
||||
#endif
|
||||
#include "cached_dir.h"
|
||||
#include "compress.h"
|
||||
|
||||
/*
|
||||
* The following table defines the expected "StructureSize" of SMB2 requests
|
||||
@ -5020,6 +5021,10 @@ smb2_async_writev(struct cifs_io_subrequest *wdata)
|
||||
flags |= CIFS_HAS_CREDITS;
|
||||
}
|
||||
|
||||
/* XXX: compression + encryption is unsupported for now */
|
||||
if (((flags & CIFS_TRANSFORM_REQ) != CIFS_TRANSFORM_REQ) && should_compress(tcon, &rqst))
|
||||
flags |= CIFS_COMPRESS_REQ;
|
||||
|
||||
rc = cifs_call_async(server, &rqst, NULL, smb2_writev_callback, NULL,
|
||||
wdata, flags, &wdata->credits);
|
||||
/* Can't touch wdata if rc == 0 */
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "cifs_debug.h"
|
||||
#include "smb2proto.h"
|
||||
#include "smbdirect.h"
|
||||
#include "compress.h"
|
||||
|
||||
/* Max number of iovectors we can use off the stack when sending requests. */
|
||||
#define CIFS_MAX_IOV_SIZE 8
|
||||
@ -432,6 +433,9 @@ smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
||||
struct kvec *iov;
|
||||
int rc;
|
||||
|
||||
if (flags & CIFS_COMPRESS_REQ)
|
||||
return smb_compress(server, &rqst[0], __smb_send_rqst);
|
||||
|
||||
if (!(flags & CIFS_TRANSFORM_REQ))
|
||||
return __smb_send_rqst(server, num_rqst, rqst);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user