diff options
author | Jeremy Allison <jra@samba.org> | 2000-10-19 02:58:24 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2000-10-19 02:58:24 +0000 |
commit | abf055046fe70842badc2a1904f2cd6966bafbf4 (patch) | |
tree | b2a91ee1ae46bafba86d4791cd25f1efed62895f /source3/include | |
parent | 7b0a62c8cd9523df86f1d9aee3e3700f494a8e78 (diff) | |
download | samba-abf055046fe70842badc2a1904f2cd6966bafbf4.tar.gz samba-abf055046fe70842badc2a1904f2cd6966bafbf4.tar.bz2 samba-abf055046fe70842badc2a1904f2cd6966bafbf4.zip |
Ok - this is a big patch - and it may break smbd a bit (although
I hope not). If you encounter strange file-serving behavior after this
patch then back it out. I analysed our stat() usage and realised we
were doing approx. 3 stat calls per open, and 2 per getattr/setattr.
This patch should fix all that. It causes the stat struct returned
from unix_convert() (which now *must* be passed a valid SMB_STRUCT_STAT
pointer) to be passed through into the open code. This should prevent
the multiple stats that were being done so as not to violate layer
encapsulation in the API's.
Herb - if you could run a NetBench test with this code and do a
padc/par syscall test and also run with the current 2.2.0 code
and test the padc/par syscalls I'd appreciate it - you should
find the number of stat calls reduced - not sure by how much.
The patch depends on unix_convert() actually finding the file
and returning a stat struct, or returning a zero'd out stat
struct if the file didn't exist. I believe we can guarentee this
to be the case - I just wasn't confident enough to make this
an assertion before.
Ok ok - I did write this whilst at the Miami conference.....
sometimes you get a little free time at these things :-).
Jeremy.
(This used to be commit 66a5c05ec46b641224fbe01b30bd7e83571a2a1b)
Diffstat (limited to 'source3/include')
-rw-r--r-- | source3/include/proto.h | 12 | ||||
-rw-r--r-- | source3/include/smb_macros.h | 4 |
2 files changed, 8 insertions, 8 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index f52bff2ce0..89ee6cbdc3 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -3608,12 +3608,12 @@ int reply_nttrans(connection_struct *conn, #if OLD_NTDOMAIN int fd_close(struct connection_struct *conn, files_struct *fsp); -files_struct *open_file_shared(connection_struct *conn,char *fname,int share_mode,int ofun, - mode_t mode,int oplock_request, int *Access,int *action); -files_struct *open_file_stat(connection_struct *conn, - char *fname, int smb_ofun, SMB_STRUCT_STAT *pst, int *action); -files_struct *open_directory(connection_struct *conn, - char *fname, int smb_ofun, mode_t unixmode, int *action); +files_struct *open_file_shared(connection_struct *conn,char *fname, SMB_STRUCT_STAT *psbuf, + int share_mode,int ofun, mode_t mode,int oplock_request, int *Access,int *action); +files_struct *open_file_stat(connection_struct *conn, char *fname, + SMB_STRUCT_STAT *psbuf, int smb_ofun, int *action); +files_struct *open_directory(connection_struct *conn, char *fname, + SMB_STRUCT_STAT *psbuf, int smb_ofun, mode_t unixmode, int *action); BOOL check_file_sharing(connection_struct *conn,char *fname, BOOL rename_op); #endif diff --git a/source3/include/smb_macros.h b/source3/include/smb_macros.h index a65b7048e9..2e74d7e69f 100644 --- a/source3/include/smb_macros.h +++ b/source3/include/smb_macros.h @@ -104,8 +104,8 @@ * stat structure is valid. */ -#define VALID_STAT(st) (st.st_nlink != 0) -#define VALID_STAT_OF_DIR(st) (VALID_STAT(st) && S_ISDIR(st.st_mode)) +#define VALID_STAT(st) ((st).st_nlink != 0) +#define VALID_STAT_OF_DIR(st) (VALID_STAT(st) && S_ISDIR((st).st_mode)) #define SMBENCRYPT() (lp_encrypted_passwords()) |