diff options
author | Volker Lendecke <vlendec@samba.org> | 2007-01-17 16:23:45 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:17:13 -0500 |
commit | 940192ddcc9d23e3bec806b4419d5845eeac0fd0 (patch) | |
tree | 60d01078e1fd8f017e5245179d99a7b1bc8b6a12 /source3/smbd/files.c | |
parent | b385a40f592ae7e9962f4034e9cbe66352681e2c (diff) | |
download | samba-940192ddcc9d23e3bec806b4419d5845eeac0fd0.tar.gz samba-940192ddcc9d23e3bec806b4419d5845eeac0fd0.tar.bz2 samba-940192ddcc9d23e3bec806b4419d5845eeac0fd0.zip |
r20854: Ok, now I think we're at a point where looking at notify starts to make sense
again :-)
Volker
(This used to be commit 5533cdeec1b0cdee39b1d89e2320587dc9281ee6)
Diffstat (limited to 'source3/smbd/files.c')
-rw-r--r-- | source3/smbd/files.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/source3/smbd/files.c b/source3/smbd/files.c index 7069818dee..982de4c55f 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -361,6 +361,50 @@ files_struct *file_find_di_next(files_struct *start_fsp) return NULL; } +/* + * Same as file_find_di_first/next, but also finds non-fd opens. + * + * Jeremy, do we really need the fsp->fh->fd != -1 ?? + */ + +struct files_struct *fsp_find_di_first(SMB_DEV_T dev, SMB_INO_T inode) +{ + files_struct *fsp; + + if (fsp_fi_cache.dev == dev && fsp_fi_cache.inode == inode) { + /* Positive or negative cache hit. */ + return fsp_fi_cache.fsp; + } + + fsp_fi_cache.dev = dev; + fsp_fi_cache.inode = inode; + + for (fsp=Files;fsp;fsp=fsp->next) { + if ((fsp->dev == dev) && (fsp->inode == inode)) { + /* Setup positive cache. */ + fsp_fi_cache.fsp = fsp; + return fsp; + } + } + + /* Setup negative cache. */ + fsp_fi_cache.fsp = NULL; + return NULL; +} + +struct files_struct *fsp_find_di_next(files_struct *start_fsp) +{ + files_struct *fsp; + + for (fsp = start_fsp->next;fsp;fsp=fsp->next) { + if ( (fsp->dev == start_fsp->dev) + && (fsp->inode == start_fsp->inode) ) + return fsp; + } + + return NULL; +} + /**************************************************************************** Find a fsp that is open for printing. ****************************************************************************/ @@ -439,6 +483,8 @@ void file_free(files_struct *fsp) fsp->fh->ref_count--; } + TALLOC_FREE(fsp->notify); + bitmap_clear(file_bmap, fsp->fnum - FILE_HANDLE_OFFSET); files_used--; |