s3:smbd: keep 'num_files' and 'files' directly under smbd_server_connection
authorStefan Metzmacher <metze@samba.org>
Sat, 3 Mar 2012 04:44:16 +0000 (05:44 +0100)
committerStefan Metzmacher <metze@samba.org>
Tue, 6 Mar 2012 22:04:01 +0000 (23:04 +0100)
The plan is to have files_struct as some kind of low level
abstraction for a smb1/smb2 opens, that can be used by SMB_VFS modules.

metze

Autobuild-User: Stefan Metzmacher <metze@samba.org>
Autobuild-Date: Tue Mar  6 23:04:01 CET 2012 on sn-devel-104

source3/smbd/files.c
source3/smbd/globals.h

index 4a8967e9649203ecc2c9812d848dd19074ac4f7f..10a0b8169d09eb0cb1b45d30e69ddec70cf10f1d 100644 (file)
@@ -105,7 +105,6 @@ NTSTATUS file_new(struct smb_request *req, connection_struct *conn,
        sconn->first_file = (i+1) % (sconn->real_max_open_files);
 
        bitmap_set(sconn->file_bmap, i);
-       sconn->files_used += 1;
 
        fsp->fnum = i + FILE_HANDLE_OFFSET;
        SMB_ASSERT(fsp->fnum < 65536);
@@ -123,9 +122,10 @@ NTSTATUS file_new(struct smb_request *req, connection_struct *conn,
        }
 
        DLIST_ADD(sconn->files, fsp);
+       sconn->num_files += 1;
 
-       DEBUG(5,("allocated file structure %d, fnum = %d (%d used)\n",
-                i, fsp->fnum, sconn->files_used));
+       DEBUG(5,("allocated file structure %d, fnum = %d (%u used)\n",
+                i, fsp->fnum, (unsigned int)sconn->num_files));
 
        if (req != NULL) {
                req->chain_fsp = fsp;
@@ -435,6 +435,8 @@ void file_free(struct smb_request *req, files_struct *fsp)
        struct smbd_server_connection *sconn = fsp->conn->sconn;
 
        DLIST_REMOVE(sconn->files, fsp);
+       SMB_ASSERT(sconn->num_files > 0);
+       sconn->num_files--;
 
        TALLOC_FREE(fsp->fake_file_handle);
 
@@ -460,10 +462,8 @@ void file_free(struct smb_request *req, files_struct *fsp)
        TALLOC_FREE(fsp->update_write_time_event);
 
        bitmap_clear(sconn->file_bmap, fsp->fnum - FILE_HANDLE_OFFSET);
-       sconn->files_used--;
-
-       DEBUG(5,("freed files structure %d (%d used)\n",
-                fsp->fnum, sconn->files_used));
+       DEBUG(5,("freed files structure %d (%u used)\n",
+                fsp->fnum, (unsigned int)sconn->num_files));
 
        fsp->conn->num_files_open--;
 
index a47879fb0e57c3a80c7169d81251eaa4d741cdce..bfa649b98bc877aa1f3a6e0a472d047311a39668 100644 (file)
@@ -458,10 +458,11 @@ struct smbd_server_connection {
        size_t num_connections;
        struct connection_struct *connections;
 
+       size_t num_files;
        struct files_struct *files;
+
        struct bitmap *file_bmap;
        int real_max_open_files;
-       int files_used;
        struct fsp_singleton_cache fsp_fi_cache;
        unsigned long file_gen_counter;
        int first_file;