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 <[EMAIL PROTECTED]>
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

Reply via email to