]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: move files_struct.update_write_time_on_close to a bitfield
authorRalph Boehme <slow@samba.org>
Thu, 2 Apr 2020 13:37:15 +0000 (15:37 +0200)
committerJeremy Allison <jra@samba.org>
Fri, 3 Apr 2020 19:05:43 +0000 (19:05 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/include/vfs.h
source3/smbd/close.c
source3/smbd/durable.c
source3/smbd/fileio.c
source3/smbd/trans2.c

index ea1d959d037168eca9f8038ee2f01058ab75fa1f..502218096a913b351892241da6290ba37563e907 100644 (file)
@@ -360,10 +360,10 @@ typedef struct files_struct {
        struct {
                bool kernel_share_modes_taken : 1;
                bool update_write_time_triggered : 1;
+               bool update_write_time_on_close : 1;
        } fsp_flags;
 
        struct tevent_timer *update_write_time_event;
-       bool update_write_time_on_close;
        struct timespec close_write_time;
        bool write_time_forced;
 
index 86412dc2bca96792a2665e0ea1120d48ca97685f..2f092b56ed0123d984f5605d2fe766df3c61ea5a 100644 (file)
@@ -321,7 +321,7 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
                        fsp_str_dbg(fsp)));
                ts = nt_time_to_full_timespec(lck->data->changed_write_time);
                set_close_write_time(fsp, ts);
-       } else if (fsp->update_write_time_on_close) {
+       } else if (fsp->fsp_flags.update_write_time_on_close) {
                /* Someone had a pending write. */
                if (is_omit_timespec(&fsp->close_write_time)) {
                        DEBUG(10,("close_remove_share_mode: update to current time "
@@ -383,7 +383,7 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
        /*
         * Don't try to update the write time when we delete the file
         */
-       fsp->update_write_time_on_close = false;
+       fsp->fsp_flags.update_write_time_on_close = false;
 
        got_tokens = get_delete_on_close_token(lck, fsp->name_hash,
                                        &del_nt_token, &del_token);
@@ -556,7 +556,7 @@ void set_close_write_time(struct files_struct *fsp, struct timespec ts)
                return;
        }
        fsp->write_time_forced = false;
-       fsp->update_write_time_on_close = true;
+       fsp->fsp_flags.update_write_time_on_close = true;
        fsp->close_write_time = ts;
 }
 
@@ -568,7 +568,7 @@ static NTSTATUS update_write_time_on_close(struct files_struct *fsp)
 
        init_smb_file_time(&ft);
 
-       if (!fsp->update_write_time_on_close) {
+       if (!(fsp->fsp_flags.update_write_time_on_close)) {
                return NT_STATUS_OK;
        }
 
index 79cfbe29d290f9a14994e6c3fa8eb1784c9d2100..3593f5e7edef51afd2c5e01858443a70f93ae6bb 100644 (file)
@@ -103,7 +103,8 @@ NTSTATUS vfs_default_durable_cookie(struct files_struct *fsp,
        cookie.position_information = fsp->fh->position_information;
        cookie.update_write_time_triggered =
                fsp->fsp_flags.update_write_time_triggered;
-       cookie.update_write_time_on_close = fsp->update_write_time_on_close;
+       cookie.update_write_time_on_close =
+               fsp->fsp_flags.update_write_time_on_close;
        cookie.write_time_forced = fsp->write_time_forced;
        cookie.close_write_time = full_timespec_to_nt_time(
                &fsp->close_write_time);
@@ -212,7 +213,7 @@ NTSTATUS vfs_default_durable_disconnect(struct files_struct *fsp,
                if (fsp->write_time_forced) {
                        ft.mtime = nt_time_to_full_timespec(
                                lck->data->changed_write_time);
-               } else if (fsp->update_write_time_on_close) {
+               } else if (fsp->fsp_flags.update_write_time_on_close) {
                        if (is_omit_timespec(&fsp->close_write_time)) {
                                ft.mtime = timespec_current();
                        } else {
@@ -255,7 +256,8 @@ NTSTATUS vfs_default_durable_disconnect(struct files_struct *fsp,
        cookie.position_information = fsp->fh->position_information;
        cookie.update_write_time_triggered =
                fsp->fsp_flags.update_write_time_triggered;
-       cookie.update_write_time_on_close = fsp->update_write_time_on_close;
+       cookie.update_write_time_on_close =
+               fsp->fsp_flags.update_write_time_on_close;
        cookie.write_time_forced = fsp->write_time_forced;
        cookie.close_write_time = full_timespec_to_nt_time(
                &fsp->close_write_time);
@@ -752,7 +754,8 @@ NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
        fsp->fh->position_information = cookie.position_information;
        fsp->fsp_flags.update_write_time_triggered =
                cookie.update_write_time_triggered;
-       fsp->update_write_time_on_close = cookie.update_write_time_on_close;
+       fsp->fsp_flags.update_write_time_on_close =
+               cookie.update_write_time_on_close;
        fsp->write_time_forced = cookie.write_time_forced;
        fsp->close_write_time = nt_time_to_full_timespec(
                cookie.close_write_time);
index c8e31494b65fcb8b512cd0f5e6da86b2c3938460..42431f0ba07a6ccc4897bd1a1c566ebe6a29c045 100644 (file)
@@ -142,7 +142,7 @@ void trigger_write_time_update(struct files_struct *fsp)
        /* We need to remember someone did a write
         * and update to current time on close. */
 
-       fsp->update_write_time_on_close = true;
+       fsp->fsp_flags.update_write_time_on_close = true;
 
        if (fsp->fsp_flags.update_write_time_triggered) {
                /*
@@ -193,7 +193,7 @@ void trigger_write_time_update_immediate(struct files_struct *fsp)
 
        /* After an immediate update, reset the trigger. */
        fsp->fsp_flags.update_write_time_triggered = true;
-        fsp->update_write_time_on_close = false;
+        fsp->fsp_flags.update_write_time_on_close = false;
 
        ft.mtime = timespec_current();
 
index ddeb4c6b04c763f7cc25e2805415042db938263b..8a33533ced46d1a2037579ed3f5466e4de7e50ad 100644 (file)
@@ -8351,7 +8351,7 @@ static NTSTATUS smb_set_file_unix_basic(connection_struct *conn,
                 * We're setting the time explicitly for UNIX.
                 * Cancel any pending changes over all handles.
                 */
-               all_fsps->update_write_time_on_close = false;
+               all_fsps->fsp_flags.update_write_time_on_close = false;
                TALLOC_FREE(all_fsps->update_write_time_event);
        }