From 0551284dc08eb93ef7b2b2227a45e5ec21d482fb Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 5 Nov 2009 17:40:01 -0800 Subject: Simplify the logic - remove extraneous argument and calls to set_close_write_time(). We were treating a file time set on close as a sticky write time set, and I don't think it is. I will add a torture test later to RAW-CLOSE to confirm this. Jeremy. --- source3/smbd/close.c | 34 +++++++--------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) (limited to 'source3/smbd/close.c') diff --git a/source3/smbd/close.c b/source3/smbd/close.c index 0f1bd90dde..3de93b15f2 100644 --- a/source3/smbd/close.c +++ b/source3/smbd/close.c @@ -294,16 +294,7 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp, DEBUG(10,("close_remove_share_mode: write time forced " "for file %s\n", fsp_str_dbg(fsp))); - set_close_write_time(lck, fsp, lck->changed_write_time); - } else if (fsp->update_write_time_on_close) { - DEBUG(10,("close_remove_share_mode: update_write_time_on_close " - "set for file %s\n", - fsp_str_dbg(fsp))); - if (null_timespec(fsp->close_write_time)) { - set_close_write_time(lck, fsp, timespec_current()); - } else { - set_close_write_time(lck, fsp, fsp->close_write_time); - } + set_close_write_time(fsp, lck->changed_write_time); } if (!del_share_mode(lck, fsp)) { @@ -480,30 +471,15 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp, return status; } -void set_close_write_time(struct share_mode_lock *lck, - struct files_struct *fsp, struct timespec ts) +void set_close_write_time(struct files_struct *fsp, struct timespec ts) { DEBUG(6,("close_write_time: %s" , time_to_asc(convert_timespec_to_time_t(ts)))); if (null_timespec(ts)) { return; } - /* - * if the write time on close is explict set, then don't - * need to fix it up to the value in the locking db - */ - fsp->write_time_forced = false; - fsp->update_write_time_on_close = true; fsp->close_write_time = ts; - - /* On close if we're changing the real file time we - * must update it in the open file db too. */ - (void)set_write_time(fsp->file_id, ts); - /* If someone has a sticky write time then update it as well. */ - if (lck && !null_timespec(lck->changed_write_time)) { - (void)set_sticky_write_time(fsp->file_id, ts); - } } static NTSTATUS update_write_time_on_close(struct files_struct *fsp) @@ -532,8 +508,12 @@ static NTSTATUS update_write_time_on_close(struct files_struct *fsp) return NT_STATUS_OK; } + /* On close if we're changing the real file time we + * must update it in the open file db too. */ + (void)set_write_time(fsp->file_id, fsp->close_write_time); + ft.mtime = fsp->close_write_time; - status = smb_set_file_time(fsp->conn, fsp, fsp->fsp_name, &ft, true); + status = smb_set_file_time(fsp->conn, fsp, fsp->fsp_name, &ft, false); if (!NT_STATUS_IS_OK(status)) { return status; } -- cgit