Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a0c8230 authored by Steve French's avatar Steve French
Browse files

[CIFS] Reduce cifs stack space usage



The two cifs functions that used the most stack according
to "make checkstack" have been changed to use less stack.

Thanks to jra and Shaggy for helpful ideas

Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
cc: jra@samba.org
cc: shaggy@us.ibm.com
parent 030e9d81
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -1146,7 +1146,7 @@ static int cifs_writepages(struct address_space *mapping,
	pgoff_t end;
	pgoff_t index;
 	int range_whole = 0;
	struct kvec iov[32];
	struct kvec * iov;
	int len;
	int n_iov = 0;
	pgoff_t next;
@@ -1174,12 +1174,18 @@ static int cifs_writepages(struct address_space *mapping,
			if(!experimEnabled) 
				return generic_writepages(mapping, wbc);

	iov = kmalloc(32 * sizeof(struct kvec), GFP_KERNEL);
	if(iov == NULL)
		return generic_writepages(mapping, wbc);


	/*
	 * BB: Is this meaningful for a non-block-device file system?
	 * If it is, we should test it again after we do I/O
	 */
	if (wbc->nonblocking && bdi_write_congested(bdi)) {
		wbc->encountered_congestion = 1;
		kfree(iov);
		return 0;
	}

@@ -1345,7 +1351,7 @@ static int cifs_writepages(struct address_space *mapping,
		mapping->writeback_index = index;

	FreeXid(xid);

	kfree(iov);
	return rc;
}

+7 −1
Original line number Diff line number Diff line
@@ -196,7 +196,7 @@ dohash(char *out, char *in, char *key, int forw)
	char c[28];
	char d[28];
	char *cd;
	char ki[16][48];
	char (*ki)[48];
	char *pd1;
	char l[32], r[32];
	char *rl;
@@ -206,6 +206,10 @@ dohash(char *out, char *in, char *key, int forw)
	if(pk1 == NULL)
		return;

	ki = kmalloc(16*48, GFP_KERNEL);
	if(ki == NULL)
		return;

	cd = pk1 + 56;
	pd1= cd  + 56;
	rl = pd1 + 64;
@@ -243,6 +247,7 @@ dohash(char *out, char *in, char *key, int forw)
		er = kmalloc(48+48+32+32+32, GFP_KERNEL);
		if(er == NULL) {
			kfree(pk1);
			kfree(ki);
			return;
		}
		erk = er+48;
@@ -290,6 +295,7 @@ dohash(char *out, char *in, char *key, int forw)

	permute(out, rl, perm6, 64);
	kfree(pk1);
	kfree(ki);
}

static void