S3: Add in profile counters for new vfs and syscall entries.
authortodd stecher <todd.stecher@gmail.com>
Mon, 23 Feb 2009 18:24:33 +0000 (10:24 -0800)
committerSteven Danneman <steven.danneman@isilon.com>
Tue, 24 Feb 2009 23:53:01 +0000 (15:53 -0800)
source3/include/smbprofile.h
source3/modules/onefs_acl.c
source3/modules/onefs_cbrl.c
source3/modules/onefs_streams.c
source3/modules/onefs_system.c
source3/profile/profile.c

index 131416b68520258e0525bffe5e8252f3aaae2d56..f9a0436546fa52355b43b427d529cec215114750 100644 (file)
@@ -75,6 +75,10 @@ enum profile_stats_values
 #define syscall_open_count __profile_stats_value(PR_VALUE_SYSCALL_OPEN, count)
 #define syscall_open_time __profile_stats_value(PR_VALUE_SYSCALL_OPEN, time)
 
+       PR_VALUE_SYSCALL_CREATEFILE,
+#define syscall_createfile_count __profile_stats_value(PR_VALUE_SYSCALL_CREATEFILE, count)
+#define syscall_createfile_time __profile_stats_value(PR_VALUE_SYSCALL_CREATEFILE, time)
+
        PR_VALUE_SYSCALL_CLOSE,
 #define syscall_close_count __profile_stats_value(PR_VALUE_SYSCALL_CLOSE, count)
 #define syscall_close_time __profile_stats_value(PR_VALUE_SYSCALL_CLOSE, time)
@@ -111,6 +115,10 @@ enum profile_stats_values
 #define syscall_rename_count __profile_stats_value(PR_VALUE_SYSCALL_RENAME, count)
 #define syscall_rename_time __profile_stats_value(PR_VALUE_SYSCALL_RENAME, time)
 
+       PR_VALUE_SYSCALL_RENAME_AT,
+#define syscall_rename_at_count __profile_stats_value(PR_VALUE_SYSCALL_RENAME_AT, count)
+#define syscall_rename_at_time __profile_stats_value(PR_VALUE_SYSCALL_RENAME_AT, time)
+
        PR_VALUE_SYSCALL_FSYNC,
 #define syscall_fsync_count __profile_stats_value(PR_VALUE_SYSCALL_FSYNC, count)
 #define syscall_fsync_time __profile_stats_value(PR_VALUE_SYSCALL_FSYNC, time)
@@ -215,6 +223,26 @@ enum profile_stats_values
 #define syscall_set_quota_count __profile_stats_value(PR_VALUE_SYSCALL_SET_QUOTA, count)
 #define syscall_set_quota_time __profile_stats_value(PR_VALUE_SYSCALL_SET_QUOTA, time)
 
+       PR_VALUE_SYSCALL_GET_SD,
+#define syscall_get_sd_count __profile_stats_value(PR_VALUE_SYSCALL_GET_SD, count)
+#define syscall_get_sd_time __profile_stats_value(PR_VALUE_SYSCALL_GET_SD, time)
+
+       PR_VALUE_SYSCALL_SET_SD,
+#define syscall_set_sd_count __profile_stats_value(PR_VALUE_SYSCALL_SET_SD, count)
+#define syscall_set_sd_time __profile_stats_value(PR_VALUE_SYSCALL_SET_SD, time)
+
+       PR_VALUE_SYSCALL_BRL_LOCK,
+#define syscall_brl_lock_count __profile_stats_value(PR_VALUE_SYSCALL_BRL_LOCK, count)
+#define syscall_brl_lock_time __profile_stats_value(PR_VALUE_SYSCALL_BRL_LOCK, time)
+
+       PR_VALUE_SYSCALL_BRL_UNLOCK,
+#define syscall_brl_unlock_count __profile_stats_value(PR_VALUE_SYSCALL_BRL_UNLOCK, count)
+#define syscall_brl_unlock_time __profile_stats_value(PR_VALUE_SYSCALL_BRL_UNLOCK, time)
+
+       PR_VALUE_SYSCALL_BRL_CANCEL,
+#define syscall_brl_cancel_count __profile_stats_value(PR_VALUE_SYSCALL_BRL_CANCEL, count)
+#define syscall_brl_cancel_time __profile_stats_value(PR_VALUE_SYSCALL_BRL_CANCEL, time)
+
 /* counters for individual SMB types */
        PR_VALUE_SMBMKDIR,
 #define SMBmkdir_count __profile_stats_value(PR_VALUE_SMBMKDIR, count)
index 7bc4a1728f1d6e8282e26356e1fc0f43d2bfb71e..b463722e61f47b7d7d707381313767d667b3a612 100644 (file)
@@ -614,6 +614,8 @@ onefs_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
        bool fopened = false;
        NTSTATUS status = NT_STATUS_OK;
 
+       START_PROFILE(syscall_get_sd);
+
        *ppdesc = NULL;
 
        DEBUG(5, ("Getting sd for file %s. security_info=%u\n",
@@ -753,6 +755,9 @@ onefs_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
        DEBUG(5, ("Finished retrieving/canonicalizing SD!\n"));
        /* FALLTHROUGH */
 out:
+
+       END_PROFILE(syscall_get_sd);
+
        if (alloced && sd) {
                if (new_aces_alloced && sd->dacl->aces)
                        SAFE_FREE(sd->dacl->aces);
@@ -892,6 +897,8 @@ onefs_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
        bool fopened = false;
        NTSTATUS status;
 
+       START_PROFILE(syscall_set_sd);
+
        DEBUG(5,("Setting SD on file %s.\n", fsp->fsp_name ));
 
        status = onefs_samba_sd_to_sd(security_info_sent, psd, &sd,
@@ -899,7 +906,7 @@ onefs_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(3, ("SD initialization failure: %s", nt_errstr(status)));
-               return status;
+               goto out;
        }
 
        fd = fsp->fh->fd;
@@ -938,6 +945,8 @@ onefs_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 
        /* FALLTHROUGH */
 out:
+       END_PROFILE(syscall_set_sd);
+
        if (fopened)
                close(fd);
 
index a860023764257686fbd78c5ad6eb5380c1e011d1..2c5e39c3596192ce63411c4ef9427fa92cded60a 100644 (file)
@@ -255,6 +255,8 @@ NTSTATUS onefs_brl_lock_windows(vfs_handle_struct *handle,
        struct onefs_cbrl_blr_state *bs;
        NTSTATUS status;
 
+       START_PROFILE(syscall_brl_lock);
+
        SMB_ASSERT(plock->lock_flav == WINDOWS_LOCK);
        SMB_ASSERT(plock->lock_type != UNLOCK_LOCK);
 
@@ -301,10 +303,13 @@ NTSTATUS onefs_brl_lock_windows(vfs_handle_struct *handle,
                /* ASYNC still in progress: The process_* calls will keep
                 * calling even if we haven't gotten the lock. Keep erroring
                 * without calling ifs_cbrl, or getting/setting an id. */
-               if (bs->state == ONEFS_CBRL_ASYNC)
+               if (bs->state == ONEFS_CBRL_ASYNC) {
                        goto failure;
-               else if (bs->state == ONEFS_CBRL_ERROR)
+               }
+               else if (bs->state == ONEFS_CBRL_ERROR) {
+                       END_PROFILE(syscall_brl_lock);
                        return NT_STATUS_NO_MEMORY;
+               }
 
                SMB_ASSERT(bs->state == ONEFS_CBRL_NONE);
                async = true;
@@ -343,6 +348,9 @@ NTSTATUS onefs_brl_lock_windows(vfs_handle_struct *handle,
        }
 
 failure:
+
+       END_PROFILE(syscall_brl_lock);
+
        /* Failure - error or async. */
        plock->context.smbpid = (uint32) ONEFS_BLOCKING_PID;
 
@@ -355,6 +363,9 @@ failure:
        return status;
 
 success:
+
+       END_PROFILE(syscall_brl_lock);
+
        /* Success. */
        onefs_cbrl_enumerate_blq("onefs_brl_unlock_windows");
        DEBUG(10, ("returning NT_STATUS_OK.\n"));
@@ -371,6 +382,8 @@ bool onefs_brl_unlock_windows(vfs_handle_struct *handle,
        int error;
        int fd = br_lck->fsp->fh->fd;
 
+       START_PROFILE(syscall_brl_unlock);
+
        SMB_ASSERT(plock->lock_flav == WINDOWS_LOCK);
        SMB_ASSERT(plock->lock_type == UNLOCK_LOCK);
 
@@ -378,6 +391,9 @@ bool onefs_brl_unlock_windows(vfs_handle_struct *handle,
        error = ifs_cbrl(fd, CBRL_OP_UNLOCK, CBRL_NOTYPE,
            plock->start, plock->size, CBRL_NOTYPE, 0, plock->context.smbpid,
            plock->context.tid, plock->fnum);
+
+       END_PROFILE(syscall_brl_unlock);
+
        if (error) {
                DEBUG(10, ("returning false.\n"));
                return false;
@@ -404,6 +420,8 @@ bool onefs_brl_cancel_windows(vfs_handle_struct *handle,
        int fd = br_lck->fsp->fh->fd;
        struct onefs_cbrl_blr_state *bs;
 
+       START_PROFILE(syscall_brl_cancel);
+
        SMB_ASSERT(plock);
        SMB_ASSERT(plock->lock_flav == WINDOWS_LOCK);
        SMB_ASSERT(blr);
@@ -416,6 +434,7 @@ bool onefs_brl_cancel_windows(vfs_handle_struct *handle,
        if (bs->state == ONEFS_CBRL_DONE) {
                /* No-op. */
                DEBUG(10, ("State=DONE, returning true\n"));
+               END_PROFILE(syscall_brl_cancel);
                return true;
        }
 
@@ -427,6 +446,9 @@ bool onefs_brl_cancel_windows(vfs_handle_struct *handle,
        error = ifs_cbrl(fd, CBRL_OP_CANCEL, CBRL_NOTYPE, plock->start,
            plock->size, CBRL_NOTYPE, bs->id, plock->context.smbpid,
            plock->context.tid, plock->fnum);
+
+       END_PROFILE(syscall_brl_cancel);
+
        if (error) {
                DEBUG(10, ("returning false\n"));
                bs->state = ONEFS_CBRL_ERROR;
index 9616ca48d568395855612015b5c074840335d45e..2dcd8891eb082a00aea275fa71273d369afe3bdb 100644 (file)
@@ -160,18 +160,26 @@ int onefs_rename(vfs_handle_struct *handle, const char *oldname,
        char *nbase = NULL;
        char *nsname = NULL;
 
+       START_PROFILE(syscall_rename_at);
+
        frame = talloc_stackframe();
 
        ret = onefs_is_stream(oldname, &obase, &osname, &old_is_stream);
-       if (ret)
+       if (ret) {
+               END_PROFILE(syscall_rename_at);
                return ret;
+       }
 
        ret = onefs_is_stream(newname, &nbase, &nsname, &new_is_stream);
-       if (ret)
+       if (ret) {
+               END_PROFILE(syscall_rename_at);
                return ret;
+       }
 
        if (!old_is_stream && !new_is_stream) {
-               return SMB_VFS_NEXT_RENAME(handle, oldname, newname);
+               ret = SMB_VFS_NEXT_RENAME(handle, oldname, newname);
+               END_PROFILE(syscall_rename_at);
+               return ret;
        }
 
        dir_fd = get_stream_dir_fd(handle->conn, obase, NULL);
@@ -192,6 +200,8 @@ int onefs_rename(vfs_handle_struct *handle, const char *oldname,
        }
 
  done:
+       END_PROFILE(syscall_rename_at);
+
        saved_errno = errno;
        if (dir_fd >= 0) {
                close(dir_fd);
index 76df006d82d93769920a2180074d434aaa741c2f..518a3981545212de2d4bd6823a17ab9f7f468f12 100644 (file)
@@ -95,6 +95,8 @@ int onefs_sys_create_file(connection_struct *conn,
        uint32_t onefs_dos_attributes;
        struct ifs_createfile_flags cf_flags = CF_FLAGS_NONE;
 
+       START_PROFILE(syscall_createfile);
+
        /* Setup security descriptor and get secinfo. */
        if (sd != NULL) {
                NTSTATUS status;
@@ -196,6 +198,7 @@ int onefs_sys_create_file(connection_struct *conn,
        }
 
  out:
+       END_PROFILE(syscall_createfile);
        aclu_free_sd(pifs_sd, false);
 
        return ret_fd;
@@ -307,6 +310,8 @@ ssize_t onefs_sys_sendfile(connection_struct *conn, int tofd, int fromfd,
        bool atomic = false;
        ssize_t ret = 0;
 
+       START_PROFILE_BYTES(syscall_sendfile, count);
+
        if (lp_parm_bool(SNUM(conn), PARM_ONEFS_TYPE,
                         PARM_ATOMIC_SENDFILE,
                         PARM_ATOMIC_SENDFILE_DEFAULT)) {
@@ -320,6 +325,7 @@ ssize_t onefs_sys_sendfile(connection_struct *conn, int tofd, int fromfd,
        /* If the sendfile wasn't atomic, we're done. */
        if (!atomic) {
                DEBUG(10, ("non-atomic sendfile read %ul bytes", ret));
+               END_PROFILE(syscall_sendfile);
                return ret;
        }
 
@@ -391,6 +397,7 @@ ssize_t onefs_sys_sendfile(connection_struct *conn, int tofd, int fromfd,
 
        /* Handle case 1: short read -> truncated file. */
        if (ret == 0) {
+               END_PROFILE(syscall_sendfile);
                return ret;
        }
 
@@ -402,6 +409,7 @@ ssize_t onefs_sys_sendfile(connection_struct *conn, int tofd, int fromfd,
                                 PARM_SENDFILE_LARGE_READS_DEFAULT)) {
                        DEBUG(3, ("Not attempting non-atomic large sendfile: "
                                  "%lu bytes\n", count));
+                       END_PROFILE(syscall_sendfile);
                        return 0;
                }
 
@@ -421,6 +429,7 @@ ssize_t onefs_sys_sendfile(connection_struct *conn, int tofd, int fromfd,
                        DEBUG(1, ("error on non-atomic large sendfile "
                                  "(%lu bytes): %s\n", count,
                                  strerror(errno)));
+                       END_PROFILE(syscall_sendfile);
                        return ret;
                }
 
@@ -439,9 +448,11 @@ ssize_t onefs_sys_sendfile(connection_struct *conn, int tofd, int fromfd,
                        if (lp_parm_bool(SNUM(conn), PARM_ONEFS_TYPE,
                                PARM_SENDFILE_SAFE,
                                PARM_SENDFILE_SAFE_DEFAULT)) {
+                               END_PROFILE(syscall_sendfile);
                                return -1;
                        }
 
+                       END_PROFILE(syscall_sendfile);
                        return ret;
                }
 
@@ -455,6 +466,7 @@ ssize_t onefs_sys_sendfile(connection_struct *conn, int tofd, int fromfd,
                          count, strerror(errno)));
        }
 
+       END_PROFILE(syscall_sendfile);
        return ret;
 }
 
@@ -509,10 +521,13 @@ ssize_t onefs_sys_recvfile(int fromfd, int tofd, SMB_OFF_T offset,
        off_t rbytes;
        off_t wbytes;
 
+       START_PROFILE_BYTES(syscall_recvfile, count);
+
        DEBUG(10,("onefs_recvfile: from = %d, to = %d, offset=%llu, count = "
                  "%lu\n", fromfd, tofd, offset, count));
 
        if (count == 0) {
+               END_PROFILE(syscall_recvfile);
                return 0;
        }
 
@@ -624,6 +639,9 @@ ssize_t onefs_sys_recvfile(int fromfd, int tofd, SMB_OFF_T offset,
        ret = total_wbytes;
 
 out:
+
+       END_PROFILE(syscall_recvfile);
+
        /* Make sure we always try to drain the socket. */
        if (!socket_drained && count - total_rbytes) {
                int saved_errno = errno;
index bdbd8057183b835abb14c2680bc12f83672f0e12..6d2d5ae06d8ebda6b9b38aecc47767904e66b08e 100644 (file)
@@ -290,6 +290,7 @@ bool profile_setup(struct messaging_context *msg_ctx, bool rdonly)
            "syscall_rmdir",            /* PR_VALUE_SYSCALL_RMDIR */
            "syscall_closedir",         /* PR_VALUE_SYSCALL_CLOSEDIR */
            "syscall_open",             /* PR_VALUE_SYSCALL_OPEN */
+           "syscall_createfile",       /* PR_VALUE_SYSCALL_CREATEFILE */
            "syscall_close",            /* PR_VALUE_SYSCALL_CLOSE */
            "syscall_read",             /* PR_VALUE_SYSCALL_READ */
            "syscall_pread",            /* PR_VALUE_SYSCALL_PREAD */
@@ -299,6 +300,7 @@ bool profile_setup(struct messaging_context *msg_ctx, bool rdonly)
            "syscall_sendfile",         /* PR_VALUE_SYSCALL_SENDFILE */
            "syscall_recvfile",         /* PR_VALUE_SYSCALL_RECVFILE */
            "syscall_rename",           /* PR_VALUE_SYSCALL_RENAME */
+           "syscall_rename_at",        /* PR_VALUE_SYSCALL_RENAME_AT */
            "syscall_fsync",            /* PR_VALUE_SYSCALL_FSYNC */
            "syscall_stat",             /* PR_VALUE_SYSCALL_STAT */
            "syscall_fstat",            /* PR_VALUE_SYSCALL_FSTAT */
@@ -323,6 +325,11 @@ bool profile_setup(struct messaging_context *msg_ctx, bool rdonly)
            "syscall_realpath",         /* PR_VALUE_SYSCALL_REALPATH */
            "syscall_get_quota",        /* PR_VALUE_SYSCALL_GET_QUOTA */
            "syscall_set_quota",        /* PR_VALUE_SYSCALL_SET_QUOTA */
+           "syscall_get_sd",           /* PR_VALUE_SYSCALL_GET_SD */
+           "syscall_set_sd",           /* PR_VALUE_SYSCALL_SET_SD */
+           "syscall_brl_lock",         /* PR_VALUE_SYSCALL_BRL_LOCK */
+           "syscall_brl_unlock",       /* PR_VALUE_SYSCALL_BRL_UNLOCK */
+           "syscall_brl_cancel",       /* PR_VALUE_SYSCALL_BRL_CANCEL */
            "SMBmkdir",         /* PR_VALUE_SMBMKDIR */
            "SMBrmdir",         /* PR_VALUE_SMBRMDIR */
            "SMBopen",          /* PR_VALUE_SMBOPEN */