NEEDED??? s3:vfs: change update_write_time_triggered to update_write_time_at
authorStefan Metzmacher <metze@samba.org>
Fri, 19 Oct 2012 08:21:33 +0000 (10:21 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 16 Jan 2018 06:47:03 +0000 (07:47 +0100)
We should remember the time when will or have updated the write time.

metze

source3/include/vfs.h
source3/smbd/fileio.c

index bb4a135e41e2cda82588a7722df62e40e1a6a425..511aa22444fb262bf89dfd08ed3333bbd1efdd4e 100644 (file)
@@ -314,8 +314,9 @@ typedef struct files_struct {
 
        bool kernel_share_modes_taken;
 
-       bool update_write_time_triggered;
-       struct tevent_timer *update_write_time_event;
+
+       struct timeval update_write_time_at;
+       struct timed_event *update_write_time_event;
        bool update_write_time_on_close;
        struct timespec close_write_time;
        bool write_time_forced;
index ec6333eaa10b0d336eeb947fb6404318bb7138d8..8ef36a553fbd39ec9f0cb6bc8801c22f1956f29b 100644 (file)
@@ -210,7 +210,7 @@ void trigger_write_time_update(struct files_struct *fsp)
 
        fsp->update_write_time_on_close = true;
 
-       if (fsp->update_write_time_triggered) {
+       if (!timeval_is_zero(fsp->update_write_time_at)) {
                /*
                 * We only update the write time after 2 seconds
                 * on the first normal write. After that
@@ -218,11 +218,10 @@ void trigger_write_time_update(struct files_struct *fsp)
                 */
                return;
        }
-       fsp->update_write_time_triggered = true;
-
        delay = lp_parm_int(SNUM(fsp->conn),
                            "smbd", "writetimeupdatedelay",
                            WRITE_TIME_UPDATE_USEC_DELAY);
+       fsp->update_write_time_at = timeval_current_ofs_usec(delay),
 
        DEBUG(5, ("Update write time %d usec later on %s\n",
                  delay, fsp_str_dbg(fsp)));
@@ -230,7 +229,7 @@ void trigger_write_time_update(struct files_struct *fsp)
        /* trigger the update 2 seconds later */
        fsp->update_write_time_event =
                tevent_add_timer(fsp->conn->sconn->ev_ctx, NULL,
-                                timeval_current_ofs_usec(delay),
+                                fsp->update_write_time_at,
                                 update_write_time_handler, fsp);
 }
 
@@ -255,13 +254,13 @@ void trigger_write_time_update_immediate(struct files_struct *fsp)
        DEBUG(5, ("Update write time immediate on %s\n",
                  fsp_str_dbg(fsp)));
 
-       /* After an immediate update, reset the trigger. */
-       fsp->update_write_time_triggered = true;
-        fsp->update_write_time_on_close = false;
-
        ZERO_STRUCT(ft);
        ft.mtime = timespec_current();
 
+       /* After an immediate update, reset the trigger. */
+       fsp->update_write_time_at = convert_timespec_to_timeval(ft.mtime);
+       fsp->update_write_time_on_close = false;
+
        /* Update the time in the open file db. */
        (void)set_write_time(fsp->file_id, ft.mtime);