summaryrefslogtreecommitdiff
path: root/source3/smbd/files.c
diff options
context:
space:
mode:
authorVolker Lendecke <vlendec@samba.org>2007-01-17 16:23:45 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:17:13 -0500
commit940192ddcc9d23e3bec806b4419d5845eeac0fd0 (patch)
tree60d01078e1fd8f017e5245179d99a7b1bc8b6a12 /source3/smbd/files.c
parentb385a40f592ae7e9962f4034e9cbe66352681e2c (diff)
downloadsamba-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.c46
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--;