[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha3-303-gb09dd6b

Stefan Metzmacher metze at samba.org
Wed May 7 14:19:30 GMT 2008


The branch, v4-0-test has been updated
       via  b09dd6b65d533832a025a51509dcc84f84b048aa (commit)
      from  a9604fe4a323dccb537cf02ea7594437b4995803 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit b09dd6b65d533832a025a51509dcc84f84b048aa
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed May 7 15:46:22 2008 +0200

    pvfs: remove XATTR_ATTRIB_FLAG_STICKY_WRITE_TIME code
    
    I'll fix this more correctly very soon,
    so that we'll pass the BASE-DELAYWRITE test.
    
    metze

-----------------------------------------------------------------------

Summary of changes:
 source/librpc/idl/xattr.idl           |   12 +++++++++---
 source/ntvfs/posix/pvfs_open.c        |   17 -----------------
 source/ntvfs/posix/pvfs_setfileinfo.c |    2 --
 source/ntvfs/posix/pvfs_xattr.c       |   32 +++++++++++++++-----------------
 source/ntvfs/posix/vfs_posix.h        |    3 ---
 5 files changed, 24 insertions(+), 42 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/librpc/idl/xattr.idl b/source/librpc/idl/xattr.idl
index 7e73bae..2010d51 100644
--- a/source/librpc/idl/xattr.idl
+++ b/source/librpc/idl/xattr.idl
@@ -31,8 +31,14 @@ interface xattr
 		NTTIME change_time;
 	} xattr_DosInfo1;
 
-	const int XATTR_ATTRIB_FLAG_STICKY_WRITE_TIME = 0x1;
+/*
+	We use xattrDosInfo1 again when we store values.
+	Because the sticky write time is now stored in the opendb
+	and xattr_DosInfo2Old is only present to parse existing
+	values from disk.
 
+	const int XATTR_ATTRIB_FLAG_STICKY_WRITE_TIME = 0x1;
+*/
 	typedef struct {
 		uint32     flags;
 		uint32     attrib;
@@ -43,11 +49,11 @@ interface xattr
 		NTTIME     change_time;
 		NTTIME     write_time; /* only used when sticky write time is set */
 		utf8string name;
-	} xattr_DosInfo2;
+	} xattr_DosInfo2Old;
 
 	typedef [switch_type(uint16)] union {
 		[case(1)] xattr_DosInfo1 info1;
-		[case(2)] xattr_DosInfo2 info2;
+		[case(2)] xattr_DosInfo2Old oldinfo2;
 	} xattr_DosInfo;
 
 	typedef [public] struct {
diff --git a/source/ntvfs/posix/pvfs_open.c b/source/ntvfs/posix/pvfs_open.c
index 6e77cb7..c9c1c56 100644
--- a/source/ntvfs/posix/pvfs_open.c
+++ b/source/ntvfs/posix/pvfs_open.c
@@ -262,7 +262,6 @@ static NTSTATUS pvfs_open_directory(struct pvfs_state *pvfs,
 	f->handle->position          = 0;
 	f->handle->mode              = 0;
 	f->handle->oplock            = NULL;
-	f->handle->sticky_write_time = false;
 	f->handle->open_completed    = false;
 
 	if ((create_options & NTCREATEX_OPTIONS_DELETE_ON_CLOSE) &&
@@ -416,16 +415,6 @@ cleanup_delete:
 */
 static int pvfs_handle_destructor(struct pvfs_file_handle *h)
 {
-	/* the write time is no longer sticky */
-	if (h->sticky_write_time) {
-		NTSTATUS status;
-		status = pvfs_dosattrib_load(h->pvfs, h->name, h->fd);
-		if (NT_STATUS_IS_OK(status)) {
-			h->name->dos.flags &= ~XATTR_ATTRIB_FLAG_STICKY_WRITE_TIME;
-			pvfs_dosattrib_save(h->pvfs, h->name, h->fd);
-		}
-	}
-	
 	if ((h->create_options & NTCREATEX_OPTIONS_DELETE_ON_CLOSE) &&
 	    h->name->stream_name) {
 		NTSTATUS status;
@@ -707,7 +696,6 @@ static NTSTATUS pvfs_create_file(struct pvfs_state *pvfs,
 	f->handle->mode              = 0;
 	f->handle->oplock            = NULL;
 	f->handle->have_opendb_entry = true;
-	f->handle->sticky_write_time = false;
 	f->handle->open_completed    = false;
 
 	status = odb_open_file(lck, f->handle, name->full_name,
@@ -1257,7 +1245,6 @@ NTSTATUS pvfs_open(struct ntvfs_module_context *ntvfs,
 	f->handle->mode              = 0;
 	f->handle->oplock            = NULL;
 	f->handle->have_opendb_entry = false;
-	f->handle->sticky_write_time = false;
 	f->handle->open_completed    = false;
 
 	/* form the lock context used for byte range locking and
@@ -1479,10 +1466,6 @@ NTSTATUS pvfs_close(struct ntvfs_module_context *ntvfs,
 		unix_times.actime = 0;
 		unix_times.modtime = io->close.in.write_time;
 		utime(f->handle->name->full_name, &unix_times);
-	} else if (f->handle->sticky_write_time) {
-		unix_times.actime = 0;
-		unix_times.modtime = nt_time_to_unix(f->handle->name->dos.write_time);
-		utime(f->handle->name->full_name, &unix_times);
 	}
 
 	talloc_free(f);
diff --git a/source/ntvfs/posix/pvfs_setfileinfo.c b/source/ntvfs/posix/pvfs_setfileinfo.c
index ad47fe9..0beca75 100644
--- a/source/ntvfs/posix/pvfs_setfileinfo.c
+++ b/source/ntvfs/posix/pvfs_setfileinfo.c
@@ -342,8 +342,6 @@ NTSTATUS pvfs_setfileinfo(struct ntvfs_module_context *ntvfs,
 		}
 		if (!null_nttime(info->basic_info.in.write_time)) {
 			newstats.dos.write_time = info->basic_info.in.write_time;
-			newstats.dos.flags |= XATTR_ATTRIB_FLAG_STICKY_WRITE_TIME;
-			h->sticky_write_time = true;
 		}
 		if (!null_nttime(info->basic_info.in.change_time)) {
 			newstats.dos.change_time = info->basic_info.in.change_time;
diff --git a/source/ntvfs/posix/pvfs_xattr.c b/source/ntvfs/posix/pvfs_xattr.c
index 3043b80..3cbbcbe 100644
--- a/source/ntvfs/posix/pvfs_xattr.c
+++ b/source/ntvfs/posix/pvfs_xattr.c
@@ -162,7 +162,7 @@ NTSTATUS pvfs_dosattrib_load(struct pvfs_state *pvfs, struct pvfs_filename *name
 	struct xattr_DosAttrib attrib;
 	TALLOC_CTX *mem_ctx = talloc_new(name);
 	struct xattr_DosInfo1 *info1;
-	struct xattr_DosInfo2 *info2;
+	struct xattr_DosInfo2Old *info2;
 
 	if (name->stream_name != NULL) {
 		name->stream_exists = false;
@@ -210,7 +210,11 @@ NTSTATUS pvfs_dosattrib_load(struct pvfs_state *pvfs, struct pvfs_filename *name
 		break;
 
 	case 2:
-		info2 = &attrib.info.info2;
+		/*
+		 * Note: This is only used to parse existing values from disk
+		 *       We use xattr_DosInfo1 again for storing new values
+		 */
+		info2 = &attrib.info.oldinfo2;
 		name->dos.attrib = pvfs_attrib_normalise(info2->attrib, 
 							 name->st.st_mode);
 		name->dos.ea_size = info2->ea_size;
@@ -225,9 +229,6 @@ NTSTATUS pvfs_dosattrib_load(struct pvfs_state *pvfs, struct pvfs_filename *name
 			name->dos.change_time = info2->change_time;
 		}
 		name->dos.flags = info2->flags;
-		if (name->dos.flags & XATTR_ATTRIB_FLAG_STICKY_WRITE_TIME) {
-			name->dos.write_time = info2->write_time;
-		}
 		break;
 
 	default:
@@ -250,26 +251,23 @@ NTSTATUS pvfs_dosattrib_load(struct pvfs_state *pvfs, struct pvfs_filename *name
 NTSTATUS pvfs_dosattrib_save(struct pvfs_state *pvfs, struct pvfs_filename *name, int fd)
 {
 	struct xattr_DosAttrib attrib;
-	struct xattr_DosInfo2 *info2;
+	struct xattr_DosInfo1 *info1;
 
 	if (!(pvfs->flags & PVFS_FLAG_XATTR_ENABLE)) {
 		return NT_STATUS_OK;
 	}
 
-	attrib.version = 2;
-	info2 = &attrib.info.info2;
+	attrib.version = 1;
+	info1 = &attrib.info.info1;
 
 	name->dos.attrib = pvfs_attrib_normalise(name->dos.attrib, name->st.st_mode);
 
-	info2->attrib      = name->dos.attrib;
-	info2->ea_size     = name->dos.ea_size;
-	info2->size        = name->st.st_size;
-	info2->alloc_size  = name->dos.alloc_size;
-	info2->create_time = name->dos.create_time;
-	info2->change_time = name->dos.change_time;
-	info2->write_time  = name->dos.write_time;
-	info2->flags       = name->dos.flags;
-	info2->name        = "";
+	info1->attrib      = name->dos.attrib;
+	info1->ea_size     = name->dos.ea_size;
+	info1->size        = name->st.st_size;
+	info1->alloc_size  = name->dos.alloc_size;
+	info1->create_time = name->dos.create_time;
+	info1->change_time = name->dos.change_time;
 
 	return pvfs_xattr_ndr_save(pvfs, name->full_name, fd, 
 				   XATTR_DOSATTRIB_NAME, &attrib, 
diff --git a/source/ntvfs/posix/vfs_posix.h b/source/ntvfs/posix/vfs_posix.h
index 4414241..c194698 100644
--- a/source/ntvfs/posix/vfs_posix.h
+++ b/source/ntvfs/posix/vfs_posix.h
@@ -169,9 +169,6 @@ struct pvfs_file_handle {
 	/* we need this hook back to our parent for lock destruction */
 	struct pvfs_state *pvfs;
 
-	/* have we set a sticky write time that we should remove on close */
-	bool sticky_write_time;
-
 	/* the open went through to completion */
 	bool open_completed;
 };


-- 
Samba Shared Repository


More information about the samba-cvs mailing list