diff options
author | Jeremy Allison <jra@samba.org> | 2003-10-07 00:05:59 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2003-10-07 00:05:59 +0000 |
commit | 261a31dcc5c8b78d6b8f476dc217732aaa8258bd (patch) | |
tree | 571c2c4624a531949a6607460b4c1207983ccc13 /source3/smbd | |
parent | d7fba69c312a992616205e78dafd207dd194405b (diff) | |
download | samba-261a31dcc5c8b78d6b8f476dc217732aaa8258bd.tar.gz samba-261a31dcc5c8b78d6b8f476dc217732aaa8258bd.tar.bz2 samba-261a31dcc5c8b78d6b8f476dc217732aaa8258bd.zip |
Version of patch from nick@isilon.com (Nicholas Kirsch) for bug #564.
Canonicalise SMB_INFO_ALLOCATION in the same was as SMB_FS_FULL_SIZE_INFORMATION.
Jeremy.
(This used to be commit 76fe5ffb4d757922651e41c3fa7e8bc411214cc7)
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/trans2.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index ee63220d18..3d53387c9f 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -1407,17 +1407,34 @@ static int call_trans2qfsinfo(connection_struct *conn, char *inbuf, char *outbuf switch (info_level) { case SMB_INFO_ALLOCATION: { - SMB_BIG_UINT dfree,dsize,bsize; + SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector; data_len = 18; SMB_VFS_DISK_FREE(conn,".",False,&bsize,&dfree,&dsize); + block_size = lp_block_size(snum); + if (bsize < block_size) { + SMB_BIG_UINT factor = block_size/bsize; + bsize = block_size; + dsize /= factor; + dfree /= factor; + } + if (bsize > block_size) { + SMB_BIG_UINT factor = bsize/block_size; + bsize = block_size; + dsize *= factor; + dfree *= factor; + } + bytes_per_sector = 512; + sectors_per_unit = bsize/bytes_per_sector; + + DEBUG(5,("call_trans2qfsinfo : SMB_INFO_ALLOCATION id=%x, bsize=%u, cSectorUnit=%u, \ +cBytesSector=%u, cUnitTotal=%u, cUnitAvail=%d\n", (unsigned int)st.st_dev, (unsigned int)bsize, (unsigned int)sectors_per_unit, + (unsigned int)bytes_per_sector, (unsigned int)dsize, (unsigned int)dfree)); + SIVAL(pdata,l1_idFileSystem,st.st_dev); - SIVAL(pdata,l1_cSectorUnit,bsize/512); + SIVAL(pdata,l1_cSectorUnit,sectors_per_unit); SIVAL(pdata,l1_cUnit,dsize); SIVAL(pdata,l1_cUnitAvail,dfree); - SSVAL(pdata,l1_cbSector,512); - DEBUG(5,("call_trans2qfsinfo : bsize=%u, id=%x, cSectorUnit=%u, cUnit=%u, cUnitAvail=%u, cbSector=%d\n", - (unsigned int)bsize, (unsigned int)st.st_dev, ((unsigned int)bsize)/512, (unsigned int)dsize, - (unsigned int)dfree, 512)); + SSVAL(pdata,l1_cbSector,bytes_per_sector); break; } |