Changeset 8509

Show
Ignore:
Timestamp:
09/22/10 02:44:01 (3 years ago)
Author:
nlmills
Message:

merge with Orange-Branch

Location:
branches/cu-security-branch
Files:
1 added
31 modified

Legend:

Unmodified
Added
Removed
  • branches/cu-security-branch/ChangeLog

    r7941 r8509  
    11----------------------- 
    2 PVFS2 Release ChangeLog 
     2OrangeFS Release ChangeLog 
    33----------------------- 
     4orangefs-2.8.2-20100920 
     5* Changed unstuff state machine to handle writing to files with read-only 
     6permissions on create  
     7        CVS: Orange-Branch:bligon:20100920181650 
    48 
    5 pvfs-2.8.0 
    6 ============= 
     9* Bug fix for kernel panics from list corruption 
     10        CVS: Orange-Branch:mtmoore:20100915132022  
    711 
    8 * Many bug fixes. 
    9 * Support for the latest kernel releases, including 2.6.28. 
    10 * Support for the latest releases of Berkeley DB, including 4.7.25. 
    11 * New Direct I/O mode for enterprise storage backends. 
    12 * Optimizations for small file workloads, including inode-stuffing 
    13   and object pre-creation. 
    14 * Improved performance for directory listing (readdir). 
    15 * Better integration with high-availability environments. 
    16 * New tracing component to integrated with TAU trace logs. 
    17 * Support for creating and building BMI only packages. 
    18 * Experimental support for a PVFS FUSE module. 
     12* Trove version increase to 0.1.5 to support precreate pools of multiple types 
     13        CVS: Orange-Branch:mtmoore:20100908153740 
    1914 
    20 pvfs-2.7.1 
    21 ============== 
     15* PJMP memory leak fix 
     16        CVS: Orange-Branch:bligon:20100906203050 
    2217 
    23 * support for the latest kernel versions 
    24  
    25 * kernel module: 
    26    - fixes to kernel dcache revalidate for multiple clients 
    27    - fixes to kernel getattr update race conditions 
    28    - modified kernel slot timeout to be separate (and much longer) from 
    29      the upcall timeout 
    30  
    31 * bmi-ib: fixes to infiniband double free bugs 
    32 * bmi-tcp: fixes to eager mode for slower client platforms 
    33  
    34 * fixes to state machine processing. 
    35 * fixes for the migration utility to work with single config file. 
    36 * memory corruption fixes. 
    37 * improved support for multithreaded system interface usage 
    38  
    39 * performance: 
    40     - removed unecessary locks in server metadata operations 
    41     - better caching of long-term attributes for IO 
    42     - improved pvfs2-lsplus and readdirplus() performance 
    43  
    44 * configuration: 
    45     --enable-threaded-kmod configure time option replaces -threaded run time 
    46       option to pvfs2-client 
    47     - segfault backtraces enabled by default 
    48     - HA script examples updated for use with Heartbeat 2.1.2 and newer 
    49  
    50  
    51 pvfs-2.7.0 
    52 ============== 
    53 * ib: free cached registrations when out of space (openib only) 
    54  
    55 * HEC posix extensions now supported by PVFS. 
    56 * HEC posix extensions patches to the vfs are provided in the patches subdir. 
    57 * Support for immutible (read-only) files set by xattr and vfs caching of 
    58 read-only files through the vfs. 
    59 * ib: optimistic buffer registration to avoid segmented memory registration 
    60 * ib: redesign and streamline credit-based flow control scheme 
    61 * ib: cache explict BMI_memalloc registrations; huge latency improvement 
    62 * bmi: avoid gettimeofday() to determine poll vs block for multi-method 
    63     scenario 
    64 * ib: rely on bmi to make poll vs block decision 
    65 * ib: only check for new connections and async events during blocking periods 
    66  
    67 * state machine changes: 
    68         - cleanup codegen to use structs instead of unions/arrays 
    69         - provide a universal smcb (state machine control block) for 
    70           all state machine actions 
    71         - add support for concurrent state machines 
    72  
    73 * portals: new BMI implementation 
    74 * make/configure: support Cray XT3/XT4 compute node build environment 
    75  
    76 * Added a RootSquashExceptions config option 
    77  
    78 * support for Linux kernels 2.6.22 and 2.6.23 
    79  
    80 * New layout parameter to PVFS_[i]sys_create. 
    81  
    82 * Immutable file support, allowing client caching of files. 
    83  
    84 * Added a new two-dimensional distribution for incast scenarios. 
    85  
    86 * MX: new BMI implementation 
    87  
    88 * Fixes to: 
    89         - servers running over an extended period of time. 
    90         - kernel module for simul workloads 
    91         - readdir handling of tokens 
    92         - alt aio cleanup path 
    93  
    94 pvfs-2.6.3 
    95 ============== 
    96  
    97 * fix to metadata coalescing that caused file corruption by writing to invalid 
    98 file handles.  Occurs with large (>70) mpi parallel write workloads. 
    99 * fix for race condition on metadata completion 
    100 * fix for alt-aio with non-contig requests 
    101 * fix to kzalloc configure checks for older kernels 
    102 * fix to support older (0.9.6x) openssl versions 
    103 * fix 2.4 kernel crash in lookup 
    104 * fix cleanup of server internal state machines 
    105 * fix remove-object to decrement dirent count 
    106 * fix a number of error code problems in bmi and elsewhere 
    107 * fix to prevent failures on decoding response errors from server 
    108 * fix 2.4 mount bugs 
    109 * fixes to acl checking, group checking, and root squash 
    110  
    111 pvfs-2.6.2 
    112 ============== 
    113  
    114 * fixes in trove dbpf to support latest Berkeley DB (version 4.5). 
    115 * fix kmod compile issues with --enable-mmap-racache 
    116 * fix for IO failures caused by invalid sizes used in file.c 
    117 * fixes for 2.4 kernels 
    118  
    119 pvfs-2.6.1 
    120 ============== 
    121  
    122 * fix --enable-fast 
    123 * fix to build for client-core-threaded (make clean and make kmod before make) 
    124 * fix problems on ppc64 (long/int type mismatches, no _syscall, removed 
    125 warnings) 
    126 * fix overwrites past end of request 
    127 * allow kernel buffer size to be tuned from pvfs2-client 
    128 * fixups for linux kernel version 2.6.19 
    129         - check return type of kmem_cache_destroy 
    130         - combine readv/writev to aio_read/aio_write 
    131  
    132 pvfs-2.6.0 
    133 ============== 
    134 * kernel module cleanups 
    135 * appropriate support for 64bit handles in kernel module 
    136 * added debugs for kernel to pvfs2-debug.h 
    137 * added offsetof macro 
    138 * added PVFS_U_SUID (root squash) 
    139 * pvfs-utils.h: PVFS2_translate -> PVFS_translate 
    140 * removed function: PVFS_mgmt_toggle_admin_mode 
    141 * changed all the PVFS_credentials params in system interfaces to const 
    142 * added PVFS_(i)sys_readdir_plus 
    143 * made PVFS_sysresp_readdir_s align properly for 64bit 
    144 * PVFS_sysresp_geteattr struct: added err_array field 
    145 * PVFS_sys_attr struct: fix alignment for dist_name and dist_params fields 
    146 * +1 of major version: 1.3 -> 2.3 
    147 * removed parent_*time from crdirent/rmdirent request 
    148 * added listattr request 
    149 * added (optional) params: 
    150  - TCPBindSpecific 
    151  - FlowBufferSizeBytes 
    152  - FlowBuffersPerFlow 
    153  - TroveAltAIOMode 
    154  - RootSquash 
    155  - ReadOnly 
    156  - AllSquash 
    157  - AnonUID 
    158  - AnonGID 
    159  - SecretKey 
    160 * fixed setgid bug 
    161 * root squash 
    162 * support for getdents[64]_plus_lite 
    163 * build w/ 2.6.18 and 2.6.19 kernels 
    164 * added pvfs2-lsplus 
    165 * configure arguments: 
    166     --with/without-openssl[=<path>] 
    167 * alt_lio_listio impl (threaded pread/pwrite) 
    168 * server SIGHUP handler waits for all ops completion [...] 
    169 * migration tool fixes 
    170 * fixes for simultaneous create/unlink hangs (reqsched and sync coalesce) 
    171 * add connection close to bmi for resetting the socket buffer size for initial 
    172 socket 
    173 * atime, mtime, and ctime fixes for VFS interface 
    174 * verify hash of config files 
    175     - added openssl options and checks 
    176 * updated faq entry for heartbeat 
    177 * config check for linux/mount.h 
    178 * config check that statfs callback has struct dentry arg 
    179 * LTP fixes to pass tests 
    180     - s/EOPNOTSUPP/EACCES/ 
    181     - acl fixes 
    182 * ib: 
    183     - check for ib reregister event 
    184     - close connection on cancel 
    185     - fix duplicate free bug during message cancel 
    186  
    187 pvfs2-1.5.0 
    188 =============== 
    189 - trove dbpf keyval changes:  The dbpf keyval implementation has been 
    190   changed from using individual DB objects for each handle, to one 
    191   DB object for all keyval entries.  This affects the storage format, 
    192   and requires the pvfs2-migrate-collection tool to be run on storage 
    193   spaces created previous to this release. 
    194 - sync coalescing: A new syncing feature has been added to the trove layer that 
    195   provides better performance with metadata in high-load cases.  New options 
    196   were added to the server config: TroveSyncCoalesce, CoalescingHighWatermark, 
    197   CoalescingLowWatermark. 
    198 - added stranded bstream checking and handling.  This is useful for correctly 
    199   reusing handles in failure cases. 
    200 - consolidate I/O paths through the VFS for read,write and readv,writev. 
    201 - added testsome, wait, and release functions to external interfaces 
    202 - fixes to karma and performance monitoring. 
    203 - better error handling on server and client and kernel module 
    204 - fixes to ownership flags on root directory.  Allow chmod to work. 
    205 - fixes for small io and non-contiguous io. 
    206 - fixes to sys-io state machine to prevent deadlock on the server caused by 
    207   concurrent writes from the same client. 
    208 - replaced keyval strings with shorter versions to save space in the keyval 
    209   database. 
    210 - cleanups to the kernel module: cleanup cache subsystem structures and 
    211   functions.  Better error checking on to make module reloading more robust. 
    212 - fixes for fsck and fs-dump. 
    213 - better xattr support for 2.4 kernels 
    214 - added support for berkeley db environments with the pvfs2 bdbs, and using 
    215   shared memory for db cache instead of mmapped file. 
    216 - better support for 64bit (esp. ppc64) platforms and 32/64 bit mixed env. 
    217 - better support for darwin (OS X) 
    218 - added configure options: --disable-aio-callbacks,  No check for aio callback 
    219   support is done any longer. --enable-kernel-sendfile to configure for users  
    220   that want sendfile system call support, it is now disabled by default. 
    221   Epoll is now the default if its available, otherwise poll is used, 
    222   --enable-epoll and --disable-epoll now force without checking. 
    223 - Performance improvements for bmi_tcp: allow socket buffer size and tcp 
    224   window size to be changed dynamically.  Use a pipe file descriptor 
    225   for poll to prevent stalls.  Reorganize epoll to add and remove epoll 
    226   watches. 
    227 - pvfs2-genconfig now supports --iospec and --metaspec options.  Also fixed 
    228   some hostname sorting and range spec bugs. 
    229 - pvfs2-client: added --logstamp.  nonblocking statfs and mount support. 
    230 - handle allocation wasn't resulting in a uniform distribution.  Now we 
    231   pick a server at random and then select the remaining handles in a 
    232   round-robin fashion 
    233 - pvfs2-ping does better per-server error reporting and keeps track of errors 
    234   better 
    235 - pvfs2-viewdist now fails gracefully on old systems without xattrs.  Also 
    236   prints out handle number and filename for each datafile 
    237  
    238 pvfs2-1.4.1-pre1 
    239 =============== 
    240 - ib: encode data structures to support heterogenous architectures 
    241 - deal with update_atime vanishing from kernel: test for touch_atime and use 
    242   that if available. 
    243 - fix configure-time kernel tests to work better with 2.6.16 kernels 
    244 - ib: separate config options for includes and libraries, optionally 
    245 - ib: support mellanox ibgd-1.8.2, compile quietly on x86_64 
    246 - ib: avoid more compiler warnings 
    247 - ib: list hcas rather than enumerating in code 
    248 - ib: fix mosal startup for ancient libraries 
    249 - ib: update internals documentation 
    250 - ib: fix CTS out-of-order problem 
    251 - ib: separate message headers to make math and debugging easier 
    252 - ib: avoid trying to actively connect as a server 
    253 - ib: move static variables into an allocated struct to avoid namespace 
    254   collisions 
    255 - ib: generalize memcache to be used by multiple consumers, not just VAPI 
    256 - ib: generalize bmi_ib to work with multiple verbs interfaces.  Add support 
    257   for OpenIB. 
    258  
    259 pvfs2-1.4.0 
    260 - add a simple sendfile callback stub 
    261 - getattr through pvfs2-client-core now specifies exactly what it needs 
    262 - fix case where pvfs2-fs-dump would fall into infinite loop 
    263 - added new pvfs2-viewdist and pvfs2-perror utility 
    264 - many zero-fill cleanups 
    265 - SIO (small-io) optimization: piggyback small I/O requests in initial 
    266   communication between server and client (like MPI eager mode, but for I/O) 
    267 - fix a truncate bug 
    268 - pvfs2-genconfig can create config files for running several servers on one 
    269   machine.  useful for testing 
    270 - better pvfs2-client and pvfs2-client-core logging 
    271 - better interaction between pvfs2-client and pvfs2-client-core  
    272 - improvements to doxygen generation 
    273 - rework the acache into generic tcache infrastructure upon which acache is 
    274   built 
    275 - timeouts for kernel operations can now be adjusted via /proc/sys/pvfs2 
    276 - cleanups for --enable-strict and building on 64-bit systems 
    277 - update kernel interface for 2.6.15 
    278 - assorted improvements to tests: more coverage, better reporting 
    279 - fix several immediate completion cases: others probably remain 
    280 - remove an extraneous call to make_bad_inode 
    281 - better logging when msgpairarray fails 
    282 - clean up the pvfs2-server shutdown process 
    283 - improvements to nightly test error checking 
    284 - fix immediate completion error with zero-byte reads and writes 
    285 - more robust directory renaming technique 
    286  
    287 pvfs2-1.3.2 
    288 =============== 
    289 - new configure option for kernels which export internal symbols:  
    290         --disable-kernel-aio 
    291 - fix for getattr error handling 
    292 - fix for trove printing out a resource after (sometimes) invalidating it 
    293  
    294 pvfs2-1.3.1 
    295 =============== 
    296 - ib: add memory registration caching 
    297 - ib: add support for cancel operation 
    298 - ib: fix minor protocol problems 
    299 - ib: cleanup build 
    300 - better pvfs2-client and pvfs2-client-core logging 
    301 - --enable-fast was broken 
    302 - fix compile error on FC3 and RHEL 2.6.9 kernels 
    303 - async i/o support (but needs libaio and libaio-devel at this time) 
    304 - "trusted ports" 
    305 - --enable-strict now compiles w/ a lot fewer warnings 
    306 - fixed timestamp problems for pvfs2 files 
    307 - listeattr system interface function  
    308 - fixed bugs in timestamps 
    309 - fixed bugs in zero-fill handling 
    310 - no longer ship generated .c files from .sm. instead, ship the sm parser 
    311   (allows for easier release patching) 
    312 - Phil Carns: server checks fs id on startup 
    313 - Phil Carns: --num-dfiles option to pvfs2-genconfig 
    314 - Phil Carns: fix setgid suport 
    315 - Phil Carns: proper symlink support (created as 777, no way to change them) 
    316 - Lots of portability fixes.  PVFS2 now builds on Darwin (userspace, no 
    317   kernel) 
    318 - better tests for location of Berkely DB headers/libraries 
    319  
    320 - Trach-Minh Tran <trach-minh.tran@epfl.ch> reported bug in append mode. fixed 
    321 -  
    322  
    323  
    324 pvfs2-1.3.0 
    325 =============== 
    326 - Murali Vilayannur contributed extened attribute support to the VFS interface 
    327 - Murali and Dean Hildebrand also worked on implementing readv and writev in 
    328   the VFS interface 
    329 - Phil Carns contributed logging improvements to pvfs2-client and pvfs2-server 
    330 - Phil also contributed improvements to the request processor which should 
    331   help speed up some concurrent workloads. 
    332 - Phil further contributed protocol versioning to PVFS2.  Major version 
    333   changes are incompatible up or down.  New clients can't talk to old servers, 
    334   but new servers can talk to old clients.  
    335 - clean up some warnings on 64 bit platforms 
    336 - Phil contributed a pvfs2-set-sync tool  
    337 - lots of configure tests for various kernel versions 
    338 - rework acache 
    339 - memory leak in flow descriptors 
    340 - bugfixes for noncontig requests 
    341 - improvements to the req scheduler: more operations can occur concurently now 
    342 - improved handling of "zero-fill" case: sparse files now treated correctly 
    343 - further improvements to nightly testsuite 
    344  
    345  
    346 pvfs2-1.2.0 
    347 =============== 
    348 - make server better able to handle bogus file names (David Metheny) 
    349 - better casts for ppc64 
    350 - even better configure tests for various berkely db features 
    351 - documentation updates for Fedora 4 changes 
    352 - extended attribute support (not available through VFS yet) 
    353 - nightly build infrastructure now mostly in place 
    354 - --enable-strict now works again 
    355 - new utilities: pvfs2-touch, pvfs2-stat, pvfs2-ln 
    356 - add additional write() checks to kernel module 
    357 - hold st_nlink field at 1: keeping a true count is quite hard to do 
    358   correctly in a distributed environment 
    359 - new distribution: "varstrip"j 
    360 - better pvfs2 kernel module debugging interface (/proc/sys/pvfs2/debug) 
    361 - pvfs2 now supports setgid  
    362 - build: avoid some warnings from gcc4 
    363 - kernel: understand new backing_dev_info format in 2.6.12 
    364 - Added DefaultNumDFiles as filesystem config option. 
    365 - Added num_dfiles tabfile option.  i 
    366   The number of dfiles is set by searching for the first given hint in this 
    367   order:  application hints, tabfile, server config.  The selected  
    368   distribution may modify the hint if neccesary. 
    369 - Phil Carns contributed general improvements and bug fixes for the dotconf 
    370   parser. 
    371 - Added DefaultDistribution section support for server config file.  Section 
    372   is optional and accepts Name, Param, and Value (Param and Value may be 
    373   repeated multiple times in the section). 
    374 - added 'retry' and 'timeout' config file options 
    375 - will consult /etc/mtab as an additional source for pvfs2 tabfile entries 
    376  
    377 pvfs2-1.1.0 
    378 =============== 
    379 - network protocol: more 64-bit alignment fixes 
    380 - build: hide karma details in its module.mk 
    381 - build: remove duplicate commands used for QUIET_COMPILE 
    382 - build: fix test configure library detection 
    383 - build: simplify karma and vis some more 
    384 - build: add tests for features of Berkeley DB 4.3.xx 
    385 - trove: fix bugs introduced by new features of DB 4.3.xx 
    386 - docs: added doxygen configuration file and doxygen-style docs 
    387   to many source files 
    388 - pvfs2-cp: can pass strip size as a parameter (thanks David Beilloin 
    389   <dbeilloi@mc.com>) 
    390 - gossip: avoid double-timestamp in debug and error messages 
    391 - feature-test for kernel routines i_size_write, i_size_read, and parent_ino 
    392 - recover better from server failures 
    393 - kernel: export superblock magic number for romio autodetection 
    394 - 64-bit: change some protocol encodings to avoid unaligned accesses, fix 
    395   server crash 
    396 - documentation updates 
    397 - Phil Carns and David Beilloin reported various memory leaks and memory 
    398   misuse throughout the code 
    399 - Phil Carns and David Metheny contributed their improvment to the 
    400   permissions-checking routines.  Secondary groups work much better now. 
    401 - configure-time options to select behavior needed on redhat-like environments 
    402 - can disable server support at configure time 
    403 - various tweaks to make cross compiling easier 
    404 - Phil Carns contributed a new config file option (LogStamp) to select 
    405   timestamp format 
    406 - By default we sync metadata (TroveSyncMeta yes) and not data (TroveSyncData 
    407   no).  This configuration is a good compromise between reliability and 
    408   performance for most workloads. 
    409 - Joachim Worringen's noncontig benchmark turned up several bugs now addressed 
    410   in this release 
    411 - bugfix where pvfs2-chmod would cause all future operations to fail 
    412 - bugfix for 64 bit servers.  pvfs2 on opteron now passes the bonnie benchmark 
    413  
    414 pvfs2-1.0.1 
    415 =========== 
    416 - ib: add configure-time checks for mosal library variations 
    417 - ib: flush send queue work requests periodically 
    418 - ib: search receive queue for both eager and rts (D. Beilloin) 
    419 - improved support for some cases of file holes (that require zero fill) 
    420 - fixed a crash bug due to incorrect assertion regarding zero fill 
    421 - applied annotations and cleanups to the kernel module in response to 
    422   using the automated correctness checker called 'sparse' 
    423 - fixed a bug that did not properly allow storage space removals when 
    424   using ReiserFS as the underlying file system 
    425 - added more redhat checks for determining if we need to patch the 
    426   kernel module code to work properly with particular releases 
    427 - FAQ documentation update 
    428  
    429  
    430 pvfs2-1.0.0 
    431 =========== 
    432 - disabled mmap readahead cache by default; allow configure option to 
    433   optionally enable it 
    434 - added support for handling several cases of file hole zero fills 
    435   (i.e. sparse files) 
    436 - configured acache timeout to be 5 seconds by default through the 
    437   vfs; sysint was already 5 seconds 
    438 - added karma program installation to make install target 
    439 - redhat 9 related changes (in order to work out of the box) 
    440   - used some 2.6.x kernel code on redhat 9 2.4.x kernels, if detected 
    441   - no longer mark pages as reserved on redhat 9 2.4.x kernels, as it 
    442     causes an oops on their kernel (i.e. not necessary) 
    443   - installed a wrapper script in place of the pvfs2-server that 
    444     exports the LD_ASSUME_KERNEL environment variable before running 
    445     the server(to avoid using the redhat NPTL library which is 
    446     incompatible) 
    447   - fixed make kmod{24}_install even if there are multiple UTS_RELEASE 
    448     definitions in the version.h file (as there are in redhat 9) 
    449  
    450  
    451 pvfs2-0.9.0 
    452 =========== 
    453 - documentation updates to HA and FAQ documents 
    454 - better balancing (randomization) of data server selection when 
    455   creating new files 
    456 - clean up a few request-related 8-byte alignment issues for alpha 
    457 - fixed an AMD64 kernel oops due to a bad cast 
    458 - cleaned up error code types in the exposed sysint and mgmt methods 
    459   (using PVFS_error rather than int) 
    460 - added a setattr debugging mask and changed most detailed setattr 
    461   debugging to use it 
    462 - added a mkdir debugging mask and changed most detailed mkdir 
    463   debugging to use it 
    464 - added some inlined methods in PVFS_util (as they need to be used on 
    465   both the server and the client) for getting the current time in 
    466   PVFS_time format, encoding a PVFS_time as a version (finer grained 
    467   than a 'normal' PVFS_time since we can use the high 32 bits), and 
    468   decoding the version as a PVFS_time 
    469 - added a compatibility hack that _should_ allow no noticeable 
    470   breakage on existing storage space, but will eventually migrate to 
    471   the slightly new storage format over time 
    472 - modified client side sys-mkdir, sys-create, and sys-symlink to 
    473   encode the mtime as a version when passing it to the server (so it's 
    474   transparent from the server perspective) 
    475 - modified server side get-attr to decode the version read from disk 
    476   back into an mtime (so it's transparent from the client perspective) 
    477 - modified mkspace method to properly version newly created root and 
    478   lost+found directories 
    479 - modified the server side mkdir operation to return -PVFS_EINVAL if 
    480   the object attr type is not a directory object 
    481 - vfs readdir modifications to detect directory version changes on 
    482   listings; default behaviour is unchanged 
    483 - fixed bug in collection remove that didn't remove the collection 
    484   information from the collection db (which manifested as having a bug 
    485   where a collection that was once created and then removed could 
    486   never be created again due to a lookup succeeding before it should) 
    487 - added documentation on how to create multiple file systems within a 
    488   single pvfs2 storage space 
    489 - added documentation on return codes of the sysint methods 
    490 - pvfs2-mkspace improvements: 
    491   - now requires a collection ID, storage space and a handle range 
    492   - fixed types used to represent actual root handle and collection id 
    493     to be the proper types, rather than integers 
    494   - remove many defaults in favor of requiring cmdline options 
    495   - replace atoi calls with strtou{l}l to accomodate larger values if 
    496     specified 
    497   - cosmetic output improvements 
    498   - fixed mkspace method to make sure that we only use handle ranges 
    499     that are both non-null, AND are not an empty string 
    500  
    501  
    502 pvfs2-0.8.0 
    503 =========== 
    504 - adjusted mask values for event logging to skip 0 mask 
    505 - moved handle counting in statfs to server side so that it is 
    506   done in parallel 
    507 - replaced uniq() subroutine in PAV to avoid recursion 
    508 - pvfs2-statfs cleanups and cast fixing 
    509 - pvfs2-shell-test: replaced a directory test 
    510 - add a clientcore_timing debug mask that only logs the operation 
    511   timings from the pvfs2-client-core 
    512 - added some pts debugging 
    513 - fixed bad assumption in getattr-acache that might have looked at the 
    514   wrong handle/fs_id during some operations (e.g. lookup) 
    515 - removed potential latency on system startup by trying to store temp 
    516   config files in /tmp/ first rather than the current dir 
    517 - make sure that our error routines strip any known class error bits 
    518   instead of deciding that they're unrecognized if set 
    519 - improved trove error handling 
    520 - improved pvfs2-server error handling 
    521 - fixed crash bug in our config parser that tried to strdup strings 
    522   that might be NULL 
    523 - pvfs2-types.h header file simplification and cleanups 
    524 - extended buffer size of filename for use with mkstemp as it started 
    525   failing on ppc with misc unexpected characters 
    526 - addition of a simple vfs test program that creates a file with a 
    527   hole in it and tries to read from that hole (this demonstrates a 
    528   currently known bug) 
    529 - addition of the same test program using only the system interface 
    530 - fixed some misc memory/resource leaks 
    531 - fixed test program ls.c and admin program pvfs2-ls.c to not issue an 
    532   extra call to readdir on every run by fixing a slight logic bug 
    533 - added a directory version that is passed back from the server to the 
    534   client on each successful readdir call and updated the client and 
    535   server response structures and encoder to accomodate this 
    536 - ncache related: 
    537   - increased ncache timeout from 5 seconds to 30 seconds by default, 
    538     but keep it disabled by default (it's still experimental) 
    539   - cleaned up the ncache and make it useable by the 
    540     lookup/remove/create/mkdir/etc calls (if enabled) 
    541   - added a flag to the client sysint lookup sm that records if the 
    542     final object resolved was a followed symlink or not (regardless of 
    543     if it was followed or not) 
    544   - extended the ncache interface (lookup/insert/remove) to have the 
    545     ability to have multiple entries with the same name with different 
    546     handles based on some other tag (e.g. resolving a symlink object, 
    547     rather than what it points to).  this is also not in use at the 
    548     moment.  for now, no symlink objects will be inserted into the 
    549     ncache. 
    550   - added more ncache debugging 
    551   - added a fastpath return from client sysint lookup method on ncache 
    552     hit 
    553   - updated and extended all ncache test programs to work with the 
    554     changed API and fixed broken tests/verified that they still work 
    555 - kernel related: 
    556   - fixed all warnings generated from compiling the pvfs2 kernel 
    557     module under 2.6.9 kernels 
    558   - removed write_inode method, as it was unused and probably won't be 
    559     used 
    560   - removed unused -v command option to pvfs2-ls 
    561   - added command option -V (and --verbose) which can detect version 
    562     differences in the directory being read and will report them if 
    563     this switch is enabled 
    564   - fixed misc compilation warnings on Opteron/AMD64 machines 
    565   - added directory version to readdir downcall (passed from 
    566     pvfs2-client-core) 
    567   - removed include of modversions.h directly from pvfs2-kernel.h 
    568  
    569  
    570 pvfs2-0.7.0 
    571 =========== 
    572 - fsck: server handles bogus datafiles better 
    573 - fsck: pvfs2-fsck is a little smarter about what it tries to salvage 
    574 - ib: avoid unsignaled WQE pileup 
    575 - ib: avoid polling cancelled connections (first stab toward true 
    576   cancel) 
    577 - ib: spin-block in test functions for better performance 
    578 - ib: do not "open" HCA, just grab a handle 
    579 - ib: fix leaking connection structs (thanks to D. Beilloin) 
    580 - ib: use faster 1k mtu 
    581 - ib: cleanup warning texts 
    582 - configure: add option to disable AIO threaded callbacks 
    583 - configure: fix GM and IB to enable only when explicitly requested 
    584 - add timestamps to gossip debugging to file and stderr (not syslog) 
    585 - ib: initial cancel support, works for pvfs2-ls 
    586 - add multihome support: servers can listen on multiple addresses (and 
    587   BMI types), clients choose the first address from tabfile that works 
    588 - bmi: poll adaptively based on recent usage 
    589 - added trove-dbpf support for internally limiting the number of 
    590   simultaneous aio operations allowed in progress; default value is 16 
    591 - increased mmap-ra-small buf size from 4K to 16K to avoid many small 
    592   allocations (causes slightly larger mem footprint of client-core) 
    593 - adjusted client sysint setattr operation to work in a write-through 
    594   manner with the acache (when enabled) 
    595 - fixed client sysint setattr to invalidate the acache entry (if any) 
    596 - changed acache lookup to return the status (to avoid another acache 
    597   call that will always follow a successful lookup) 
    598 - internal acache improvements, such as removal of duplicated code 
    599 - updated acache-torture test program to match slightly new acache 
    600   interface 
    601 - make sure mmap's requesting MAP_SHARED fail (mmap2 returns -EINVAL, 
    602   userspace mmap returns standard MMAP_FAILED value) 
    603 - added compile time support for measuring roughly how long it takes 
    604   to process particular operations issued from the vfs 
    605 - modified PINT_sys_testsome to return immediately without calling 
    606   testcontext if any ops are completed and ready to be returned right 
    607   away 
    608 - made statfs return load information from servers 
    609 - gm: fixed performance bug, make sure test calls check completion 
    610   queue before sleeping 
    611 - gm: implement cancel functionality and verified for common cases 
    612 - fixed dbpf SYNC macro bugs that caused hangs on systems without aio 
    613   callback support 
    614 - updated pvfs2-config tool to use LIBS variable from configure 
    615 - removed -ldb from client side link stage 
    616 - added --serverlibs option to pvfs2-config to determine what 
    617   libraries have been linked against pvfs2-server 
    618 - updated makefile system for tests directory to use pvfs2-config and 
    619   deprecate use of .libs file 
    620 - added make install target for test harness programs 
    621 - introduced mutex locking in trove-handle-mgmt to avoid race 
    622   conditions that appear when statfs is called while trove operations 
    623   are in progress 
    624 - added utility functions for measuring elapsed wall, system, and user 
    625   time between specified points in code 
    626 - fix glaring alignment failure in PVFS_server_req 
    627 - fixed type of readahead_size in upcall for mmap-ra-cache that caused 
    628   the mmap-ra-cache to not work properly on PowerPC 
    629 - no longer look in the mmap-ra-cache for data on reads unless we're 
    630   sure we're doing an mmap or execution (as opposed to always) 
    631 - removed kernel module pvfs2_link call, as it was never used 
    632 - moved static copy_mntent method to PVFS_util_copy_mntent method 
    633 - added error handling to PVFS_util_copy_mntent 
    634 - renamed PVFS_sys_free_mntent to PVFS_util_free_mntent 
    635 - fixed successful return value of PVFS_util_copy_sys_attr 
    636 - fixed initialize-dyn test program that broken due to mntent changes 
    637 - changed get_data_sync_mode to explicitly return TROVE_SYNC if called 
    638   on an unregistered fs_id 
    639  
    640  
    641 pvfs2-0.6.5 
    642 =========== 
    643 - broke several server state machines into multiple nested machines 
    644 - some PAV cleanups, including support for a larger number of meta 
    645   servers than io servers 
    646 - update k_size (number of keyvals) in dspace attr cache when the 
    647   number of keyvals on disk changes 
    648 - replaced all vfs 64 bit operation tags to be unsigned 
    649 - replaced pint-dev code to work with 64 bit unsigned tags 
    650 - moved all op initialization out of the constructor and into the 
    651   op_alloc routine 
    652 - fixed tag cancellation upcall/method to use a 64 bit tag, rather 
    653   than an unsigned long 
    654 - added a PVFS_util method to get the current system and return it as 
    655   a valid PVFS_time type 
    656 - added arguments to the crdirent/chdirent/rmdirent operations that 
    657   now can take optional parent atime/mtime/ctime fields 
    658 - added support on server *dirent operations that update the parent 
    659   time attributes (if specified) on successful completion of the 
    660   *dirent operation; null/zero time fields are not modified 
    661 - modified sys-create/sys-mkdir/sys-symlink/sys-rename/sys-remove to 
    662   work with the new operations properly; in general, 
    663   create/remove/rename operations updates the mtime and ctime of the 
    664   parent directory, which is now properly supported 
    665 - moved some common server side attribute handling code into a macro 
    666   to make it re-useable across several server state machines 
    667 - updated en{de}coding of modified operations 
    668 - remove sync calls on readonly trove operations 
    669 - added sanity check to kernel's device poll; makes sure the device is 
    670   opened by only one user before returning valid results 
    671 - make the device's request list waitqueue non-exclusive, since poll 
    672   waits as well 
    673 - some formatting changes on kernel error reporting 
    674 - added mmap-ra-cache support for partial cache fills on incomplete 
    675   requests; misc mmap-ra-cache enhancements 
    676 - cast setparam values to uint64_t rather than int64_t in admin utils 
    677 - remove trove sync call on server side root handle check 
    678 - modify server side remove state machine to check the k_size of the 
    679   dirdata object being removed if it's a directory to report early 
    680   back to the client that the directory is not empty (if it's not) 
    681 - remove the readdir checks in the client remove path now that the 
    682   server-side remove can tell us directly if a directory is not empty 
    683 - modified PVFS specific error routines to print the value of 
    684   unrecognized error codes if encountered 
    685 - fixed memory leak on check_fs_id setparam 
    686 - fixed 64bit compile warnings (AMD64/Opteron) 
    687 - split msgpair debugging into it's own class (no longer part of 
    688   'client') 
    689 - break out clientcore debugging into its own debugging mask 
    690 - fixed trove error codes 
    691 - give trove flush and resize operations the ability to create the 
    692   bstream they're working with if it doesn't exist instead of 
    693   returning an error 
    694 - fixed bug in (threaded) trove that did not properly reinitialize 
    695   condition variables after the first finalize 
    696 - improvements to the storage space and collection removal code 
    697 - extensive trove cleanups and cruft removal 
    698 - check for error codes when doing server side getattr and reading 
    699   metafile information; stop processing if an error is reached 
    700 - invalidate attr cache on write_at calls (never used) 
    701 - changed pvfs2-showcoll coll_id prints from hex to decimal 
    702 - kernel changes: 
    703   - enable kernel readahead hints on mmap/execution (i.e. sequential) 
    704   - initialize kernel module's request_list_waitq at declaration time 
    705   - put large print statement into a macro for convenience 
    706   - make all bufmap allocations GFP_KERNEL, regardless of highmem usage 
    707   - use add_waitqueue_exclusive for the io_completion_waitq entries 
    708   - clear random readahead hint on mmap 
    709  
    710  
    711 pvfs2-0.6.4 
    712 =========== 
    713 - added a pvfs2-config tool to help when compiling against pvfs2 
    714 - new PAV option (COMPUTENODES_LAST) that controls whether compute 
    715   nodes are chosen first or last out of the total set of nodes 
    716   available 
    717 - fix locking bug introduced in 0.6.3 that shows up when trove is used 
    718   without aio callbacks 
    719 - explicitly name invalid msg tag value (0) 
    720 - modified pvfs2-ls to show the mtime (rather than atime) in long 
    721   listings 
    722 - updated set-info test program to update mtime (rather than atime) 
    723 - fixed possible flow mutex memory leak 
    724 - changed PVFS_time from an int64_t to a uint64_t 
    725 - fixed a pvfs2-fsck compile time warning 
    726 - fixed bug in sys-remove that erroneously tried to back out of the 
    727   remove even on error codes that are acceptable to return 
    728 - moved to fully 64 bit unsigned gossip masks (for some more possible 
    729   debugging levels) 
    730 - fixed bug in shared-state-machine getattr method that could allow 
    731   attributes to come out of the acache with incorrect types/fields 
    732 - fixed bug in crdirent msgpair setups for create/mkdir/symlink (used 
    733   incorrect handles in mappings) 
    734 - modified mgmt setparam call to take uint64_t parameters instead of 
    735   int64_t 
    736 - kernel changes: 
    737   - fixed bug that allowed a file removed on one client to still 
    738     appear on another with bad attributes 
    739   - fixed dentry revalidation to never return that a dentry is valid 
    740     if's negative 
    741   - fixed directory inode's mtime and ctime changes on updates 
    742   - fixed directory link counts for some changes 
    743   - simplify atime/mtime/ctime conversion to sys_attr (and vice versa) 
    744     to and from inode's time fields 
    745  
    746  
    747 pvfs2-0.6.3 
    748 =========== 
    749 - added ability to negate log categories in 
    750   PVFS_debug_eventlog_to_mask 
    751 - added pvfs2-fsck 
    752 - updated pvfs2-quickstart to better discuss client configuration 
    753 - added optional epoll() based socket management component (enable 
    754   with configure option --enable-epoll on linux 2.6 systems) 
    755 - fixed configure bug that dropped default CFLAGS in some cases 
    756 - adjusted trove id generation to make it easier to log trove events 
    757 - fixed Makefile.in bug that caused pvfs2-server.c dependency 
    758   information to be lost 
    759 - rewrote both threaded and nonthreaded versions of all job_testXXX() 
    760   functions 
    761   - fixed condition variable usage to avoid signaling races that could 
    762     lead to unecessary wait times 
    763   - simplified code path 
    764   - removed superfluous calls to gettimeofday() 
    765 - adjustment of condition variable usage in trove-dbpf to avoid races 
    766   similar to those found in job_testXXX() 
    767 - applied vim formatting patch to use spaces instead of tabs 
    768 - fixed pvfs2-server permission check to allow users of the same group 
    769   to have access to other group members attributes (for listing) 
    770 - fixed incorrect/invalid error codes and error handling 
    771 - fixed pvfs2-server crash bug due to io state machine potentially 
    772   freeing a reqsched id that was never posted 
    773 - added mgmt methods PVFS_{i}mgmt_get_dirdata_handle for retrieving 
    774   the internal dirdata handle of a specified 'parent' object (if any) 
    775 - fixed pvfs2-server crash bug (race) in trove that could return an 
    776   object on queue addition that has already been serviced 
    777 - extended server side mkdir state machine to create the internal 
    778   dirdata dspace when creating the directory (rather than waiting for 
    779   crdirent to create it if it doesn't already exist) 
    780 - added mgmt methods PVFS_{i}mgmt_create_dirent mgmt for creating 
    781   directory entries at a low level 
    782 - fixed request scheduler's acceptance of the mgmt-remove-* operations 
    783   while in admin mode (since these can be used in admin mode) 
    784 - extended mkspace (and thus pvfs2-mkspace program) to initalize a 
    785   lost+found directory after the root directory is made 
    786 - kernel changes: 
    787   - fixed credential usage bug that resulted in (seemingly random) 
    788     permission problems when using the file system as multiple users 
    789   - fixed a bug that appeared as data corruption due to mapped memory 
    790     pages in use being swapped out under heavy memory load under 2.4.x 
    791     kernels (and containing incorrect data on future accesses) 
    792   - remove slab poison flag from debug allocators, as some kernels 
    793     complain about how it was used 
    794   - do not use kmap/kunmap calls if not configured for HIGHMEM, as 
    795     some configurations cannot resolve these symbols 
    796  
    797  
    798 pvfs2-0.6.2 
    799 =========== 
    800 - updated documentation for dist-simple-stripe.c and modified 
    801   the basic distribution to use a single data file object. 
    802 - fixed error reporting in pvfs2-server that didn't understand pvfs2 
    803   specific error codes 
    804 - extended request scheduler to allow operations to pass through 
    805   without being scheduled (and allow the noop operations to work like 
    806   this) 
    807 - disabled the (unused) device interface on server builds, reducing 
    808   server run-time threads by one 
    809 - bmi optimizations: avoid polling in test calls if operations are 
    810   complete, or no operations are complete but there are unexpected 
    811   operations ready to be serviced 
    812 - extended the pvfs2-mkspace tool to be able to work with data and 
    813   meta handle ranges separately (also extended the internal interfaces 
    814   as necessary for this functionality) 
    815 - fixed bug in mkspace that could create the root directory dirent 
    816   object in a non-meta handle range 
    817 - added client side attribute type checking that avoids contacting 
    818   servers if we've determined that the operation we're about to 
    819   perform cannot be performed on an object of the type we were told to 
    820   work on.  e.g., a readdir operation will not be issued to the server 
    821   if the getattr reports that the object we want to readdir on is not 
    822   a directory.  most sysint operations now have this checking in place 
    823 - fixed crash bug on the server crdirent operation if passed a 
    824   non-directory object type 
    825 - fixed race condition triggered when pvfs2-server is getting many 
    826   more incoming operations than it has posted unexpected msgs for 
    827 - increase the default number of posted unexpected msgs by the server 
    828 - properly re-integrate and simplify the usage of the mmap-ra-cache, 
    829   which wasn't working properly after the pvfs2-client-core re-write 
    830 - fixed crash bug on the server due to an unexpected error code coming 
    831   out of pthread_cond_timedwait inside of job test calls 
    832 - modify configure script to append date and time information to non 
    833   release builds (for more fine grained version information if needed) 
    834 - fixed acache usage in sysint create/mkdir/symlink operations 
    835 - open-cache remove now syncs (if necessary) after the remove, rather 
    836   than just before 
    837 - removed duplicate 'open_cache' debugging keyword definition 
    838 - allowed client side logging (via PVFS2_DEBUGMASK/PVFS2_DEBUGFILE env 
    839   variables) to append to the specified logfile, rather than 
    840   truncating it if it already exists 
    841 - fixed bug in device test method that didn't properly adjust the 
    842   outcount on failure; also added the number of bytes read on a failed 
    843   (short) read 
    844 - started adding debugging code for printing out server side response 
    845   structures (only getattr is currently implemented) 
    846 - kernel changes: added some debugging and simplified the 
    847   handle_io_error macro.  also added translation of non-errno pvfs2 
    848   error codes (should it get one) to avoid returning entirely 
    849   incorrect error codes in some cases; avoid allowing -PVFS_ECANCEL to 
    850   be passed down to the kernel code from the pvfs2-client-core.  use 
    851   i_size_read to update file position on opens for append.  remove old 
    852   code that manually updated the inode's file size on writes 
    853 - replaced debugging mask of cancelled i/o operations from io to 
    854   cancel 
    855 - simplified pvfs2-statfs by retrieving all server statistics in one 
    856   call, rather than separate ones for meta and data servers; also 
    857   fixed reporting of server duties (previously all servers were 
    858   reported as serving both meta and i/o data) 
    859 - added a start banner to pvfs2-client-core if client debugging is 
    860   enabled.  this allows easier visual inspection of restarts in logs 
    861 - fixed bug when copying credentials to first make sure that they're 
    862   valid in all sysint/mgmt calls 
    863 - added both server and client side (mgmt) operations to remove 
    864   arbitrary pvfs2 objects and directory entries without prejudice 
    865 - added a 'pvfs2-remove-object' tool that can remove pvfs2 objects and 
    866   directory entries (use is not generally encouraged) 
    867 - fixed pvfs2-fs-dump crash bugs when it fails to find some objects it 
    868   was expecting to see 
    869 - adjusted the time that pav allows for copying binaries out to remote 
    870   machines 
    871 - fixed bug bmi_tcp potential send deadlock under heavy loads 
    872 - added a mgmt method that allows parameter sets on single servers 
    873   (rather than the previous one that allowed only all servers) 
    874 - extended pvfs2-set-debugmask program to have the ability to set the 
    875   debug mask on a single server (rather than all) via cmdline options 
    876 - replaced TroveSyncMode configuration option with separate 
    877   TroveSyncMeta and TroveSyncData options.  the default values are yes 
    878   for both 
    879 - updated pvfs2-genconfig to reflect TroveSync* config option changes 
    880 - implemented understanding of the data sync mode option in the flow 
    881   interface via the setinfo method 
    882 - modified pvfs2-server to pass data sync mode option to the flow 
    883   implementation via setinfo on a per fs basis 
    884  
    885  
    886 pvfs2-0.6.1 
    887 =========== 
    888 - misc. updates to msgpairarray and associated tools to allow for 
    889   server side use 
    890 - reorganization of server request parameters so that more (but not 
    891   all yet) are stored in a centralized table 
    892 - removed some deprecated test programs 
    893 - new pint-util.[ch] to contain utility functions shared between 
    894   client and server 
    895 - some refactoring of server state machines (mainly crdirent) to allow 
    896   for code reuse in other state machines 
    897 - no longer need to fix up generated html by hand 
    898 - fixed a bug that allowed an open through the vfs without the O_CREAT 
    899   and O_EXCL flags to return -EEXIST (should be success in that case) 
    900 - added a file_open.c test program that tests opens in various modes 
    901 - error code cleanups (added PVFS_EACCES mapping to EACCES; moved 
    902   PVFS_EDETAIL to be a non-errno error code) 
    903 - fixed pvfs2-ls to properly convert reported file times in user's 
    904   configured system localtime, rather than in UTC 
    905 - fixed the kernel module information so that modinfo doesn't report 
    906   many duplicate entries 
    907 - fixed server pidfile usage (-p cmdline option) 
    908 - fixed msgpair retries to properly delay between retry attempts 
    909 - added trove hooks to be able to peek at handles that will be 
    910   allocated later 
    911 - cleaned up the remove state machine and removed an unnecessary 
    912   allocation/copy 
    913 - fixed existing acache usage in the sysint calls to be more uniform; 
    914   removed some overhead in the sysint 
    915 - fixed kernel device close to be aware if mounts are still active 
    916 - added more tests to pvfs2-shell-test that test deeply nested 
    917   subdirectories 
    918 - added a method to determine the min handle recycle time across all 
    919   configured servers' file systems 
    920 - changed code formatting rules to use spaces rather than tabs in vim 
    921 - fixed bug that didn't reload the cached config information on file 
    922   system removal (i.e. unmounts) 
    923 - added a cmdline argument to pvfs2-client to specify the acache 
    924   timeout to use at run-time (default is 0 milliseconds, which is 
    925   effectively disabled).  this timeout is upper bounded by the min 
    926   handle recycle time across all servers, and it can change 
    927   dynamically as new mounts come and go 
    928 - fixed a bug that allowed servers to create internal storage objects 
    929   outside of the meta handle ranges in some circumstances 
    930 - replace single element msgpair/array setup code where possible with 
    931   a macro 
    932  
    933  
    934 pvfs2-0.6.0 
    935 =========== 
    936 - removed pvfs2-import and pvfs2-export in favor of pvfs2-cp 
    937 - added compile time option for disabling thread-safety in the client 
    938   library (enabled by default; --disable-thread-safety to disable) 
    939 - improved configure summary information emitted at configure time 
    940 - added missing non-blocking sysint declarations to sysint header 
    941 - made sysint test and testsome() calls more useable 
    942 - merged dev unexp polling/handling with system interface 
    943 - added PINT_sys_dev_unexp call that allows posting unexpected device 
    944   messages so that they can be returned from the sysint testsome 
    945   method in addition to completed sysint operations 
    946 - added a id_gen_fast_unregister macro that is a no op, to make the 
    947   api more consistent with the id_gen_safe_* calls 
    948 - modified device driver to work properly in non-blocking mode from 
    949   userspace by implementing the character device poll method and 
    950   modified the pint-dev device interface to make sure it can handle 
    951   the pvfs2 device in a non-blocking manner; added a no immediate 
    952   completion option to the device interface; made test more efficient 
    953   by not polling if no idle time is specified; check for poll errors; 
    954   use proper buffer sizes for reads across the device 
    955 - added a method to free the mapped memory region on pvfs2-client-core 
    956   shutdown (valgrind complained) 
    957 - modified all job uses of the id-generator to use the safe, rather 
    958   than fast, methods (useful for several reasons including safe 
    959   cancellation of already completed operations) 
    960 - modified the job_dev_unexp method to have (and honor) the no 
    961   immediate completion flag if passed (used in the pvfs2-client-core) 
    962 - re-wrote pvfs2-client-core to use sysint non-blocking operations 
    963 - improved human readable size reporting 
    964 - allow human readable size reporting to optionally use si units 
    965 - added --si option to pvfs2-ls (similar to ls's --si option) 
    966 - added -H option to pvfs2-statfs (similar to du's -H option) 
    967 - added a method able to cancel I/O operations in progress 
    968 - removed kernel ability to kill device file on cancelled I/O 
    969 - added the ability of sys-io.sm to handle run-time cancellation while 
    970   still transitioning properly 
    971 - added support in the pvfs2-client for ignoring an upcall retry for 
    972   an op already in progress (as opposed to servicing it multiple 
    973   times) 
    974 - added kernel method that allows the cancellation upcall/downcall 
    975   cycle to progress, ignoring the fact that a signal is pending (since 
    976   the only time a cancellation is issued is when there's a signal 
    977   pending) 
    978 - fixed kernel oops on setattr (signal) interruption by returning a 
    979   valid error code in this case 
    980 - full acache cleanup, bugfixes, and thread-safety support 
    981 - allow the sysint post() method to complete an op if finished 
    982   (i.e. all states are immed. completion) by adding it to the 
    983   completion list (which test/testsome can retrieve) 
    984 - removed 'cached' attribute fields from getattr_sm object 
    985 - removed mostly duplicated code from shared-state-methods.c 
    986 - added support (testing only) for building a threaded client library 
    987 - gracefully terminate thread-mgr testing threads on errors (this is 
    988   only really useful for graceful shutdown of the threaded client 
    989   library) 
    990 - added a set_info option to bmi that tells it to be more aggressive 
    991   when cancelling operations (bmi_tcp will now close sockets) 
    992 - fixed kernel bugs that didn't release the bufmap indices in use on 
    993   some error paths (eventually caused all of them to be permanently 
    994   used which caused hangs on I/O) 
    995 - extended msgpairarray code to only retry msgpairs that haven't 
    996   completed already 
    997 - increased kernel module single operation timeout to be 60 seconds 
    998   instead of 30 seconds (note: as a side-effect this also extends the 
    999   amount of time you'll have to wait on interrupted operations via 
    1000   signal for now) 
    1001 - added PVFS_strerror_r; an equivalent to strerror_r (the thread-safe 
    1002   strerror call) that handles PVFS_error codes 
    1003 - added a simple file_write test program (tests are not in releases) 
    1004 - always delay for 1 second before spawning the pvfs2-client-core from 
    1005   within the pvfs2-client to avoid filling dmesg with harmful looking 
    1006   errors while restarting (and re-opening the device file) 
    1007 - new trove component called dbpf-open-cache that caches open file 
    1008   descriptors and db references; replaces dbpf-bstream-fd-cache, 
    1009   dbpf-dspace-db-cache, and dbpf-keyval-db-cache; fixes a few long 
    1010   standing file size and attribute bugs 
    1011 - added a few missing admin tools to make install target 
    1012 - more attribute debugging messages or server 
    1013 - added admin utility program pvfs2-chown 
    1014 - added make lib/pvfs2-threaded.a target that can be used to build a 
    1015   multithreaded version of the pvfs2 client library 
    1016 - thread safety for dynamic activation of bmi methods 
    1017 - fixed makefile LD selection and html docs target 
    1018 - fixed bmi deadlock that appears in multithreaded library 
    1019 - fixed responsiveness of pvfs2 kernel driver device poll 
    1020 - added new option to BMI called BMI_FORCEFUL_CANCEL_MODE to serve as 
    1021   a hint to modules to be more aggressive when cancelling operation 
    1022   (i.e., tell tcp to always close sockets when cancelling) 
    1023 - renamed pint-bucket component to pint-cached-config 
    1024 - enabled pint-cached-config on server side 
    1025 - unified how autogenerated .c files are tracked across client and 
    1026   server builds 
    1027 - fixed distclean for release tarballs so that it does not destroy .c 
    1028   files that cannot be regenerated without full cvs source 
    1029 - moved msgpairarry from client code to common code and made many 
    1030   adjustments to enable general usage; linked into server 
    1031 - misc. msgpairarray cleanups 
    1032 - removed depricated PINT_client_bmi_cancel() function 
    1033 - updated state machine compiler to allow multiple machine definitions 
    1034   per file 
    1035 - added new null job type that can be used to manually trigger 
    1036   asynchronous state machine transitions 
    1037 - refactored server side functions used to start state machines that 
    1038   are not tied to incoming requests 
    1039 - refactored server crdirent state machine using nested state machines 
    1040   and a little bit clearer error handling 
    1041 - added job functionality to reset timeout timer on pending jobs 
    1042 - removed old "contig" encoder from source tree 
    1043 - added new "cancel" debugging mask to look at job timeout behavior 
    1044 - documentation updates: a new high availability document, faq update, 
    1045   guide update, manpages 
    1046 - moved exported pvfs2-util string functions to private str-utils 
    1047 - added permission checking debugging mask and keyword to debug what 
    1048   the server is doing on permission granting or failure 
    1049 - modified cosmetic output of admin tool pvfs2-set-debugmask 
    1050 - make sure pvfs2-client doesn't cause a hang on ssh logout due to 
    1051   improperly closed fds; this was fixed in the past but unfixed to 
    1052   report exec failures.  we can't do that anymore with this setup, so 
    1053   we'll have to either require an absolute path to the client 
    1054   (preferred), or scan the PATH ourself to be sure it can be found; or 
    1055   log to a file like the server 
    1056 - added debugging regarding the handle re-use timeout 
    1057 - increased the default handle re-use timeout from 45 to 360 seconds 
    1058 - removed redefinition of the default handle timeout constant 
    1059 - change permissions to reasonable defaults on newly created 
    1060   directories using pvfs2-mkdir 
    1061 - extended pvfs2-cp to preserve src to dest permissions where 
    1062   applicable 
    1063 - extended pvfs2-cp to allow symlinks to be copied to and from pvfs2 
    1064   (as the link target file, not as a link -- similar to normal 'cp') 
    1065 - extended pvfs2-cp to truncate target files if they exist 
    1066 - added a threaded vfs test program to perform heavy I/O on a single 
    1067   file 
    1068 - fixed pvfs2-server to continue processing after recoverable 
    1069   BMI_testcontext errors 
    1070 - added some gossip debugging along the acache code path 
    1071 - kernel bugfixes: 
    1072   - don't attempt to shrink the sb's dcache on device close in the 
    1073     case that the sb has not yet been filled 
    1074   - translate error codes that occurred while waiting for the 
    1075     downcall, rather than assuming an error came back from the 
    1076     downcall (in the case that it didn't); fixes a possible oops on 
    1077     invalid mounts 
    1078   - use fully 64-bit op tags instead of relying on unreliable casts 
    1079     and assumptions moving from kernel space to userspace; changes use 
    1080     of an atomic_t type to a spinlock protected int64_t; works on ppc 
    1081     without problems now 
    1082 - changed pre-posted write_ack recv posting to have an infinite 
    1083   timeout that is reset on flow completion to avoid timeouts before 
    1084   operation completion 
    1085 - fixed crash bugs on (unexpected) job expiration in various places 
    1086 - fixed crash bugs when an invalid (or unsupported) encoding type is 
    1087   specified by reporting the error to the user, and the completing the 
    1088   operation if possible by cycling through the valid encoders 
    1089 - added pvfs2tab support for the line encoding=default 
    1090  
    1091  
    1092 pvfs2-0.5.1 
    1093 =========== 
    1094 - added a pidfile option to pvfs2-server for init script integration 
    1095 - auto-tuned BMI timeout to poll during activity, sleep a bit 
    1096   otherwise 
    1097 - pay attention to BMI timeouts in IB layer 
    1098 - fail quitely on unrecognized BMI method types in pvfs2tab 
    1099 - disabled TCP method for IB builds 
    1100 - added pvfs2-cp, which should have all of the functionaly of 
    1101   pvfs2-import and pvfs2-export, but none of the bugs (!) 
    1102 - bug fixed to idle detection logic in job.c (non-threaded case) 
    1103 - some tweaks to BMI timeout behavior 
    1104 - removal of some deprecated BMI code 
    1105 - bug fixed that caused problem when trying to add an invalid mount 
    1106   entry 
    1107 - bug fixed when trying to add general dynamic mount entries 
    1108 - distribution framework cleanups 
    1109 - updated test programs and pts test harness to use new distribution 
    1110   code 
    1111 - bug fixed that allows i/o attempts on non-datafiles to be handled 
    1112 - bug fixed that caused breakage on the verbose debugging mask 
    1113 - implemented non-blocking client library calls for all sysint and 
    1114   most mgmt operations 
    1115 - changed all credential arguments to credential references 
    1116 - export id-generator methods for sysint users 
    1117 - removed pvfs2-threaded-client-core application from code base 
    1118 - added pvfs2-mkdir program 
    1119 - added pvfs2-cp program (soon to replace both pvfs2-import & 
    1120   pvfs2-export) 
    1121 - added a GPL license notice in the top level files for the kernel 
    1122   module 
    1123 - moved cached configuration information our of the configuration 
    1124   object 
    1125 - allow server setattr operations to be performed even if write access 
    1126   on the object being modified is not granted (fixes utime failures 
    1127   and misc other permission problems like untarring some files) 
    1128 - kernel bugfixes: 
    1129   - fixed an oops on cancelled object operations (file,dir,symlink) 
    1130   - fixed kernel error codes in several places 
    1131   - fixed a memory leak that didn't free symlink targets 
    1132   - replaced new_inode call with iget to avoid the possibility of 
    1133     duplicate inodes with the same number in the vfs 
    1134   - fixed kernel create mode translation when creating new objects 
    1135 - kernel 2.4.x. support introduced (supports 2.4.19 and up) 
    1136 - allow pvfs2-client to restart on device open failure 
    1137 - updated quickstart with the following information: 
    1138   - gcc 2.96 or above is required (as gcc 2.95 generates buggy code) 
    1139   - how to use the kernel interface under 2.4.19 or above 
    1140 - misc cleanups, error handling, and debugging 
    1141  
    1142  
    1143 pvfs2-0.5.0 
    1144 =========== 
    1145 - consolidate msgpair and msgpairarray implementations 
    1146 - bug fixed in "make kmod" path handling 
    1147 - added ability to build kernel module and test programs to 
    1148   pvfs2-build.sh 
    1149 - added scripts (from Justin Luck) for nightly vfs testing 
    1150 - started nightly vfs testing (see pvfs2-testing mailing list) 
    1151 - implemented job cancel api 
    1152 - added job timeouts, and started using in both client & server 
    1153 - added ability to (manually) reconnect after transient failure in 
    1154   bmi_tcp 
    1155 - allow queueing of receives for failed bmi_tcp addresses that may get 
    1156   reconnected 
    1157 - removed some depricated client library code 
    1158 - started using PVFS_ECANCEL rather than PVFS_EINTR for cancelled 
    1159   operations 
    1160 - added bmi address reference counting 
    1161 - allow server to discard anonymous bmi addresses after connection has 
    1162   been closed (to conserve resources) 
    1163 - removed test subdirectory from distributed releases 
    1164 - cleanup of protocol version mismatch error messages, including a way 
    1165   to propigate errors detected on server back to client 
    1166 - fixed db cursor leak in trove 
    1167 - fixed for busy spin condition in client library when retrying 
    1168   operations 
    1169 - various cleanups to error handling in msgpairarray code 
    1170 - added some shell script testing and bonnie++ testing to automated 
    1171   tests 
    1172 - fixed pvfs2-ls handling of large usernames 
    1173 - fixed kernel bug that allowed you to remove the module while in use 
    1174 - kernel bufmap general I/O path improvements 
    1175 - increase the default size of the server-side attribute cache 
    1176   (configurable in pvfs2-genconfig) 
    1177 - randomize the file system IDs generated by pvfs2-genconfig 
    1178 - internal id-generator code enhancements 
    1179 - fixed a gcc compilation warning on older versions 
    1180 - added a new error code system that allows the addition of addition 
    1181   pvfs2 specific error codes for use within the system 
    1182 - added logic to automatically retry sends and receives of network 
    1183   operations on communication failure 
    1184 - proper unposting and cleanup of posted recvs that are no longer 
    1185   needed 
    1186 - added high level retry logic for system operations to help tolerate 
    1187   transient server failures 
    1188 - fixed truncate operation to properly return error code and not 
    1189   operate on anything that's not regular file 
    1190 - added a chdirent server operation that replaces an existing dirent 
    1191   and returns the old (useful for renames where the target exists) 
    1192 - refactored the client side remove state machine so that it can be 
    1193   used by both the remove and rename client operations 
    1194 - general cleanups and improvements to the client side rename 
    1195   operation 
    1196  
    1197  
    1198 pvfs2-0.1.3 
    1199 =========== 
    1200 - added event logging to request encoder, server state machines, and 
    1201   most job calls 
    1202 - some changes to the event logging mask system 
    1203 - some new test programs for event logging 
    1204 - fixed flow protocol handling of zero byte request processing results 
    1205 - moved pvfs2-client* to src/apps/kernel/linux-2.6 
    1206 - added an independent configure and make setup for test subdirectory 
    1207 - removed all dependencies on test subdirectory from src subdirectory 
    1208 - properly report if the pvfs2-client fails to execute the core 
    1209   program 
    1210 - reworked the error code handling in the kernel module to better 
    1211   match the userspace pvfs2 error codes 
    1212 - handle kernel mount attempts that fail without crashing 
    1213 - added support for the pvfs2-client-core to request that the kernel 
    1214   module pass all of the mount information it knows about back to the 
    1215   client so that a client restart can seamlessly pick up from where it 
    1216   left off 
    1217 - added a client/kernel umount operation that removes dynamic mount 
    1218   entries 
    1219 - properly report symlink types in the pvfs2-ls tool 
    1220 - fixed karma from hanging on start due to a previous api change 
    1221 - reworked the client side system interface to be able to handle 
    1222   dealing with multiple server configuration files at once 
    1223 - kernel now supports multiple mount points from different servers 
    1224 - kernel mount option parsing improvements and error handling 
    1225 - fixed broken configure options: --enable-karma and --disable-karma 
    1226 - better error handling and synchronization in the kernel module 
    1227 - fixed a kernel crash if pvfs2-client-core was restarted while 
    1228   another process was attempting to do I/O 
    1229 - added a mechanism for ensuring that remount operations are serviced 
    1230   first by the pvfs2-client-core on restart, rather than failing all 
    1231   pending operations until the mount tables are built 
    1232 - reworked the dbpf-attr-cache to use both fs_id and handle as the 
    1233   lookup key to allow it to work properly when multiple file systems 
    1234   are mounted 
    1235 - fixed a kernel crash bug that tried to overwrite pages at invalid 
    1236   offsets on read error 
    1237  
    1238  
    1239 pvfs2-0.1.2 
    1240 =========== 
    1241 - BMI IB module: 
    1242     - fix bug resulting in mixed-up connections 
    1243     - clean up incoming message processing 
    1244     - refactor test and testcontext code 
    1245     - simplify state machine 
    1246 - add shared and static libraries build options 
    1247 - honor PVFS2_DEBUGFILE environment variable in client 
    1248 - Kernel module builds: 
    1249     - build the module with everything else, if configured 
    1250     - clean up properly 
    1251     - work out-of-tree 
    1252 - Build system: 
    1253     - list explicit include directories 
    1254     - add cflags provided by module makefile stubs 
    1255     - install kernel module if configured 
    1256     - simplify dependency generator script, add .po 
    1257 - BMI: initialize needed methods dynamically, not at startup 
    1258 - add ability to force use of alternative pvfs2tab file at run time 
    1259 - general cleanup of API used for system interface initialization, 
    1260   including tabfile parsing 
    1261 - added reserved value for fsid type to indicate uninitialized value 
    1262 - BMI and flow interfaces now accept NULL list of modules to 
    1263   initialize defaults, BMI interprets this by delaying init of modules 
    1264   until needed, flow interface interprets by initializing all possible 
    1265   modules 
    1266 - new api functions for resolving local file system paths 
    1267 - added ability to dynamically add and remove file systems from the 
    1268   system interface at run time 
    1269 - fix request scheduler bug that was leading to odd behavior under 
    1270   heavy I/O load 
    1271 - added some scripts started by Wes Emeneker to automated the steps 
    1272   needed to download and build ROMIO with PVFS2 support 
    1273 - re-enable compilation of Jiesheng's caching flow protocol 
    1274 - added new automated nightly test scripts started by Wes Emeneker 
    1275   into test/automated subdir 
    1276 - started running automated tests on Adenine cluster at Clemson as a 
    1277   nightly cron job 
    1278 - isolated a request processing corner case with a test program 
    1279 - renamed PVFS_pinode_reference -> PVFS_object_ref to cleanup the 
    1280   system interface a little further 
    1281 - added some first stubs for hooks to specify distribution parameters 
    1282   at runtime 
    1283 - added more specific server and client side debugging keywords 
    1284 - enhanced vfs error reporting 
    1285 - client sysint cleanups and error reporting improvements 
    1286 - server operation cleanups and error reporting improvements 
    1287 - bmi error code translation hooks to work properly with pvfs2 error 
    1288   codes 
    1289 - fixed mmap-ra-cache bug that didn't flush data at the right times 
    1290 - made the mmap readahead cache functionality a configure option 
    1291   (enabled by default) 
    1292 - fixed vfs bug that caused multiple processes accessing the same file 
    1293   trigger a SIGBUS on file close 
    1294 - enhanced vfs test pvfs2-shell-test.sh to test a tricky case of 
    1295   filling and emptying the page cache repeatedly in a worst case 
    1296   scenario 
    1297 - start client sysint thread safety by making accesses to the global 
    1298   configuration object serialized 
    1299 - reworked the vfs statfs method to not cause overflows on some 
    1300   kernels 
    1301 - re-introduced a client sysint lookup optimization to work with the 
    1302   overhauled client lookup operation 
    1303 - fixed size reporting of symlinks in pvfs2-ls program 
    1304 - fixed vfs getattr calls for directories and symlinks 
    1305 - added an experimental testbed program for testing threaded client 
    1306   sysint operations based on the pvfs2-client-core (called 
    1307   pvfs2-threaded-client-core) 
    1308 - mostly consolidated credential generation to one place 
    1309 - modified the kernel mount and initialization to use the dynamic 
    1310   mount system, where a server and file system name is specific on the 
    1311   mount command line (no more hard coded coll_id and root_handle!) 
    1312 - fixed a particularly nasty vfs race bug that could crash the kernel 
    1313   during writes 
    1314 - fixed a vfs bug that could cause a client to think a file did not 
    1315   exist when in fact it did 
    1316 - added full support for dynamic vfs mount (which breaks the old way 
    1317   of mounting, but is more convenient and makes more sense) 
    1318 - Better documentation for building MPICH2+ROMIO+PVFS2 
    1319  
    1320  
    1321 pvfs2-0.1.1 
    1322 =========== 
    1323 - can now specify Trove sync behavior when setting up PVFS2 volumes w/ 
    1324   pav 
    1325 - added a new mpi-io test to exercise ROMIO's scalable operations 
    1326 - better detection of dead sockets in BMI TCP/IP module 
    1327 - fixed pvfs2tab file parsing bug 
    1328 - completely rewritten TCP/IP socket management 
    1329 - fixed potential server deadlock on shutdown bugs 
    1330 - fixed vfs bug that stalled the server on signal cancelled operations 
    1331 - enhance vfs support to ignore non-fatal signals caught while waiting 
    1332   for a remote operation to complete 
    1333 - added support for the "intr" mount option to allow any signal to 
    1334   interrupt remote operations (similar to the nfs option) 
    1335 - enhanced test/kernel/linux-2.6/pvfs2-shell-test.sh test script to 
    1336   test mmap reads and allow more run-time flexibility 
    1337  
    1338  
    1339 pvfs2-0.1.0 
    1340 =========== 
    1341 - initial support for logging traces with both MPE and Pablo libraries 
    1342 - fix some warnings on x86-64 
    1343 - work around older Berkeley-DB versions w/o support for DB_DIRTY_READ 
    1344 - implementation of cancel() in BMI, Trove, Flow, and thread mgmt 
    1345   interfaces 
    1346 - graceful recovery from I/O errors within flows 
    1347 - updated perf interface to return metadata access statistics 
    1348 - various bmi_tcp optimizations (cut down on system calls) 
    1349 - fixes to bmi_tcp cpu utilization 
    1350 - dynamic traffic graphs added to Karma 
    1351 - improved cleanup from messaging errors in client libraries 
    1352 - added ability to report partial errors with details from mgmt 
    1353   interface 
    1354 - revisited locking approach in jobs, flows, and bmi_gm 
    1355 - new config file option to control default Trove sync behavior 
    1356   (metadata) 
    1357 - pvfs2-genconfig update to generate default sync'd metadata sync mode 
    1358 - added experimental metadata mode (nosync, instead of sync) for 
    1359   allowing unsync'd operations to occur that reads from dirty memory 
    1360   (written but non-committed data) to help enhance performance 
    1361 - graceful shutdown when server gets ctrl-c (SIGINT) 
    1362 - pvfs2-ls output and argument bugfixes and better error reporting 
    1363 - handle allocator fix to no longer return invalid handles if no valid 
    1364   ranges have been registered 
    1365 - improved server version reporting and exit path (using --version/-v) 
    1366 - vfs kernel module warning removal (code without proper locks held) 
    1367 - fixed vfs bug that assigned incorrect link counts on new entries 
    1368 - fixed vfs bug that used uninitialized data structures when compiled 
    1369   without kernel debugging support 
    1370 - fixed vfs bug that didn't properly initialize root inode's 
    1371   handle/fs_id 
    1372 - fixed vfs bug that failed to adjust file position on files opened 
    1373   for append 
    1374 - fixed vfs bug that didn't properly rebuild attributes of files that 
    1375   could cause erroneous type changes in the vfs 
    1376 - fixed vfs bug that could not remove directories with more than 32 
    1377   entries in them 
    1378 - fixed potential vfs race regarding op queueing with a lock 
    1379   re-ordering 
    1380 - improved error reporting of error codes from pvfs2 through the vfs 
    1381 - improved error reporting and detection in the configuration parser 
    1382 - optimized server flush operation to only flush either metadata or 
    1383   data, depending on the object being worked on 
    1384 - test/server/showconfig output improvements 
    1385 - properly clean up meta and data handles during sys_create if the 
    1386   crdirent step fails 
    1387 - make pvfs2-import check if the target file exists before attempting 
    1388   to create it 
    1389 - pvfs2-fs-dump output improvements (made more readable) 
    1390 - added test/kernel/linux-2.6/pvfs2-shell-test.sh that is useful for 
    1391   running some simple vfs tests on a mounted pvfs2 volume 
    1392 - added configure option to allow the karma gui to not be built 
    1393 - fixed a bug that would not allow sysint initialization if the user 
    1394   does not have write permission in the current directory 
    1395 - properly cache attributes at create and write time instead of 
    1396   waiting until the first read is done 
    1397  
    1398  
    1399 pvfs2-0.0.9 
    1400 ============ 
    1401 - added karma administration (new gtk+ gui) for interactive monitoring 
    1402   of pvfs2 servers (statistics and performance) 
    1403 - fix support for creating/using/removing multiple collections (file 
    1404   systems) within a storage space 
    1405 - improved pvfs2-client backgrounding (better descriptor management) 
    1406 - pvfs2-ls improvements for handling multiple mount points specified 
    1407   on the same command line 
    1408 - capture some more data in the mgmt server statfs object, 
    1409   pvfs2-statfs program update 
    1410 - add kernel support for being an nfs exportable file system 
    1411 - add kernel support for being able to mount more than one pvfs2 volume 
    1412 - misc code cleanups and removals all over 
    1413 - test/client/sysint program bugfixes and cleanups 
    1414 - pvfstab parsing bugfix 
    1415 - pvfs2-ping and pvfs2-statfs support for multiple file systems 
    1416 - improved server error reporting if failure occurs before backgrounding 
    1417 - fix hang on server shutdown via signal 
    1418 - new maint script (pvfs2smdot.pl) for generating a graphical 
    1419   representation of the state machines and transitions (dotty format) 
    1420 - updates to state machine syntax, including support for comments and 
    1421   explicit termination of state machines 
    1422 - initial work on ability to gracefully cancel pending I/O operations 
    1423   within the system 
    1424 - sync and truncate bug fixes 
    1425 - mpi-io-test reports variance among processes 
    1426 - fix potential bug in le-bytefield encoder 
    1427 - use correct compiler flags with Intel cc 
    1428 - fixed and enhanced the pvfs2-mkspace program for creating/removing 
    1429   collections and storage spaces 
    1430 - adjusted all gossip masks to have a standard prefix 
    1431  
    1432          
    1433 pvfs2-0.0.8 
    1434 =========== 
    1435 - many alpha platform improvements, including configure check passes, 
    1436   compilation fixes, and vfs fixes (alignment/overflow bugs) 
    1437 - pvfs2-genconfig quiet mode improvements 
    1438 - removed extraneous sample server configuration files from source 
    1439   tree (can now be generated at compile time) 
    1440 - kernel mmap/readahead cache improvements and bug fixes 
    1441 - improved pvfs2-server signal handling, error reporting, and handling 
    1442 - added a configure/compile time option for allowing function 
    1443   backtraces on critical errors (see ./configure --help) and backtrace 
    1444   documentation for analyzing what they mean (see doc/coding/) 
    1445 - properly implement the rmdir operation through the kernel interface 
    1446 - improved dbpf-attr-cache error handling and serious bug fixes (race 
    1447   condition and potential memory corruption fixes) 
    1448 - race condition fixes on the trove dbpf-thread code, job thread 
    1449   manage, and job desc queueing code 
    1450 - a complete re-write of client side system interface lookup operation 
    1451   that now handles path components such as '.' and '..' and allows 
    1452   better absolute and relative recursive symlink resolution, including 
    1453   a new client debugging keyword/level specific to the lookup 
    1454   operation 
    1455 - added a symlink test to the pts test suite 
    1456 - added some test shell scripts to the test/client/sysint directory, 
    1457   mostly useful for stressing the new lookup operation 
    1458 - kernel and client side i/o path improvements that now gracefully 
    1459   handle errors such as the case of i/o happening on a file that is 
    1460   removed by another process 
    1461 - implemented a previously unimplemented kernel method (inode:getattr) 
    1462 - pvfs2-client command line parsing bug fix (no longer crashes on 
    1463   invalid args) 
    1464 - improvements to several test programs (in test/client/sysint) 
    1465 - removed several files and function that are no longer needed 
    1466 - on disk storage format is now versioned 
    1467 - bound acache size, while it's only holding invalid entries and 
    1468   growing too large 
    1469 - powerpc file size listing fixed in pvfs2-ls 
    1470 - added appendices to quickstart to cover a few more scenarios 
    1471 - more sanity checks in remove path (in particular for directories) 
    1472 - reorganized thread management for kernel / userspace communication 
    1473   used by pvfs2-client 
    1474 - some pvfs2-ls bug fixes 
    1475  
    1476  
    1477 pvfs2-0.0.7 
    1478 =========== 
    1479 - re-worked architecture of metadata storage (generic dspace attrs are 
    1480   used instead of a separate keyval/data pair) 
    1481 - added a server-side (trove-dbpf) attribute write-through caching 
    1482   layer for caching generic attributes and keyval/data pairs that are 
    1483   user configurable 
    1484 - added a readahead data cache specifically for vfs mmap-read and 
    1485   execution, improving their performance greatly (running, editing, 
    1486   compiling, etc on a pvfs2 volume is now much more responsive) 
    1487 - fix size reporting using 'du' through the vfs interface 
    1488 - GNU/Linux PowerPC 32bit support, including the 2.6.x kernel 
    1489   interface 
    1490 - updated pvfs2-genconfig to account for new config file format 
    1491 - fixed an I/O bug that caused data access problems on some multiple 
    1492   I/O server configurations 
    1493 - removed extra berkeley db error reporting since it's not integrated 
    1494   with our gossip error reporting system.  can now be explicitly 
    1495   enabled using a new configure option --with-berkdb-debug 
    1496 - fixes to state machine compiler to workaround hangs on some machines 
    1497 - new scripts in maint/build for building and testing PVFS2 
    1498 - better balancing (randomization) of metadata server selection when 
    1499   creating new files and directories 
    1500 - various error msg cleanups (in several components) 
    1501 - mutex locking improvements, allowing support for NPTL thread 
    1502   implementations and also improving performance for some operations 
    1503 - fixed a bug in client side lookup that can cause nested entries 
    1504   across multiple meta servers to work incorrectly (does not affect 
    1505   kernel interface) 
    1506  
    1507  
    1508 pvfs2-0.0.6 
    1509 =========== 
    1510 - improved kernel truncate support 
    1511 - fixed kernel ioctl return values (so that 'tar -xv[z|j]f' can work 
    1512   on pvfs2 volumes) 
    1513 - minor configuration file format changes 
    1514 - improved performance monitoring framework 
    1515 - pvfs2-vis-bw-2d tool for server throughput monitoring 
    1516 - many symbol name cleanups 
    1517 - removal of deprecated code 
    1518 - kernel inode link count fixes 
    1519 - bucketized (single indirection) 'on-disk' representation of bstream 
    1520   and keyval files in the host storage space 
    1521 - a pvfs2_rmspace (opposite of mkspace); can be invoked by server 
    1522   using the -r command line option 
    1523 - added kernel module highmem support 
    1524 - renamed attribute cache 'pcache' to 'acache' 
    1525 - large file support bug fixes 
    1526 - improved client sysint rename implementation (state-machine) 
    1527 - improved signal handling in pvfs2-client 
    1528 - switch to a new protocol encoder which translates requests and 
    1529   responses into a machine-independent format, allowing 
    1530   interoperability between 32- and 64-bit machines and little- and 
    1531   big-endian machines. 
    1532          
    1533          
    1534 pvfs2-0.0.5 
    1535 =========== 
    1536 - clean compilation on 64-bit machines 
    1537 - vfs stability improvements during I/O, including across client 
    1538   restarts 
    1539 - statfs reporting improvements (closer to correct) 
    1540 - sysint remove method fix to properly clean up datafiles 
    1541 - partial path symlink resolution support 
    1542 - vfs symlink resolution/following support (including partial path) 
    1543 - added sysint parameter to sys_lookup that dictates if the final 
    1544   object on lookup should be resolved if it's a symlink 
    1545 - runtime options to choose request encoder (see pvfs2tab man page) 
    1546 - new, much faster, default flow protocol 
    1547 - streamlined support for threaded and non-threaded server builds 
    1548  
    1549  
    1550 pvfs2-0.0.4 
    1551 =========== 
    1552 - improved truncate support (pcache usage/integration) 
    1553 - kernel truncate support (improved file size reporting) 
    1554 - removed several run-time verbose (expected) warnings 
    1555 - fixed a handle rollover bug in extentlist handler 
    1556 - fixed bit-rotted non-threaded trove/job compilation 
    1557 - improved client sysint readdir implementation (state-machine) 
    1558 - improved client sysint mkdir implementation (state-machine) 
    1559 - improved client sysint setattr implementation (state-machine) 
    1560 - improved client sysint lookup implementation (state-machine) 
    1561 - symlink resolution/following support 
    1562 - multiple metadata server configurations are now supported 
    1563 - pvfs2-genconfig can now generate multiple metadata server 
    1564   configurations 
    1565 - pav and pvfs2-genconfig now run in 'perl -w' mode w/o any warnings 
    1566 - added event logging framework, instrumented a few code paths 
    1567 - example tools to manage event log (pvfs2-set-eventmask and 
    1568   pvfs2-event-mon-example) 
    1569 - started some example perf monitor visualization tools, src/apps/vis 
    1570   subdir 
    1571 - new network encoding for heterogeneous systems (le-bytefield) 
    1572 - env variable to set client side debugging level 
    1573  
    1574          
    1575 pvfs2-0.0.3 
    1576 =========== 
    1577 - more pts tests for pvfs2 datatypes 
    1578 - ability to specify flowprotocol in pvfs2tab file per fs 
    1579 - truncate implementation 
    1580 - new flow design document 
    1581 - statfs implementation 
    1582 - rewritten mgmt interface, and several new functions 
    1583 - pvfs2-statfs admin tool 
    1584 - configurable handle timeout on server 
    1585 - fixed symbol name collisions with pvfs1 
    1586 - better sigpipe handling 
    1587 - added backtrace feature to gossip_lerr() 
    1588 - non interactive mode for pvfs2-genconfig 
    1589 - request scheduler support for timer events 
    1590 - server performance counters 
    1591 - mgmt functions and example tool (pvfs2-perf-mon-example) for 
    1592   gathering real time performance statistics from servers 
    1593 - added CREDITS file 
    1594 - addition of PAV (PVFS auto volume) tool for automated test runs 
    1595 - kernel rename() improvements 
    1596 - import of mpi-io-test program 
    1597 - redhat style rc script for server 
    1598 - addition of administrative mode for servers  
    1599 - pvfs2-set-mode admin tool to toggle admin mode for file system 
    1600 - mgmt API hooks necessary for fsck and dumping fs 
    1601 - beginning of pvfs2-fs-dump tool, that can show file system structure 
    1602   and potential problems, optional dotty output 
    1603 - "make dist" build target 
    1604 - removal of depricated test programs 
    1605 - man pages for many admin tools etc. 
    1606 - new/updated quickstart, users guide, and status document, README, 
    1607   and INSTALL 
    1608 - removal of depricated design documents 
    1609 - request scheduler support for batch/list operations 
    1610 - many many many bug fixes and code cleanups 
    1611 - vfs mmap and execution support (read-only) 
    1612  
    1613          
    1614 pvfs2-0.0.2 
    1615 =========== 
    1616 - server side memory leaks almost entirely eliminated                          
    1617 - configuration file options for specifying BMI and Flow modules               
    1618 - job level thread management optimizations                                    
    1619 - integration of a buffer cache into tree (not yet hooked up)                  
    1620 - support for symlinks                                                         
    1621 - support for vfs symlinks (can exist; can't be followed)                      
    1622 - symlink attributes are now able to be added to the pcache                    
    1623 - BMI infiniband driver merged in 
    1624 - new pvfstab format and parsing code 
    1625 - kernel module reports big block size on stat 
    1626 - job api changes to prevent client side race conditions 
    1627 - improved I/O path attribute caching 
    1628  
    1629  
    1630 pvfs2-0.0.1 
    1631 ========== 
    1632 - limited initial public release 
     18* BMI memory leak fix 
     19        CVS: Orange-Branch:bligon:20100831190531, 
     20             Orange-Branch:bligon:20100831190748, 
     21             Orange-Branch:bligon:20100902155433 
  • branches/cu-security-branch/configure

    r8474 r8509  
    14001400PVFS2_VERSION_MINOR=8 
    14011401PVFS2_VERSION_SUB=2 
     1402#PVFS2_VERSION_RELEASE="orangefs-20100920" 
    14021403#PVFS2_PRE="" 
    14031404PVFS2_VERSION_PRE="-orangefs-$CONFIGURE_TIME" 
     
    14201421_ACEOF 
    14211422 
    1422  
    1423  
    1424  
     1423#AC_DEFINE_UNQUOTED(PVFS2_VERSION_RELEASE, $PVFS2_VERSION_RELEASE, release version number) 
     1424 
     1425 
     1426 
     1427#AC_SUBST(PVFS2_VERSION_RELEASE) 
    14251428 
    14261429 
  • branches/cu-security-branch/configure.in

    r8474 r8509  
    2020PVFS2_VERSION_MINOR=8 
    2121PVFS2_VERSION_SUB=2 
     22#PVFS2_VERSION_RELEASE="orangefs-20100920" 
    2223#PVFS2_PRE="" 
    2324PVFS2_VERSION_PRE="-orangefs-$CONFIGURE_TIME" 
     
    2829AC_DEFINE_UNQUOTED(PVFS2_VERSION_MINOR, $PVFS2_VERSION_MINOR, minor version number) 
    2930AC_DEFINE_UNQUOTED(PVFS2_VERSION_SUB, $PVFS2_VERSION_SUB, sub version number) 
     31#AC_DEFINE_UNQUOTED(PVFS2_VERSION_RELEASE, $PVFS2_VERSION_RELEASE, release version number) 
    3032AC_SUBST(PVFS2_VERSION_MAJOR) 
    3133AC_SUBST(PVFS2_VERSION_MINOR) 
    3234AC_SUBST(PVFS2_VERSION_SUB) 
     35#AC_SUBST(PVFS2_VERSION_RELEASE) 
    3336 
    3437dnl BMI_ONLY_TAG 
  • branches/cu-security-branch/include/pvfs2-types.h

    r8430 r8509  
    279279 
    280280/** Object and attribute types. */ 
     281/* If this enum is modified the server parameters related to the precreate pool 
     282 * batch and low threshold sizes may need to be modified  to reflect this  
     283 * change. Also, the PVFS_DS_TYPE_COUNT #define below must be updated */ 
    281284typedef enum 
    282285{ 
     
    292295#define decode_PVFS_ds_type decode_enum 
    293296#define encode_PVFS_ds_type encode_enum 
     297#define PVFS_DS_TYPE_COUNT      7      /* total number of DS types defined in 
     298                                        * the PVFS_ds_type enum */ 
     299 
     300 
     301/* helper to translate bit-shifted enum types to array index number in the  
     302 * range (0-(PVFS_DS_TYPE_COUNT-1)) */ 
     303#define PVFS_ds_type_to_int(__type, __intp)         \ 
     304do {                                                \ 
     305    uint32_t r = 0;                                 \ 
     306    PVFS_ds_type t = __type;                        \ 
     307    if( t == 0 )                                    \ 
     308    {                                               \ 
     309        *((uint32_t *)__intp) = 0;                  \ 
     310    }                                               \ 
     311    else                                            \ 
     312    {                                               \ 
     313        while( t >>=1 )                             \ 
     314        {                                           \ 
     315            r++;                                    \ 
     316        }                                           \ 
     317        *((uint32_t *)__intp) = r+1;                \ 
     318    }                                               \ 
     319} while( 0 ) 
     320 
     321/* helper to translate array index int to a proper PVFS_ds_type bit-shifted 
     322 * value */ 
     323#define int_to_PVFS_ds_type(__i, __typep)           \ 
     324do {                                                \ 
     325    if( __i == 0 )                                  \ 
     326    {                                               \ 
     327        *((PVFS_ds_type *)__typep) = 0;             \ 
     328    }                                               \ 
     329    else                                            \ 
     330    {                                               \ 
     331        *((PVFS_ds_type *)__typep) = 1 << (__i - 1);\ 
     332    }                                               \ 
     333} while(0) 
    294334 
    295335#ifdef __KERNEL__ 
  • branches/cu-security-branch/src/apps/admin/pvfs2-genconfig

    r8397 r8509  
    212212    print $target "\tClientRetryLimit 5\n"; 
    213213    print $target "\tClientRetryDelayMilliSecs 2000\n"; 
    214     print $target "\tPrecreateBatchSize 512\n"; 
    215     print $target "\tPrecreateLowThreshold 256\n"; 
     214    print $target "\tPrecreateBatchSize 0,32,512,32,32,32,0\n"; 
     215    print $target "\tPrecreateLowThreshold 0,16,256,16,16,16,0\n"; 
    216216 
    217217    if(defined($default_storage)) 
  • branches/cu-security-branch/src/apps/devel/pvfs2-db-display.c

    r8397 r8509  
    5555void print_collection_attr( DBT key, DBT val ); 
    5656void print_help(char *progname); 
     57void print_ds_type( PVFS_ds_type type ); 
    5758int process_args(int argc, char ** argv); 
    5859 
     
    6061{ 
    6162    DB *db_p = NULL; 
     63    DB_ENV *dbe_p = NULL; 
    6264    char *path = NULL; 
    63     u_int32_t flags = DB_RDONLY; 
    64     u_int32_t type = DB_UNKNOWN; 
     65    u_int32_t db_flags = DB_RDONLY|DB_THREAD,  
     66              env_flags = DB_CREATE | DB_INIT_MPOOL, 
     67              type = DB_UNKNOWN; 
    6568    int ret, path_len;  
    6669 
     
    8083    } 
    8184 
     85    ret = db_env_create(&dbe_p, 0); 
     86    if (ret != 0)  
     87    { 
     88        printf("Error creating env handle: %s\n", db_strerror(ret)); 
     89        return -1; 
     90    } 
     91 
     92    /* Open the environment. */ 
     93    ret = dbe_p->open(dbe_p, 
     94                      opts.dbpath, 
     95                      env_flags, 
     96                      0); 
     97    if (ret != 0)  
     98    { 
     99        printf("Environment open failed: %s", db_strerror(ret)); 
     100        return -1; 
     101    }  
     102 
    82103    /* open and print each database */ 
    83104 
    84105    /* collection database */ 
    85106    sprintf(path, "%s/%s", opts.dbpath, COLLECTION_FILE ); 
    86     ret = open_db( &db_p, path, type, flags); 
     107    ret = open_db( &db_p, path, type, db_flags); 
    87108    if (ret == 0)  
    88109    { 
     
    91112        close_db(db_p); 
    92113    } 
    93  
     114     
    94115    /* storage database */ 
    95116    memset(path, path_len, sizeof(char)); 
    96117    sprintf(path, "%s/%s", opts.dbpath, STORAGE_FILE ); 
    97     ret = open_db( &db_p, path, type, flags); 
     118    ret = open_db( &db_p, path, type, db_flags); 
    98119    if (ret == 0)  
    99120    { 
     
    106127    memset(path, path_len, sizeof(char)); 
    107128    sprintf(path, "%s/%s/%s", opts.dbpath, opts.hexdir, DATASPACE_FILE ); 
    108     ret = open_db( &db_p, path, type, flags); 
     129    ret = open_db( &db_p, path, type, db_flags); 
    109130    if (ret == 0)  
    110131    { 
     
    117138    memset(path, path_len, sizeof(char)); 
    118139    sprintf(path, "%s/%s/%s", opts.dbpath, opts.hexdir, KEYVAL_FILE ); 
    119     ret = open_db( &db_p, path, type, flags); 
     140    ret = open_db( &db_p, path, type, db_flags); 
    120141    if (ret == 0)  
    121142    { 
     
    128149    memset(path, path_len, sizeof(char)); 
    129150    sprintf(path, "%s/%s/%s", opts.dbpath, opts.hexdir, COLLECTION_ATTR_FILE ); 
    130     ret = open_db( &db_p, path, type, flags); 
     151    ret = open_db( &db_p, path, type, db_flags); 
    131152    if (ret == 0)  
    132153    { 
     
    136157    } 
    137158 
     159    dbe_p->close(dbe_p, 0); 
     160 
    138161    free(path); 
    139162    return 0; 
     
    186209    if( ret != 0 ) 
    187210    { 
    188         printf("Unable to open cursor to print collection: %s\n",  
     211        printf("Unable to open cursor to print db: %s\n",  
    189212               db_strerror(ret)); 
    190213        return; 
     
    198221    { 
    199222        print( key, val ); 
     223        memset(key.data, 0, key.size); 
     224        memset(val.data, 0, val.size); 
    200225    } 
    201226 
     
    239264 
    240265    printf("(%llu)(%d) -> ", llu(k), key.size); 
    241  
    242     switch( v->type ) 
    243     { 
    244         case PVFS_TYPE_NONE:  
    245             printf("(type: none)"); 
    246             break; 
    247         case PVFS_TYPE_METAFILE:  
    248             printf("(type: metafile)"); 
    249             break; 
    250         case PVFS_TYPE_DATAFILE:  
    251             printf("(type: datafile)"); 
    252             break; 
    253         case PVFS_TYPE_DIRECTORY:  
    254             printf("(type: directory)"); 
    255             break; 
    256         case PVFS_TYPE_SYMLINK: 
    257              printf("(type: symlink)"); 
    258             break; 
    259         case PVFS_TYPE_DIRDATA:  
    260             printf("(type: dirdata)"); 
    261             break; 
    262         case PVFS_TYPE_INTERNAL:  
    263             printf("(type: internal)"); 
    264             break; 
    265         default:  
    266             printf("type: unknown"); 
    267             break; 
    268     } 
     266  
     267    print_ds_type( v->type ); 
    269268 
    270269    printf("(fsid: %d)(handle: %llu)(uid: %u)(gid: %u)" 
     
    280279{ 
    281280    struct dbpf_keyval_db_entry *k; 
    282     uint64_t vh; 
     281    uint64_t vh, kh; 
    283282    uint32_t vi; 
    284283 
     
    289288    { 
    290289        printf("()(%d) -> ", key.size); 
     290    } 
     291    else if( key.size == 16 ) 
     292    { 
     293        kh = *(uint64_t *)k->key; 
     294        printf("(%llu)(%d) -> ", llu(kh), key.size); 
    291295    } 
    292296    else 
     
    318322    } 
    319323  
    320     else if( key.size == 8 && val.size == 4 ) 
     324    else if( (key.size == 8 || key.size == 16 ) && val.size == 4 ) 
    321325    { 
    322326        vi = *(uint32_t *)val.data; 
    323327        printf("(%u)(%d)\n", vi, val.size ); 
    324  
    325328    } 
    326329/* 
     
    447450} 
    448451 
     452void print_ds_type( PVFS_ds_type type ) 
     453{ 
     454    switch( type ) 
     455    { 
     456        case PVFS_TYPE_NONE:  
     457            printf("(type: none)"); 
     458            break; 
     459        case PVFS_TYPE_METAFILE:  
     460            printf("(type: metafile)"); 
     461            break; 
     462        case PVFS_TYPE_DATAFILE:  
     463            printf("(type: datafile)"); 
     464            break; 
     465        case PVFS_TYPE_DIRECTORY:  
     466            printf("(type: directory)"); 
     467            break; 
     468        case PVFS_TYPE_SYMLINK: 
     469             printf("(type: symlink)"); 
     470            break; 
     471        case PVFS_TYPE_DIRDATA:  
     472            printf("(type: dirdata)"); 
     473            break; 
     474        case PVFS_TYPE_INTERNAL:  
     475            printf("(type: internal)"); 
     476            break; 
     477        default:  
     478            printf("type: unknown"); 
     479            break; 
     480    } 
     481} 
     482 
    449483/* 
    450484 * Local variables: 
  • branches/cu-security-branch/src/common/misc/server-config.c

    r8397 r8509  
    667667 
    668668     /* Specifies the number of handles to be preceated at a time from each 
    669       * server using the batch create request. 
     669      * server using the batch create request. One value is specified for each 
     670      * type of DS handle. Order is important, it matches the order the types  
     671      * are defined in the PVFS_ds_type enum, which lives in  
     672      * include/pvfs2-types.h. If that enum changes, it must be changed here  
     673      * to match. Currently, this parameter follows the order: 
     674      *   
     675      *  PVFS_TYPE_NONE 
     676      *  PVFS_TYPE_METAFILE 
     677      *  PVFS_TYPE_DATAFILE 
     678      *  PVFS_TYPE_DIRECTORY 
     679      *  PVFS_TYPE_SYMLINK 
     680      *  PVFS_TYPE_DIRDATA 
     681      *  PVFS_TYPE_INTERNAL 
     682      * 
    670683      */ 
    671684     {"PrecreateBatchSize",ARG_INT, get_precreate_batch_size,NULL, 
    672685         CTX_DEFAULTS|CTX_SERVER_OPTIONS, "512"}, 
    673   
    674      /* Precreate pools will be "topped off" if they fall below this value */ 
    675      {"PrecreateLowThreshold",ARG_INT, get_precreate_low_threshold,NULL, 
    676          CTX_DEFAULTS|CTX_SERVER_OPTIONS, "256"}, 
     686 
     687     /* Precreate pools will be "topped off" if they fall below this value.  
     688      * One value is specified for each DS handle type. This parameter operates 
     689      * the same as the PrecreateBatchSize in that each count coorespends to  
     690      * one DS handle type. The order of types is identical to the  
     691      * PrecreateBatchSize defined above.  */ 
     692     {"PrecreateLowThreshold",ARG_LIST, get_precreate_low_threshold,NULL, 
     693         CTX_DEFAULTS|CTX_SERVER_OPTIONS, "0, 16, 256, 16, 16, 16, 0"}, 
    677694 
    678695    /* Specifies if file stuffing should be enabled or not.  Default is 
     
    10551072    config_s->client_retry_delay_ms = PVFS2_CLIENT_RETRY_DELAY_MS_DEFAULT; 
    10561073    config_s->trove_max_concurrent_io = 16; 
    1057     config_s->precreate_batch_size = PVFS2_PRECREATE_BATCH_SIZE_DEFAULT; 
    1058     config_s->precreate_low_threshold = PVFS2_PRECREATE_LOW_THRESHOLD_DEFAULT; 
    10591074 
    10601075    if (cache_config_files(config_s, global_config_filename)) 
     
    16081623    struct server_configuration_s *config_s =  
    16091624        (struct server_configuration_s *)cmd->context; 
     1625    int i = 0, j = 0, token_count = 0, counts[7], count_count=0; 
     1626    char **tokens; 
     1627 
    16101628    if(config_s->configuration_context == CTX_SERVER_OPTIONS && 
    16111629       config_s->my_server_options == 0) 
     
    16131631        return NULL; 
    16141632    } 
    1615     config_s->precreate_batch_size = cmd->data.value; 
     1633 
     1634    if (config_s->precreate_batch_size != NULL)  
     1635    { 
     1636        free(config_s->precreate_batch_size); 
     1637        config_s->precreate_batch_size = NULL; 
     1638    } 
     1639 
     1640    /* so this seems silly but a config option of type ARG_LIST doesn't 
     1641     * split on commas (which is claimed to be the delimiter) but on white  
     1642     * space. That could possibly be fixed. So, until it is we have to handle  
     1643     * the possibility of multiple arguments with some number of values per  
     1644     * argument. */ 
     1645    for(i = 0; i < cmd->arg_count; i++) 
     1646    { 
     1647        token_count = PINT_split_string_list( &tokens, cmd->data.list[i]); 
     1648        for(j = 0; j < token_count; ++j) 
     1649        { 
     1650            counts[count_count++] = atoi(tokens[j]); 
     1651        } 
     1652        PINT_free_string_list(tokens, token_count); 
     1653    } 
     1654 
     1655    /* make sure we scrounged up the right number of values */ 
     1656    if( count_count != PVFS_DS_TYPE_COUNT )  
     1657    { 
     1658        return "PrecreateBatchSize must contain counts for each DS " 
     1659               "type in the order NONE, METAFILE, DATAFILE, DIRECTORY, " 
     1660               "SYMLINK, DIRDATA, INTERNAL\n"; 
     1661    } 
     1662 
     1663    config_s->precreate_batch_size = calloc( PVFS_DS_TYPE_COUNT, sizeof(int)); 
     1664    if( config_s->precreate_batch_size == NULL ) 
     1665    { 
     1666        return "PrecreateBatchSize malloc failure"; 
     1667    } 
     1668 
     1669    for( i = 0; i < count_count; i++ ) 
     1670    { 
     1671        config_s->precreate_batch_size[i] = counts[i]; 
     1672    } 
     1673 
    16161674    return NULL; 
    16171675} 
     
    16211679    struct server_configuration_s *config_s =  
    16221680        (struct server_configuration_s *)cmd->context; 
     1681    int i = 0, j = 0, token_count = 0, counts[7], count_count=0; 
     1682    char **tokens; 
     1683 
    16231684    if(config_s->configuration_context == CTX_SERVER_OPTIONS && 
    16241685       config_s->my_server_options == 0) 
     
    16261687        return NULL; 
    16271688    } 
    1628     config_s->precreate_low_threshold = cmd->data.value; 
     1689 
     1690    if (config_s->precreate_low_threshold != NULL)  
     1691    { 
     1692        free(config_s->precreate_low_threshold); 
     1693        config_s->precreate_low_threshold = NULL; 
     1694    } 
     1695 
     1696    /* handle multiple values per arguments, gross */ 
     1697    for(i = 0; i < cmd->arg_count; i++) 
     1698    { 
     1699        token_count = PINT_split_string_list( &tokens, cmd->data.list[i]); 
     1700        for(j = 0; j < token_count; ++j) 
     1701        { 
     1702            counts[count_count++] = atoi(tokens[j]); 
     1703        } 
     1704        PINT_free_string_list(tokens, token_count); 
     1705    } 
     1706 
     1707    /* make sure we scrounged up the right number of values */ 
     1708    if( count_count != PVFS_DS_TYPE_COUNT )  
     1709    { 
     1710        return "PrecreateLowThreshold must contain counts for each DS " 
     1711               "type in the order NONE, METAFILE, DATAFILE, DIRECTORY, " 
     1712               "SYMLINK, DIRDATA, INTERNAL\n"; 
     1713    } 
     1714 
     1715    config_s->precreate_low_threshold =  
     1716        calloc( PVFS_DS_TYPE_COUNT, sizeof(int)); 
     1717    if( config_s->precreate_low_threshold == NULL ) 
     1718    { 
     1719        return "PrecreateLowThreshold malloc failure"; 
     1720    } 
     1721 
     1722    for( i = 0; i < count_count; i++ ) 
     1723    { 
     1724        config_s->precreate_low_threshold[i] = counts[i]; 
     1725    } 
     1726 
    16291727    return NULL; 
    16301728} 
     
    30183116            free(config_s->fs_config_buf); 
    30193117            config_s->fs_config_buf = NULL; 
     3118        } 
     3119 
     3120        if(config_s->precreate_batch_size) 
     3121        { 
     3122            free(config_s->precreate_batch_size); 
     3123            config_s->precreate_batch_size = NULL; 
     3124        } 
     3125 
     3126        if(config_s->precreate_low_threshold) 
     3127        { 
     3128            free(config_s->precreate_low_threshold); 
     3129            config_s->precreate_low_threshold = NULL; 
    30203130        } 
    30213131 
  • branches/cu-security-branch/src/common/misc/server-config.h

    r8397 r8509  
    160160    int  perf_update_interval;      /* how quickly (in msecs) to 
    161161                                       update perf monitor              */ 
    162     int  precreate_batch_size; 
    163     int  precreate_low_threshold; 
     162    uint32_t  *precreate_batch_size;    /* batch size for each ds type */ 
     163    uint32_t  *precreate_low_threshold; /* threshold for each ds type */ 
    164164    char *logfile;                  /* what log file to write to */ 
    165165    char *logtype;                  /* "file" or "syslog" destination */ 
  • branches/cu-security-branch/src/common/misc/state-machine-fns.c

    r8397 r8509  
    6767         /* this will loop from TOS down to the base frame */ 
    6868         /* base frame will not be processed */ 
     69 
     70         gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"[SM Terminating Child]: my_frame:%p\n",my_frame); 
    6971         qlist_for_each_entry(f, &smcb->parent_smcb->frames, link) 
    7072         { 
     
    7678         } 
    7779 
     80        gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"[SM Terminating Child]: children_running:%d\n" 
     81                                               ,smcb->parent_smcb->children_running); 
    7882        if (--smcb->parent_smcb->children_running <= 0) 
    7983        { 
     
    8387            job_null(0, smcb->parent_smcb, 0, r, &id, smcb->context); 
    8488        } 
    85         return SM_ACTION_DEFERRED; 
    86     } 
     89    } 
     90 
    8791    /* call state machine completion function */ 
    8892    if (smcb->terminate_fn) 
    8993    { 
     94        if (smcb->parent_smcb) 
     95        { 
     96            gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"[SM Terminating Child]: calling terminate function.\n"); 
     97        }    
    9098        (*smcb->terminate_fn)(smcb, r); 
    9199    } 
     
    545553    struct PINT_frame_s *frame_entry, *tmp; 
    546554    assert(smcb); 
     555 
     556    gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"PINT_smcb_free: smcb:%p\n",smcb); 
     557 
    547558    qlist_for_each_entry_safe(frame_entry, tmp, &smcb->frames, link) 
    548559    { 
     560        if (frame_entry->frame) 
     561        { 
     562           gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"PINT_smcb_free: frame:%p \ttask-id:%d\n" 
     563                                                  ,frame_entry->frame 
     564                                                  ,frame_entry->task_id); 
     565        } 
     566        else 
     567        { 
     568           gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"PINT_smcb_free: NO FRAME ENTRIES.\n"); 
     569        } 
     570 
    549571        if (frame_entry->frame && frame_entry->task_id == 0) 
    550572        { 
    551573            /* only free if task_id is 0 */ 
    552574            free(frame_entry->frame); 
    553         } 
     575        }  
    554576        qlist_del(&frame_entry->link); 
    555577        free(frame_entry); 
     
    739761static int child_sm_frame_terminate(struct PINT_smcb * smcb, job_status_s * js_p) 
    740762{ 
     763    gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"CHILD TERMINATE: smcb:%p.\n",smcb); 
     764 
    741765    PINT_smcb_free(smcb); 
    742766    return 0; 
     
    803827        /* assign frame */ 
    804828        PINT_sm_push_frame(new_sm, f->task_id, f->frame); 
     829 
    805830        /* locate SM to run */ 
     831        gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"START CHILD FRAMES: calling smcb is %p.\n",smcb); 
     832        gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"START CHILD FRAMES: with frame: %p.\n",f->frame); 
     833        gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"START CHILD FRAMES: and task id: %d.\n",f->task_id); 
    806834        new_sm->current_state = PINT_sm_task_map(smcb, f->task_id); 
     835 
     836        gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"START CHILD FRAMES: new_sm->current_state is %s\n:" 
     837                                    ,(new_sm->current_state)?"VALID":"INVALID"); 
     838        if (new_sm->current_state) 
     839        { 
     840            gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"START CHILD FRAMES: new_sm->current_state->flag is %d\n" 
     841                                        ,new_sm->current_state->flag); 
     842        } 
     843 
    807844        /* invoke SM */ 
    808845        retval = PINT_state_machine_start(new_sm, &r); 
  • branches/cu-security-branch/src/io/job/job-desc-queue.h

    r8397 r8509  
    6262    PVFS_ds_position pool_index; 
    6363    int count; 
     64    PVFS_ds_type type;              /* ds type of operation */ 
    6465     
    6566    PVFS_error error_code; 
  • branches/cu-security-branch/src/io/job/job.c

    r8397 r8509  
    8080    PVFS_handle pool_handle; 
    8181    uint32_t pool_count;  
     82    PVFS_ds_type pool_type;     /* ds type of pool */ 
    8283}; 
    8384 
     
    8687    struct qlist_head list_link; 
    8788    PVFS_fs_id fsid; 
     89    /* store the batch count parameter inside the struct. this lets us 
     90     * return einval if we get called with a type that has a batch count of 0 */ 
     91    uint32_t type_batch_count[PVFS_DS_TYPE_COUNT];  
    8892    struct qlist_head precreate_pool_list; 
    8993    struct qlist_head* precreate_pool_initial; 
     
    37883792} 
    37893793 
     3794 
     3795/* job_trove_fs_del_eattr() 
     3796 * 
     3797 * delete extended attribute for a file system 
     3798 * 
     3799 * returns 0 on success, 1 on immediate completion, and -errno on 
     3800 * failure 
     3801 */ 
     3802int job_trove_fs_deleattr(PVFS_fs_id coll_id, 
     3803                          PVFS_ds_keyval * key_p, 
     3804                          PVFS_ds_flags flags, 
     3805                          void *user_ptr, 
     3806                          job_aint status_user_tag, 
     3807                          job_status_s * out_status_p, 
     3808                          job_id_t * id, 
     3809                          job_context_id context_id, 
     3810                          PVFS_hint hints) 
     3811{ 
     3812    /* post a trove collection del eattr.  If it completes (or fails) 
     3813     * immediately, then return and fill in the status structure. 
     3814     * If it needs to be tested for completion later, then queue 
     3815     * up a job_desc structure.  */ 
     3816    int ret = -1; 
     3817    struct job_desc *jd = NULL; 
     3818    void* user_ptr_internal; 
     3819 
     3820    /* create the job desc first, even though we may not use it.  This 
     3821     * gives us somewhere to store the BMI id and user ptr 
     3822     */ 
     3823    jd = alloc_job_desc(JOB_TROVE); 
     3824    if (!jd) 
     3825    { 
     3826        out_status_p->error_code = -PVFS_ENOMEM; 
     3827        return 1; 
     3828    } 
     3829    jd->hints = hints; 
     3830    jd->job_user_ptr = user_ptr; 
     3831    jd->context_id = context_id; 
     3832    jd->status_user_tag = status_user_tag; 
     3833    jd->trove_callback.fn = trove_thread_mgr_callback; 
     3834    jd->trove_callback.data = (void*)jd; 
     3835    user_ptr_internal = &jd->trove_callback; 
     3836 
     3837#ifdef __PVFS2_TROVE_SUPPORT__ 
     3838    ret = trove_collection_deleattr(coll_id, key_p, flags, 
     3839                                    user_ptr_internal, global_trove_context, 
     3840                                    &(jd->u.trove.id)); 
     3841#else 
     3842    gossip_err("%s: error: Trove support not enabled.\n", __func__); 
     3843    ret = -ENOSYS; 
     3844#endif 
     3845 
     3846    if (ret < 0) 
     3847    { 
     3848        /* error posting trove operation */ 
     3849        dealloc_job_desc(jd); 
     3850        jd = NULL; 
     3851        out_status_p->error_code = ret; 
     3852        out_status_p->status_user_tag = status_user_tag; 
     3853        return (1); 
     3854    } 
     3855 
     3856    if (ret == 1) 
     3857    { 
     3858        /* immediate completion */ 
     3859        out_status_p->error_code = 0; 
     3860        out_status_p->status_user_tag = status_user_tag; 
     3861        dealloc_job_desc(jd); 
     3862        jd = NULL; 
     3863        return (ret); 
     3864    } 
     3865 
     3866    /* if we fall through to this point, the job did not 
     3867     * immediately complete and we must queue up to test later 
     3868     */ 
     3869    *id = jd->job_id; 
     3870    trove_pending_count++; 
     3871 
     3872    return (0); 
     3873} 
     3874 
    37903875/* job_null() 
    37913876 * 
     
    46044689                pool->pool_count += jd->u.precreate_pool.posted_count; 
    46054690                gossip_debug(GOSSIP_JOB_DEBUG,  
    4606                     "Pool count for handle %llu incremented to %d\n",  
    4607                     llu(pool->pool_handle),  
     4691                    "Pool count for handle %llu (type %u) incremented to %d\n", 
     4692                    llu(pool->pool_handle), pool->pool_type,  
    46084693                    pool->pool_count); 
    46094694                break; 
     
    54335518int job_precreate_pool_lookup_server( 
    54345519    const char* host,  
     5520    PVFS_ds_type type, 
    54355521    PVFS_fs_id fsid,  
    54365522    PVFS_handle* pool_handle) 
     
    54505536        pool = qlist_entry(iterator, struct precreate_pool, 
    54515537            list_link); 
    5452         if(!strcmp(pool->host, host)) 
     5538        /* only sleep for pools of the type we need to fulfill the request */ 
     5539        if(!strcmp(pool->host, host) && (pool->pool_type == type) ) 
    54535540        { 
    54545541            *pool_handle = pool->pool_handle; 
     
    55255612int job_precreate_pool_register_server( 
    55265613    const char* host,  
     5614    PVFS_ds_type type, 
    55275615    PVFS_fs_id fsid,  
    55285616    PVFS_handle pool_handle,  
    5529     int count) 
     5617    int count, 
     5618    uint32_t *batch_count) 
    55305619{ 
    55315620    struct precreate_pool* tmp_pool; 
     
    55505639    tmp_pool->pool_handle = pool_handle; 
    55515640    tmp_pool->pool_count = count; 
     5641    tmp_pool->pool_type = type; 
    55525642    gossip_debug(GOSSIP_JOB_DEBUG,  
    5553         "Pool count for handle %llu initially set to %d\n",  
    5554         llu(tmp_pool->pool_handle),  
     5643        "Pool count for handle %llu (type %u) initially set to %d\n",  
     5644        llu(tmp_pool->pool_handle), tmp_pool->pool_type,  
    55555645        tmp_pool->pool_count); 
    55565646 
    55575647    gossip_debug(GOSSIP_JOB_DEBUG, 
    5558         "Initial pool count for host %s, fsid %d: %d\n", host, (int)fsid, 
    5559         count); 
     5648        "Initial pool count for host %s, fsid %d, type %u: %d\n", host,  
     5649        (int)fsid, tmp_pool->pool_type, count); 
    55605650 
    55615651    /* search through file systems to see if we have registered anything for 
     
    55755665        memset(fs, 0, sizeof(*fs)); 
    55765666        fs->fsid = fsid; 
     5667 
     5668        /* copy batch counts we are given into fs_pool struct */ 
     5669        memcpy(fs->type_batch_count, batch_count,  
     5670               sizeof(uint32_t)*PVFS_DS_TYPE_COUNT); 
     5671        int i = 0; 
     5672        for( i=0; i < PVFS_DS_TYPE_COUNT; i++ ) 
     5673        { 
     5674            gossip_debug(GOSSIP_JOB_DEBUG, "%s: fs_pool %p, storing batch " 
     5675                         "count at index %d: %u\n", __func__, fs, i,  
     5676                         fs->type_batch_count[i]); 
     5677        } 
     5678 
     5679 
    55775680        fs->precreate_pool_initial = NULL; 
    55785681        INIT_QLIST_HEAD(&fs->precreate_pool_list); 
     
    56235726                out_status_p->error_code = 0; 
    56245727                gen_mutex_unlock(&precreate_pool_mutex); 
    5625                 gossip_debug(GOSSIP_JOB_DEBUG, "found pool count low.\n"); 
     5728                gossip_debug(GOSSIP_JOB_DEBUG, "found pool count low for " 
     5729                             "for pool handle %llu.\n", llu(pool->pool_handle)); 
    56265730                return(1); 
    56275731            } 
     
    56465750                qlist_add(&jd->job_desc_q_link, &precreate_pool_check_level_list); 
    56475751                gen_mutex_unlock(&precreate_pool_mutex); 
    5648                 gossip_debug(GOSSIP_JOB_DEBUG, "found pool count high.\n"); 
     5752                gossip_debug(GOSSIP_JOB_DEBUG, "found pool count high for pool " 
     5753                             "handle %llu.\n", llu(pool->pool_handle) ); 
    56495754                return(0); 
    56505755            } 
     
    56695774    PVFS_fs_id fsid, 
    56705775    int count, 
     5776    PVFS_ds_type type, 
    56715777    const char** servers, 
    56725778    PVFS_handle* handle_array, 
     
    56815787    struct job_desc *jd = NULL; 
    56825788    struct fs_pool* fs; 
     5789    int index = 0; 
    56835790 
    56845791    if(count < 0) 
     
    56885795    } 
    56895796 
     5797    gossip_debug(GOSSIP_JOB_DEBUG, "%s: requesting %d handles of type %u\n", 
     5798                 __func__, count, type); 
    56905799    jd = alloc_job_desc(JOB_PRECREATE_POOL); 
    56915800    if (!jd) 
     
    57055814    jd->u.precreate_pool.trove_pending = 0; 
    57065815    jd->u.precreate_pool.flags = flags; 
     5816    jd->u.precreate_pool.type = type; 
    57075817 
    57085818    /* rotate to use a different starting server in the pool next time */ 
     
    57105820    fs = find_fs(fsid); 
    57115821    assert(fs); 
     5822 
     5823    /* make sure the requested type is actually trying to get handles (i.e. has 
     5824     * a batch count bigger than 0). if not, return einval */ 
     5825    PVFS_ds_type_to_int(type, &index); 
     5826    assert(fs->type_batch_count); 
     5827    if( fs->type_batch_count[index] < 1 ) 
     5828    { 
     5829        gen_mutex_unlock(&precreate_pool_mutex); 
     5830        out_status_p->error_code = -PVFS_EINVAL; 
     5831        return 1; 
     5832    } 
     5833 
    57125834    jd->u.precreate_pool.current_pool = fs->precreate_pool_initial; 
    57135835    fs->precreate_pool_initial = fs->precreate_pool_initial->next; 
     
    57385860    struct qlist_head* scratch; 
    57395861    struct job_desc* jd_checker; 
    5740     int i; 
     5862    int i, total_pool_count=0, j=0; 
    57415863    struct fs_pool* fs; 
    57425864 
     
    57535875        pool = qlist_entry(iterator, struct precreate_pool, 
    57545876            list_link); 
    5755         if(pool->pool_count < 1) 
     5877        /* only queue up for the type the call is looking for. no reason to 
     5878         * to wait on a type we don't need. it should get filled later */ 
     5879        if((pool->pool_count < 1) &&  
     5880           (jd->u.precreate_pool.type == pool->pool_type) ) 
    57565881        { 
    57575882            /* queue up until the count for this pool increases */ 
    57585883            qlist_add(&jd->job_desc_q_link, &precreate_pool_get_handles_list); 
    5759             gossip_debug(GOSSIP_JOB_DEBUG, "Found empty precreate pool %llu\n", llu(pool->pool_handle)); 
    5760              
     5884            gossip_debug(GOSSIP_JOB_DEBUG, "Found empty precreate pool %llu\n",  
     5885                         llu(pool->pool_handle)); 
    57615886            gen_mutex_unlock(&precreate_pool_mutex); 
    57625887            return; 
     
    58015926                pool = qlist_entry(iterator, struct precreate_pool, 
    58025927                    list_link); 
    5803                 if(!strcmp(pool->host, jd->u.precreate_pool.servers[i])) 
     5928                /* in addition to matching host name, now we also make 
     5929                 * sure it's the correct type of pool for the specified 
     5930                 * server */ 
     5931                if( (!strcmp(pool->host, jd->u.precreate_pool.servers[i])) && 
     5932                    (pool->pool_type == jd->u.precreate_pool.type) ) 
    58045933                { 
    58055934                    jd->u.precreate_pool.current_pool = iterator; 
     
    58295958        else 
    58305959        { 
    5831             /* caller wants whatever we hand out */ 
     5960            /* caller wants whatever we hand out so we only need to check 
     5961             * that the pool is of the correct type. use the original code 
     5962             * to either start the process or move to the next. afterwards, 
     5963             * we cycle until we get to the right type */ 
    58325964            if(jd->u.precreate_pool.current_pool == NULL || 
    58335965                jd->u.precreate_pool.current_pool->next == &fs->precreate_pool_list) 
     
    58425974                    jd->u.precreate_pool.current_pool->next; 
    58435975            } 
    5844         } 
    5845  
    5846         tmp_trove_array[i].pool = qlist_entry(jd->u.precreate_pool.current_pool,  
     5976 
     5977            /* ensure we don't loop forever, we want to look through at most 
     5978             * total_pool_count pools no matter the place in the list we start 
     5979             * at. if we don't find a pool, then there isn't a pool with the 
     5980             * requested type. we'll call that einval below.*/ 
     5981            j = 0; 
     5982            total_pool_count = qlist_count( &fs->precreate_pool_list ); 
     5983            gossip_debug( GOSSIP_SERVER_DEBUG, "%s: total pool count %d\n", 
     5984                         __func__, total_pool_count); 
     5985 
     5986            /* maybe too succinct? get the pool entry from the qlist, then 
     5987             * if we haven't looked through too many items and we actually 
     5988             * got a pool item, see if it matches types. if not, assign the next 
     5989             * pool and do it again. */ 
     5990            do 
     5991            { 
     5992                pool = qlist_entry(jd->u.precreate_pool.current_pool,  
     5993                                   struct precreate_pool, list_link); 
     5994            } 
     5995            while( ( j++ < total_pool_count ) && ( pool != NULL ) &&  
     5996                   ( pool->pool_type != jd->u.precreate_pool.type ) &&  
     5997                   ( jd->u.precreate_pool.current_pool =  
     5998                     jd->u.precreate_pool.current_pool->next) ); 
     5999 
     6000            /* either we got something null, we iterated through pool count  
     6001             * items or, hopefully, we found a pool of the correct type! 
     6002             * look at the pool's type, if it's wrong, exit */ 
     6003            if(pool->pool_type != jd->u.precreate_pool.type) 
     6004            { 
     6005                gossip_err("Error %s : could not find pool of " 
     6006                           "type %u\n", __func__, jd->u.precreate_pool.type); 
     6007 
     6008                free(tmp_trove_array); 
     6009                gen_mutex_unlock(&precreate_pool_mutex); 
     6010 
     6011                gen_mutex_lock(&completion_mutex);         
     6012                jd->u.precreate_pool.error_code = -PVFS_EINVAL; 
     6013                job_desc_q_add(completion_queue_array[jd->context_id], jd); 
     6014                jd->completed_flag = 1; 
     6015        #ifdef __PVFS2_JOB_THREADED__ 
     6016                /* wake up anyone waiting for completion */ 
     6017                pthread_cond_signal(&completion_cond); 
     6018        #endif 
     6019                gen_mutex_unlock(&completion_mutex);         
     6020                return; 
     6021            } 
     6022        } 
     6023 
     6024        tmp_trove_array[i].pool = qlist_entry(jd->u.precreate_pool.current_pool, 
    58476025            struct precreate_pool, list_link); 
    58486026 
     
    58656043        tmp_trove_array[i].pool->pool_count--; 
    58666044        gossip_debug(GOSSIP_JOB_DEBUG,  
    5867             "Pool count for handle %llu decremented to %d\n",  
     6045            "Pool count for handle %llu (type %u) decremented to %d\n",  
    58686046            llu(tmp_trove_array[i].pool->pool_handle),  
     6047            tmp_trove_array[i].pool->pool_type, 
    58696048            tmp_trove_array[i].pool->pool_count); 
    58706049 
     
    59406119 * stored in the precreate pools, including the handles for the pool objects 
    59416120 * themselves. 
     6121 * mtmoore: need to expose types through this interface 
    59426122 */ 
    59436123int job_precreate_pool_iterate_handles( 
  • branches/cu-security-branch/src/io/job/job.h

    r8397 r8509  
    612612                          PVFS_ds_keyval * key_p, 
    613613                          PVFS_ds_keyval * val_p, 
     614                          PVFS_ds_flags flags, 
     615                          void *user_ptr, 
     616                          job_aint status_user_tag, 
     617                          job_status_s * out_status_p, 
     618                          job_id_t * id, 
     619                          job_context_id context_id, 
     620                          PVFS_hint hints); 
     621 
     622/* delete extended attributes for a file system */ 
     623int job_trove_fs_deleattr(PVFS_fs_id coll_id, 
     624                          PVFS_ds_keyval * key_p, 
    614625                          PVFS_ds_flags flags, 
    615626                          void *user_ptr, 
     
    677688    PVFS_fs_id fsid, 
    678689    int count, 
     690    PVFS_ds_type type, 
    679691    const char** servers, 
    680692    PVFS_handle* handle_array, 
     
    689701int job_precreate_pool_register_server( 
    690702    const char* host,  
     703    PVFS_ds_type type, 
    691704    PVFS_fs_id fsid,  
    692705    PVFS_handle pool_handle,  
    693     int count); 
     706    int count, 
     707    uint32_t *batch_count); 
    694708  
    695709int job_precreate_pool_lookup_server( 
    696710    const char* host,  
     711    PVFS_ds_type type, 
    697712    PVFS_fs_id fsid,  
    698713    PVFS_handle* pool_handle); 
  • branches/cu-security-branch/src/io/trove/trove-dbpf/README

    r6958 r8509  
    5353 
    5454dbpf_collection_geteattr() 
     55 
     56dbpf_collection_deleattr() 
    5557 
    5658dbpf_initialize() -- called once before DBPF interface is used (?) 
  • branches/cu-security-branch/src/io/trove/trove-dbpf/dbpf-mgmt.c

    r8397 r8509  
    572572} 
    573573 
     574int dbpf_collection_deleattr(TROVE_coll_id coll_id, 
     575                             TROVE_keyval_s *key_p, 
     576                             TROVE_ds_flags flags, 
     577                             void *user_ptr, 
     578                             TROVE_context_id context_id, 
     579                             TROVE_op_id *out_op_id_p) 
     580{ 
     581    int ret = -TROVE_EINVAL; 
     582    struct dbpf_storage *sto_p = NULL; 
     583    struct dbpf_collection *coll_p = NULL; 
     584    DBT db_key; 
     585 
     586    sto_p = my_storage_p; 
     587    if (sto_p == NULL) 
     588    { 
     589        return ret; 
     590    } 
     591    coll_p = dbpf_collection_find_registered(coll_id); 
     592    if (coll_p == NULL) 
     593    { 
     594        return ret; 
     595    } 
     596 
     597    memset(&db_key, 0, sizeof(db_key)); 
     598    db_key.data = key_p->buffer; 
     599    db_key.size = key_p->buffer_sz; 
     600 
     601    ret = coll_p->coll_attr_db->del(coll_p->coll_attr_db, 
     602                                    NULL, &db_key, 0); 
     603    if (ret != 0) 
     604    { 
     605        gossip_lerr("%s: %s\n", __func__, db_strerror(ret)); 
     606        return -dbpf_db_error_to_trove_error(ret); 
     607    } 
     608 
     609    ret = coll_p->coll_attr_db->sync(coll_p->coll_attr_db, 0); 
     610    if (ret != 0) 
     611    { 
     612        gossip_lerr("%s: %s\n", __func__, db_strerror(ret)); 
     613        return -dbpf_db_error_to_trove_error(ret); 
     614    } 
     615 
     616    return 1; 
     617} 
     618 
    574619static int dbpf_initialize(char *data_path, 
    575620                           char *meta_path, 
     
    23192364    dbpf_collection_getinfo, 
    23202365    dbpf_collection_seteattr, 
    2321     dbpf_collection_geteattr 
     2366    dbpf_collection_geteattr, 
     2367    dbpf_collection_deleattr 
    23222368}; 
    23232369 
     
    23412387    dbpf_collection_getinfo, 
    23422388    dbpf_collection_seteattr, 
    2343     dbpf_collection_geteattr 
     2389    dbpf_collection_geteattr, 
     2390    dbpf_collection_deleattr 
    23442391}; 
    23452392 
  • branches/cu-security-branch/src/io/trove/trove-dbpf/dbpf.h

    r8397 r8509  
    3131 */ 
    3232#define TROVE_DBPF_VERSION_KEY                       "trove-dbpf-version" 
    33 #define TROVE_DBPF_VERSION_VALUE                                  "0.1.4" 
     33#define TROVE_DBPF_VERSION_VALUE                                  "0.1.5"    
    3434 
    3535#define LAST_HANDLE_STRING                                  "last_handle" 
     
    759759                             TROVE_op_id *out_op_id_p); 
    760760 
     761int dbpf_collection_deleattr(TROVE_coll_id coll_id, 
     762                             TROVE_keyval_s *key_p, 
     763                             TROVE_ds_flags flags, 
     764                             void *user_ptr, 
     765                             TROVE_context_id context_id, 
     766                             TROVE_op_id *out_op_id_p); 
     767 
    761768int dbpf_finalize(void); 
    762769 
  • branches/cu-security-branch/src/io/trove/trove-internal.h

    r8397 r8509  
    467467                               TROVE_context_id context_id, 
    468468                               TROVE_op_id *out_op_id_p); 
     469 
     470    int (*collection_deleattr)( 
     471                               TROVE_coll_id coll_id, 
     472                               TROVE_keyval_s *key_p, 
     473                               TROVE_ds_flags flags, 
     474                               void *user_ptr, 
     475                               TROVE_context_id context_id, 
     476                               TROVE_op_id *out_op_id_p); 
    469477}; 
    470478 
  • branches/cu-security-branch/src/io/trove/trove-migrate.c

    r8397 r8509  
    88#include <stdio.h> 
    99#include <string.h> 
     10#include <assert.h> 
    1011#include "pvfs2-internal.h" 
    1112#include "trove.h" 
    1213#include "gossip.h" 
    1314#include "trove-dbpf/dbpf.h" 
     15#include "pint-cached-config.h" 
     16#include "server-config-mgr.h" 
    1417 
    1518#undef DEBUG_MIGRATE_PERF 
     
    4649                                     const char* data_path, 
    4750                                     const char* meta_path); 
     51static int migrate_collection_0_1_5 (TROVE_coll_id coll_id, 
     52                                     const char* data_path, 
     53                                     const char* meta_path); 
    4854 
    4955/* 
     
    6571{ 
    6672    { 0, 1, 3, migrate_collection_0_1_3 }, 
     73    { 0, 1, 5, migrate_collection_0_1_5 }, 
    6774    { 0, 0, 0, NULL } 
    6875}; 
     
    207214    } 
    208215 
     216    /* set the size to a correct value, not 32 */ 
     217    data.buffer_sz = strlen(data.buffer); 
    209218    ret = trove_collection_seteattr(coll_id, &key, &data, 0, NULL, 
    210219                                    context_id, &op_id); 
     
    694703    return ret; 
    695704} 
     705 
     706 
     707/* 
     708 * migrate_collection_0_1_5 
     709 *   coll_id   - collection id 
     710 *   data_path - path to data storage 
     711 *   meta_path - path to metadata storage 
     712 * 
     713 * Migrate existing precreate pool keys held in the collection attributes 
     714 * to include the handle type (PVFS_TYPE_DATAFILE) in the key. Since prior 
     715 * to this version only PVFS_TYPE_DATAFILE handles existed in a pool this 
     716 * is an easy conversion to make  
     717 * 
     718 * \return 0 on success, non-zero on failure 
     719 */ 
     720static int migrate_collection_0_1_5 (TROVE_coll_id coll_id,  
     721                                     const char* data_path, 
     722                                     const char* meta_path) 
     723{ 
     724    int ret=0, i=0, server_count=0, server_type=0, count=0, pool_key_len=0; 
     725    const char *host; 
     726    /* hostname + pool key string + handle type size */ 
     727    char pool_key[PVFS_MAX_SERVER_ADDR_LEN + 28] = { 0 }; 
     728    char type_string[11] = { 0 }; 
     729    TROVE_context_id  context_id = PVFS_CONTEXT_NULL; 
     730    TROVE_keyval_s key, data; 
     731    TROVE_op_id delattr_op_id, getattr_op_id, setattr_op_id; 
     732    TROVE_ds_state state; 
     733    PVFS_BMI_addr_t* addr_array = NULL; 
     734    PVFS_handle handle = PVFS_HANDLE_NULL; 
     735 
     736    struct server_configuration_s *user_opts = get_server_config_struct(); 
     737    assert(user_opts); 
     738 
     739    gossip_debug(GOSSIP_TROVE_DEBUG, "%s: %d, %s, %s\n",  
     740                 __func__, coll_id, data_path, meta_path); 
     741 
     742    ret = trove_open_context(coll_id, &context_id); 
     743    if (ret < 0) 
     744    { 
     745        gossip_err("%s: trove_open_context failed: ret=%d coll=%d\n", __func__,  
     746                    ret, coll_id); 
     747        return ret; 
     748    } 
     749 
     750    /* for completeness we will check even if this server claims it's not a  
     751     * metadata server to make sure we get all precreate pool handles updated. 
     752     * If it doesn't have any defined then our geteattr calls will just return 
     753     * with no record, Also check all peer servers for a precreate pool for 
     754     * the same reason (and it's easier anyway). */ 
     755    ret = PINT_cached_config_count_servers( coll_id, PINT_SERVER_TYPE_ALL,  
     756                                            &server_count); 
     757    if(ret < 0) 
     758    { 
     759        gossip_err("%s: error: unable to count servers for fsid: %d\n", 
     760                   __func__, (int)coll_id); 
     761        return ret; 
     762    } 
     763 
     764    addr_array = calloc(server_count, sizeof(PVFS_BMI_addr_t)); 
     765    if(!addr_array) 
     766    { 
     767        gossip_err("%s: error: unable to allocate addr array for precreate " 
     768                   "pools.\n", __func__); 
     769        ret = -PVFS_ENOMEM; 
     770        goto complete; 
     771    } 
     772 
     773    /* resolve addrs for each I/O server */ 
     774    ret = PINT_cached_config_get_server_array(coll_id, PINT_SERVER_TYPE_ALL,  
     775                                              addr_array, &server_count); 
     776    if(ret < 0) 
     777    { 
     778        gossip_err("%s: error: unable retrieve servers addrs\n", __func__); 
     779        goto complete; 
     780    } 
     781        
     782    /* check each server for a precreate pool and check for only one pool since 
     783     * that's all there was prior to this version */ 
     784    for(i=0; i<server_count; i++) 
     785    { 
     786        host = PINT_cached_config_map_addr(coll_id, addr_array[i],  
     787                                           &server_type); 
     788        /* potential host with precreate pool entry */ 
     789        memset(&key,  0, sizeof(key)); 
     790        memset(&data, 0, sizeof(data)); 
     791        memset(pool_key, 0, PVFS_MAX_SERVER_ADDR_LEN + 28); 
     792 
     793        pool_key_len = strlen(host) + strlen("precreate-pool-") + 1; 
     794        key.buffer = pool_key; 
     795        key.buffer_sz = pool_key_len; 
     796        key.read_sz = 0; 
     797 
     798        snprintf((char*)key.buffer, key.buffer_sz, "precreate-pool-%s", host); 
     799        data.buffer    = &handle; 
     800        data.buffer_sz = sizeof(handle); 
     801        data.read_sz = 0; 
     802 
     803        gossip_debug(GOSSIP_TROVE_DEBUG, "%s: looking for pool key\n",  
     804                     __func__); 
     805        gossip_debug(GOSSIP_TROVE_DEBUG, "%s: key(%s)(%d)(%d)\n",  
     806                     __func__, (char *)key.buffer, key.buffer_sz, key.read_sz); 
     807        gossip_debug(GOSSIP_TROVE_DEBUG, "%s: data(%s)(%d)(%d)\n",  
     808                   __func__, (char *)data.buffer, data.buffer_sz, data.read_sz); 
     809        ret = trove_collection_geteattr(coll_id, &key, &data, 0, NULL,  
     810                                        context_id, &getattr_op_id); 
     811        if (ret < 0) 
     812        { 
     813            gossip_err("%s: trove_collection_getattr failed for pool key %s " 
     814                       "ret=%d coll=%d context=%lld op=%lld\n", __func__, 
     815                       pool_key, ret, coll_id, llu(context_id),  
     816                       llu(getattr_op_id)); 
     817            continue; 
     818        }  
     819        TROVE_DSPACE_WAIT(ret, coll_id, getattr_op_id, context_id, count, state, 
     820                          complete); 
     821        gossip_debug(GOSSIP_TROVE_DEBUG, "%s: found pool key\n", __func__); 
     822        gossip_debug(GOSSIP_TROVE_DEBUG, "%s: key(%s)(%d)(%d)\n",  
     823                     __func__, (char *)key.buffer, key.buffer_sz, key.read_sz); 
     824        gossip_debug(GOSSIP_TROVE_DEBUG, "%s: data(%llu)(%d)(%d)\n",  
     825                     __func__, llu(*(PVFS_handle *)data.buffer), data.buffer_sz, 
     826                     data.read_sz); 
     827 
     828        ret = trove_collection_deleattr(coll_id, &key, 0, NULL, context_id,  
     829                                        &delattr_op_id); 
     830        if (ret < 0) 
     831        { 
     832            gossip_err("%s: trove_collection_delattr failed: \ 
     833                       ret=%d coll=%d context=%lld op=%lld\n", __func__, 
     834                       ret, coll_id, llu(context_id), llu(delattr_op_id)); 
     835            goto complete; 
     836        }  
     837        TROVE_DSPACE_WAIT(ret, coll_id, delattr_op_id, context_id, count, state, 
     838                          complete); 
     839        gossip_debug(GOSSIP_TROVE_DEBUG, "%s: removed old pool key\n",  
     840                     __func__); 
     841 
     842        /* munge to new key */ 
     843        snprintf(type_string, 11, "%u", PVFS_TYPE_DATAFILE); 
     844        memset(pool_key, 0, PVFS_MAX_SERVER_ADDR_LEN + 28); 
     845        snprintf(pool_key, PVFS_MAX_SERVER_ADDR_LEN + 28, 
     846                 "precreate-pool-%s-%s", host, type_string); 
     847 
     848        /* reset the length to include room for the type */ 
     849        pool_key_len = strlen(host) + strlen(type_string) + 
     850                       strlen("precreate-pool-") + 2; 
     851        key.buffer_sz  = pool_key_len; 
     852  
     853        gossip_debug(GOSSIP_TROVE_DEBUG, "%s: adding new pool key (%s) -> " 
     854                     "(%llu)\n", __func__, (char *)key.buffer,  
     855                     llu(*(PVFS_handle *)data.buffer)); 
     856        ret = trove_collection_seteattr(coll_id, &key, &data, 0, NULL,  
     857                                        context_id, &setattr_op_id); 
     858        if (ret < 0) 
     859        { 
     860            gossip_err("%s: trove_collection_setattr failed: \ 
     861                       ret=%d coll=%d context=%lld op=%lld\n", __func__, 
     862                       ret, coll_id, llu(context_id), llu(setattr_op_id)); 
     863            goto complete; 
     864        }  
     865        TROVE_DSPACE_WAIT(ret, coll_id, setattr_op_id, context_id, count, state, 
     866                          complete); 
     867        gossip_debug(GOSSIP_TROVE_DEBUG, "%s: successfully migrated pool %s\n", 
     868                     __func__, (char *)key.buffer); 
     869    } // for each server 
     870 
     871    /* if we just came out of the loop force ret to 0, we don't want a bad 
     872     * key lookup to spoil the whole migration (since it's expected) */ 
     873    ret = 0;  
     874 
     875complete: 
     876    if (context_id != PVFS_CONTEXT_NULL) 
     877    { 
     878        int rc = trove_close_context(coll_id, context_id); 
     879        if (rc < 0) 
     880        { 
     881            ret = rc; 
     882            gossip_err("%s: trove_close_context failed: ret=%d coll=%d " \ 
     883                       "context=%lld\n", __func__, ret, coll_id,  
     884                       llu(context_id)); 
     885        } 
     886    } 
     887 
     888    if( addr_array ) 
     889    { 
     890        free(addr_array); 
     891    } 
     892 
     893    return ret; 
     894} 
  • branches/cu-security-branch/src/io/trove/trove.c

    r7941 r8509  
    11961196} 
    11971197 
     1198int trove_collection_deleattr( 
     1199    TROVE_coll_id coll_id, 
     1200    TROVE_keyval_s* key_p, 
     1201    TROVE_ds_flags flags, 
     1202    void* user_ptr, 
     1203    TROVE_context_id context_id, 
     1204    TROVE_op_id* out_op_id_p) 
     1205{ 
     1206    TROVE_method_id method_id; 
     1207 
     1208    method_id = global_trove_method_callback(coll_id); 
     1209    if(method_id < 0) 
     1210    { 
     1211        return -TROVE_EINVAL; 
     1212    } 
     1213 
     1214    return mgmt_method_table[method_id]->collection_deleattr( 
     1215           coll_id, 
     1216           key_p, 
     1217           flags, 
     1218           user_ptr, 
     1219           context_id, 
     1220           out_op_id_p); 
     1221} 
     1222 
    11981223int trove_collection_getinfo( 
    11991224    TROVE_coll_id coll_id, 
  • branches/cu-security-branch/src/io/trove/trove.h

    r8397 r8509  
    522522                              TROVE_op_id *out_op_id_p); 
    523523 
     524int trove_collection_deleattr( 
     525                              TROVE_coll_id coll_id, 
     526                              TROVE_keyval_s *key_p, 
     527                              TROVE_ds_flags flags, 
     528                              void *user_ptr, 
     529                              TROVE_context_id context_id, 
     530                              TROVE_op_id *out_op_id_p); 
     531 
    524532int trove_collection_getinfo( 
    525533                             TROVE_coll_id coll_id, 
  • branches/cu-security-branch/src/kernel/linux-2.6/pvfs2-kernel.h

    r8404 r8509  
    976976do {                                                         \ 
    977977    struct list_head *tmp = NULL;                            \ 
     978    struct list_head *tmp_safe = NULL;                       \ 
    978979    pvfs2_kernel_op_t *tmp_op = NULL;                        \ 
    979980                                                             \ 
    980981    spin_lock(&pvfs2_request_list_lock);                     \ 
    981     list_for_each(tmp, &pvfs2_request_list) {                \ 
     982    list_for_each_safe(tmp, tmp_safe, &pvfs2_request_list) { \ 
    982983        tmp_op = list_entry(tmp, pvfs2_kernel_op_t, list);   \ 
    983984        if (tmp_op && (tmp_op == op)) {                      \ 
     
    10791080do {                                                                 \ 
    10801081    struct list_head *tmp = NULL;                                    \ 
     1082    struct list_head *tmp_safe = NULL;                               \ 
    10811083    pvfs2_sb_info_t *pvfs2_sb = NULL;                                \ 
    10821084                                                                     \ 
    10831085    spin_lock(&pvfs2_superblocks_lock);                              \ 
    1084     list_for_each(tmp, &pvfs2_superblocks) {                         \ 
     1086    list_for_each_safe(tmp, tmp_safe, &pvfs2_superblocks) {          \ 
    10851087        pvfs2_sb = list_entry(tmp, pvfs2_sb_info_t, list);           \ 
    10861088        if (pvfs2_sb && (pvfs2_sb->sb == sb)) {                      \ 
  • branches/cu-security-branch/src/server/create-immutable-copies.sm

    r8403 r8509  
    44 * See COPYING in top-level directory. 
    55 */ 
     6 
     7/* adding a comment */ 
    68 
    79#include <stdlib.h> 
     
    137139        pjmp copy_data 
    138140        { 
    139            LOCAL_SRC  => pvfs2_mirror_work_sm; 
    140            REMOTE_SRC => pvfs2_call_msgpairarray_sm;  
     141           LOCAL_SRC  => pvfs2_pjmp_mirror_work_sm; 
     142           REMOTE_SRC => pvfs2_pjmp_call_msgpairarray_sm;  
    141143        } 
    142144        success => check_copy_results; 
     
    194196 
    195197} /*end nested state machine pvfs2_create_immutable_copies_sm*/ 
    196  
    197 %% 
    198  
    199 %% 
    200 nested machine pvfs2_call_msgpairarray_sm 
    201 { 
    202    state call_msgpairarray 
    203     { 
    204         run call_msgpairarray; 
    205         success => transfer_msgpair; 
    206         default => cleanup_msgpairarray; 
    207     } 
    208  
    209    state transfer_msgpair 
    210     { 
    211          jump pvfs2_msgpairarray_sm; 
    212          default => cleanup_msgpairarray; 
    213     } 
    214  
    215    state cleanup_msgpairarray 
    216     { 
    217         run cleanup_msgpairarray; 
    218         default => return; 
    219     } 
    220 } /*end nested state machine pvfs2_call_msgpairarray_sm*/ 
    221198%% 
    222199 
     
    1000977 
    1001978  ret = job_precreate_pool_get_handles(imm_p->fs_id 
    1002                                        ,rows*cols 
    1003                                        ,(const char **)imm_p->my_remote_servers 
     979                                       ,rows*cols, 
     980                                       PVFS_TYPE_DATAFILE, 
     981                                       (const char **)imm_p->my_remote_servers 
    1004982                                       ,imm_p->handle_array_copies_remote 
    1005983                                       ,0 
     
    17721750 
    17731751   /* find the pool that this handle belongs to */ 
    1774    ret = job_precreate_pool_lookup_server( imm_p->remote_io_servers[tmpindex] 
    1775                                           ,imm_p->fs_id 
     1752   ret = job_precreate_pool_lookup_server( imm_p->remote_io_servers[tmpindex], 
     1753                                           PVFS_TYPE_DATAFILE, 
     1754                                          imm_p->fs_id 
    17761755                                          ,&pool_handle ); 
    17771756   if (ret < 0) 
     
    19121891   return SM_ACTION_COMPLETE; 
    19131892}/*end action cleanup*/ 
    1914  
    1915  
    1916  
    1917  
    1918 /****************************************************************************/ 
    1919 /* Actions for pvfs2_call_msgpairarray_sm                                   */ 
    1920 /****************************************************************************/ 
    1921  
    1922 /*We use a separate nested state machine to call msgpairarray because */ 
    1923 /*msgpairarray.sm is setup to work only with a "jump".  When "pjmp"   */ 
    1924 /*is used, the frame stack gets corrupted.                            */ 
    1925 static PINT_sm_action call_msgpairarray (struct PINT_smcb *smcb 
    1926                                         ,job_status_s *js_p) 
    1927 {    
    1928    gossip_debug(GOSSIP_MIRROR_DEBUG,"Executing pvfs2_call_msgpairarray_sm:" 
    1929                                     "call_msgpairarray....\n"); 
    1930    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tframe count is %d.\n",smcb->frame_count); 
    1931    gossip_debug(GOSSIP_MIRROR_DEBUG,"\t base frame is %d.\n",smcb->base_frame); 
    1932    struct PINT_server_op *mirror_op = PINT_sm_frame(smcb,PINT_FRAME_CURRENT); 
    1933    PINT_sm_msgarray_op *m_op = &(mirror_op->msgarray_op); 
    1934  
    1935    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tmirror_op:%p\n",mirror_op); 
    1936  
    1937    js_p->error_code = 0; 
    1938  
    1939    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tm_op->msgpair.req.op:%d\n" 
    1940                                     ,m_op->msgpair.req.op ); 
    1941  
    1942    PINT_sm_push_frame(smcb,0,m_op); 
    1943     
    1944    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tAFTER PUSH:smcb->base_frame:%d" 
    1945                                     "\tframe_count:%d\n" 
    1946                                    ,smcb->base_frame,smcb->frame_count); 
    1947  
    1948    return SM_ACTION_COMPLETE; 
    1949 }/*end action call_msgpairarray*/ 
    1950  
    1951  
    1952  
    1953  
    1954 static PINT_sm_action cleanup_msgpairarray (struct PINT_smcb *smcb 
    1955                                            ,job_status_s *js_p) 
    1956 {    
    1957    gossip_debug(GOSSIP_MIRROR_DEBUG,"Executing IMM_COPIES:cleanup_msgpairarray" 
    1958                                     "....\n"); 
    1959    struct PINT_server_op *mirror_op = PINT_sm_frame(smcb,PINT_FRAME_CURRENT); 
    1960    PINT_sm_msgarray_op *m_op = &(mirror_op->msgarray_op); 
    1961  
    1962    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tmirror_op:%p\n",mirror_op); 
    1963  
    1964    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tjs_p->error_code:%d\n" 
    1965                                    ,js_p->error_code); 
    1966    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tBEFORE POP:smcb->frame_base:%d" 
    1967                                     "\tframe_count:%d\n" 
    1968                                    ,smcb->base_frame,smcb->frame_count); 
    1969  
    1970  
    1971    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tm_op->msgpair.req.op:%d\n" 
    1972                                     ,m_op->msgpair.req.op ); 
    1973  
    1974    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tmirror_op->resp.status:%d\n" 
    1975                                    ,mirror_op->resp.status); 
    1976  
    1977    return SM_ACTION_COMPLETE; 
    1978 }/*end action cleanup_msgpairarray*/ 
    1979  
    1980  
    19811893 
    19821894 
  • branches/cu-security-branch/src/server/create.sm

    r8397 r8509  
    406406        s_op->req->u.create.fs_id, 
    407407        s_op->u.create.handle_array_remote_count, 
     408        PVFS_TYPE_DATAFILE, 
    408409        s_op->u.create.remote_io_servers, 
    409410        s_op->u.create.handle_array_remote, 
     
    498499        ret = job_precreate_pool_lookup_server( 
    499500            s_op->u.create.remote_io_servers[s_op->u.create.handle_index], 
     501            PVFS_TYPE_DATAFILE, 
    500502            s_op->req->u.create.fs_id, 
    501503            &pool_handle); 
  • branches/cu-security-branch/src/server/get-attr.sm

    r8410 r8509  
    268268 
    269269%% 
     270 
     271 
    270272 
    271273/* getattr_verify_attribs() 
  • branches/cu-security-branch/src/server/list-attr.sm

    r7941 r8509  
    2626#include "pint-security.h" 
    2727 
     28#define GETATTR 100 
     29 
     30 
    2831%% 
    2932 
     
    4952        pjmp listattr_setup_getattr 
    5053        { 
    51             success => pvfs2_get_attr_work_sm; 
     54            GETATTR => pvfs2_pjmp_get_attr_work_sm; 
    5255        } 
    5356        success => interpret_getattrs; 
     
    173176        getattr_op->u.getattr.attrmask = s_op->req->u.listattr.attrmask; 
    174177 
    175         ret = PINT_sm_push_frame(smcb, 0, getattr_op); 
     178        ret = PINT_sm_push_frame(smcb, GETATTR, getattr_op); 
    176179        if(ret < 0) 
    177180        { 
     
    208211    job_status_s *js_p) 
    209212{     
    210     struct PINT_server_op *getattr_op; 
     213    struct PINT_server_op *getattr_op = NULL; 
    211214    /* note: this gives us a pointer to the base frame (list_attr),  
    212215     * _not_ the getattr frames that were previously pushed. 
     
    230233        getattr_op = PINT_sm_pop_frame(smcb, &task_id, &tmp_err,  
    231234            &remaining); 
     235        gossip_debug(GOSSIP_SERVER_DEBUG, "getattr_op is %s.\n",(getattr_op ? "okay" : "NULL")); 
    232236        gossip_debug(GOSSIP_SERVER_DEBUG, "listattr: nested sm returned error code: %d\n", tmp_err); 
     237        gossip_debug(GOSSIP_SERVER_DEBUG, "s_op is %p \t getattr_op is %p",s_op,getattr_op ); 
    233238        /* match it up with the correct array entry */ 
    234239        for(j=0; j<s_op->req->u.listattr.nhandles; j++) 
  • branches/cu-security-branch/src/server/module.mk.in

    r8397 r8509  
    77        # automatically generated c files 
    88        SERVER_SMCGEN := \ 
     9                $(DIR)/pjmp-machines.c \ 
    910                $(DIR)/setparam.c \ 
    1011                $(DIR)/lookup.c \ 
  • branches/cu-security-branch/src/server/precreate-pool-refiller.sm

    r7941 r8509  
    110110    job_id_t tmp_id; 
    111111    struct server_configuration_s *user_opts = get_server_config_struct(); 
     112    int index = 0; 
     113 
     114    PVFS_ds_type_to_int(s_op->u.precreate_pool_refiller.type, &index); 
    112115 
    113116    return(job_precreate_pool_check_level( 
    114117        s_op->u.precreate_pool_refiller.pool_handle, 
    115118        s_op->u.precreate_pool_refiller.fsid, 
    116         user_opts->precreate_low_threshold, 
     119        user_opts->precreate_low_threshold[index], 
    117120        smcb, 
    118121        0, 
     
    132135    job_id_t tmp_id; 
    133136    struct server_configuration_s *user_opts = get_server_config_struct(); 
     137    int index = 0; 
     138    PVFS_ds_type_to_int( s_op->u.precreate_pool_refiller.type, &index ); 
    134139 
    135140    return(job_precreate_pool_fill( 
     
    137142        s_op->u.precreate_pool_refiller.fsid, 
    138143        s_op->u.precreate_pool_refiller.precreate_handle_array, 
    139         user_opts->precreate_batch_size, 
     144        user_opts->precreate_batch_size[index], 
    140145        smcb, 
    141146        0, 
     
    158163    PINT_sm_msgpair_state *msg_p = NULL; 
    159164    struct server_configuration_s *user_opts = get_server_config_struct(); 
    160  
    161     gossip_debug(GOSSIP_SERVER_DEBUG, "setting up msgpair to get precreated handles from %s and put store them in %llu.\n",  
    162         s_op->u.precreate_pool_refiller.host, 
    163         llu(s_op->u.precreate_pool_refiller.pool_handle)); 
     165    int index = 0; 
     166 
     167    gossip_debug(GOSSIP_SERVER_DEBUG, "setting up msgpair to get precreated " 
     168                 "handles from %s, of type %u, and put store them in %llu.\n", 
     169                s_op->u.precreate_pool_refiller.host, 
     170                s_op->u.precreate_pool_refiller.type, 
     171                llu(s_op->u.precreate_pool_refiller.pool_handle)); 
    164172 
    165173    PINT_msgpair_init(&s_op->msgarray_op); 
     
    176184    msg_p->svr_addr = s_op->u.precreate_pool_refiller.host_addr; 
    177185 
     186    PVFS_ds_type_to_int( s_op->u.precreate_pool_refiller.type, &index ); 
     187 
    178188    PINT_SERVREQ_BATCH_CREATE_FILL( 
    179189        msg_p->req, 
    180190        s_op->u.precreate_pool_refiller.capability, 
    181191        s_op->u.precreate_pool_refiller.fsid, 
    182         PVFS_TYPE_DATAFILE, 
    183         user_opts->precreate_batch_size, 
    184         s_op->u.precreate_pool_refiller.data_handle_extent_array, 
     192        s_op->u.precreate_pool_refiller.type, 
     193        user_opts->precreate_batch_size[index], 
     194        s_op->u.precreate_pool_refiller.handle_extent_array, 
    185195        NULL); 
    186196 
    187197    msg_p->fs_id = s_op->u.precreate_pool_refiller.fsid; 
    188     msg_p->handle = s_op->u.precreate_pool_refiller.data_handle_extent_array.extent_array[0].first; 
     198    msg_p->handle = s_op->u.precreate_pool_refiller.handle_extent_array.extent_array[0].first; 
    189199    msg_p->retry_flag = PVFS_MSGPAIR_RETRY; 
    190200    msg_p->comp_fn = batch_create_comp_fn; 
     
    207217    struct server_configuration_s *user_opts = get_server_config_struct(); 
    208218    PVFS_capability *cap = &s_op->u.precreate_pool_refiller.capability; 
     219    int index = 0; 
    209220    int ret; 
     221   
     222    PVFS_ds_type_to_int( s_op->u.precreate_pool_refiller.type, &index); 
    210223 
    211224    /* nlmills: TODO: ensure this is freed in all cases */ 
     
    230243         
    231244    s_op->u.precreate_pool_refiller.precreate_handle_array =  
    232         malloc(user_opts->precreate_batch_size * sizeof(PVFS_handle)); 
     245        malloc(user_opts->precreate_batch_size[index] * sizeof(PVFS_handle)); 
    233246    if(!s_op->u.precreate_pool_refiller.precreate_handle_array) 
    234247    { 
  • branches/cu-security-branch/src/server/pvfs2-server.c

    r8397 r8509  
    174174static void precreate_pool_finalize(void); 
    175175static int precreate_pool_initialize(int server_index); 
    176 static int precreate_pool_setup_server(const char* host, PVFS_fs_id fsid, 
    177     PVFS_handle* pool_handle); 
    178 static int precreate_pool_launch_refiller(const char* host,  
     176 
     177static int precreate_pool_setup_server(const char* host, PVFS_ds_type type, 
     178    PVFS_fs_id fsid, PVFS_handle* pool_handle); 
     179static int precreate_pool_launch_refiller(const char* host, PVFS_ds_type type,  
    179180    PVFS_BMI_addr_t addr, PVFS_fs_id fsid, PVFS_handle pool_handle); 
    180181static int precreate_pool_count( 
     
    20982099    } 
    20992100 
    2100     BMI_set_info(s_op->unexp_bmi_buff.addr, BMI_DEC_ADDR_REF, NULL); 
     2101    gossip_ldebug(GOSSIP_BMI_DEBUG_TCP,"server_state_machine_complete: smcb op code (%d).\n" 
     2102                                      ,s_op->op); 
     2103    gossip_ldebug(GOSSIP_BMI_DEBUG_TCP,"server_state_machine_complete: " 
     2104                                       "s_op->unexp_bmi_buff.buffer (%p) " 
     2105                                       "\tNULL(%s).\n" 
     2106                                      ,s_op->unexp_bmi_buff.buffer 
     2107                                      ,s_op->unexp_bmi_buff.buffer ? "NO" : "YES"); 
     2108 
     2109    /* BMI_unexpected_free MUST execute BEFORE BMI_set_info, because BMI_set_info will */ 
     2110    /* remove the addr info from the cur_ref_list if BMI_DEC_ADDR_REF causes the ref   */ 
     2111    /* count to become zero.  The addr info holds the "unexpected-free" function       */ 
     2112    /* pointer.                                                                        */ 
    21012113    BMI_unexpected_free(s_op->unexp_bmi_buff.addr,  
    21022114                        s_op->unexp_bmi_buff.buffer); 
     2115    BMI_set_info(s_op->unexp_bmi_buff.addr, BMI_DEC_ADDR_REF, NULL); 
    21032116    s_op->unexp_bmi_buff.buffer = NULL; 
    2104  
    21052117 
    21062118   /* Remove s_op from the inprogress_sop_list */ 
     
    22682280    PVFS_BMI_addr_t* addr_array; 
    22692281    const char* host; 
    2270     int i; 
     2282    int i, j; 
    22712283    int server_type; 
    22722284    int handle_count = 0; 
    22732285    int fs_count = 0; 
     2286    unsigned int types_to_pool = 0; 
     2287    struct server_configuration_s *user_opts = get_server_config_struct(); 
     2288    assert(user_opts); 
    22742289 
    22752290    /* iterate through list of file systems */ 
     
    23052320        } 
    23062321 
    2307         /* how many I/O servers do we have? */ 
     2322        /* how many servers do we have? */ 
    23082323        ret = PINT_cached_config_count_servers( 
    2309             cur_fs->coll_id, PINT_SERVER_TYPE_IO, &server_count); 
     2324            cur_fs->coll_id, PINT_SERVER_TYPE_ALL, &server_count); 
    23102325        if(ret < 0) 
    23112326        { 
     
    23182333        if(!addr_array) 
    23192334        { 
    2320             gossip_err("Error: unable to allocate book keeping information for precreate pools.\n"); 
     2335            gossip_err("Error: unable to allocate book keeping information for " 
     2336                       "precreate pools.\n"); 
    23212337            return(-PVFS_ENOMEM); 
    23222338        } 
     
    23242340        /* resolve addrs for each I/O server */ 
    23252341        ret = PINT_cached_config_get_server_array( 
    2326             cur_fs->coll_id, PINT_SERVER_TYPE_IO, 
     2342            cur_fs->coll_id, PINT_SERVER_TYPE_ALL, 
    23272343            addr_array, &server_count); 
    23282344        if(ret < 0) 
     
    23402356            { 
    23412357                /* this is a peer server */ 
    2342                 /* make sure a pool exists for that server,fsid pair */ 
    2343                 ret = precreate_pool_setup_server(host,  
    2344                     cur_fs->coll_id, &pool_handle); 
    2345                 if(ret < 0) 
     2358                /* make sure a pool exists for that server,type, fsid pair */ 
     2359 
     2360                /* set ds type of handles to setup in the server's pool based 
     2361                 * on the server type */ 
     2362                types_to_pool = PVFS_TYPE_NONE; 
     2363                if( (server_type & PINT_SERVER_TYPE_IO) != 0 ) 
    23462364                { 
    2347                     gossip_err("Error: precreate_pool_initialize failed to setup pool for %s\n", server_config.host_id); 
    2348                     return(ret); 
     2365                        types_to_pool |= PVFS_TYPE_DATAFILE;  
    23492366                } 
    2350  
    2351                 /* count current handles */ 
    2352                 ret = precreate_pool_count(cur_fs->coll_id, pool_handle,  
    2353                     &handle_count); 
    2354                 if(ret < 0) 
     2367                 
     2368                if( (server_type & PINT_SERVER_TYPE_META) != 0 ) 
    23552369                { 
    2356                     gossip_err("Error: precreate_pool_initialize failed to count pool for %s\n", server_config.host_id); 
    2357                     return(ret); 
     2370                    types_to_pool |= (PVFS_TYPE_METAFILE | PVFS_TYPE_DIRECTORY | 
     2371                                      PVFS_TYPE_SYMLINK | PVFS_TYPE_DIRDATA | 
     2372                                      PVFS_TYPE_INTERNAL); 
    23582373                } 
    23592374 
    2360                 /* prepare the job interface to use this pool */ 
    2361                 ret = job_precreate_pool_register_server(host,  
    2362                     cur_fs->coll_id, pool_handle, handle_count); 
    2363                 assert(ret != 0); 
    2364                 if(ret < 0) 
     2375                /* for each possible bit in the ds_type mask check if we should 
     2376                 * create a pool for it */ 
     2377                for(j = 0; j < PVFS_DS_TYPE_COUNT; j++ ) 
    23652378                { 
    2366                     gossip_err("Error: precreate_pool_initialize failed to register pool for %s\n", server_config.host_id); 
    2367                     return(ret); 
    2368                 } 
    2369  
    2370                 /* launch sm to take care of refilling */ 
    2371                 ret = precreate_pool_launch_refiller(host, addr_array[i], 
    2372                     cur_fs->coll_id, pool_handle); 
    2373                 if(ret < 0) 
    2374                 { 
    2375                     gossip_err("Error: precreate_pool_initialize failed to launch refiller SM for %s\n", server_config.host_id); 
    2376                     return(ret); 
    2377                 } 
     2379                    PVFS_ds_type t; 
     2380                    int_to_PVFS_ds_type(j, &t); 
     2381                     
     2382                    /* skip setting up a pool when it doesn't make sense i.e.  
     2383                     * when the remote host doesn't have handle types we want. 
     2384                     * or in the special case that we don't get TYPE_NONE  
     2385                     * handles from  IO servers*/ 
     2386                    if(((t & types_to_pool) == 0 ) || 
     2387                       ((t == PVFS_TYPE_NONE) &&  
     2388                        (server_type == PINT_SERVER_TYPE_IO)) ) 
     2389                    { 
     2390                        continue; 
     2391                    } 
     2392 
     2393                    gossip_debug(GOSSIP_SERVER_DEBUG, "%s: setting up pool on " 
     2394                                 "%s, type: %u, fs_id: %llu, handle: %llu\n", 
     2395                                 __func__, host, t, llu(cur_fs->coll_id),  
     2396                                 llu(pool_handle)); 
     2397                    ret = precreate_pool_setup_server(host, t,  
     2398                        cur_fs->coll_id, &pool_handle); 
     2399                    if(ret < 0) 
     2400                    { 
     2401                        gossip_err("Error: precreate_pool_initialize failed to " 
     2402                                   "setup pool for %s, type %u\n",  
     2403                                   server_config.host_id, t); 
     2404                        return(ret); 
     2405                    } 
     2406     
     2407                    /* count current handles */ 
     2408                    ret = precreate_pool_count(cur_fs->coll_id, pool_handle,  
     2409                        &handle_count); 
     2410                    if(ret < 0) 
     2411                    { 
     2412                        gossip_err("Error: precreate_pool_initialize failed to " 
     2413                                   "count pool for %s\n",  
     2414                                   server_config.host_id); 
     2415                        return(ret); 
     2416                    } 
     2417     
     2418                    /* prepare the job interface to use this pool */ 
     2419                    ret = job_precreate_pool_register_server(host, t, 
     2420                        cur_fs->coll_id, pool_handle, handle_count, 
     2421                        user_opts->precreate_batch_size); 
     2422     
     2423                    /* launch sm to take care of refilling */ 
     2424                    /* the refiller will only actually launch if the batch count 
     2425                     * for the specified type, t, is greater than 0. Otherwise, 
     2426                     * there is no reason to have a refiller running. */ 
     2427                    ret = precreate_pool_launch_refiller(host, t, addr_array[i], 
     2428                        cur_fs->coll_id, pool_handle); 
     2429                    if(ret < 0) 
     2430                    { 
     2431                        gossip_err("Error: precreate_pool_initialize failed to " 
     2432                                   "launch refiller SM for %s\n",  
     2433                                   server_config.host_id); 
     2434                        return(ret); 
     2435                    } 
     2436                } // for each PVFS_ds_type 
    23782437            } 
    23792438        } 
     
    24022461/* precreate_pool_setup_server() 
    24032462 *   
    2404  * This function makes sure that a pool is present for the specified server 
     2463 * This function makes sure that a pool is present for the specified server, 
     2464 * fsid, and type 
     2465 * 
     2466 *  host: hostname of server the pool is associated with 
     2467 *  type: DS type of handles to store in the pool 
     2468 *  fsid: fsid of the filesystem the pool is associated with 
     2469 *  handle: out value of the handle of the pool 
    24052470 * 
    24062471 */ 
    2407 static int precreate_pool_setup_server(const char* host, PVFS_fs_id fsid, 
    2408     PVFS_handle* pool_handle) 
     2472static int precreate_pool_setup_server(const char* host, PVFS_ds_type type,  
     2473    PVFS_fs_id fsid, PVFS_handle* pool_handle) 
    24092474{ 
    24102475    job_status_s js; 
     
    24182483 
    24192484    /* look for the pool handle for this server */ 
    2420     key.buffer_sz = strlen(host) + strlen("precreate-pool-") + 1; 
     2485 
     2486    /* the key for the pool must now be server name plus handle type.  
     2487     * since the key is currently a string it makes some sense to keep  
     2488     * the whole thing printable instead of just tacking on a PVFS_ds_type 
     2489     * to the end of the buffer. So, we'll sprint the type as an int and 
     2490     * tack that on the end. Better that just tacking the bits on?  
     2491     * Maybe not. */ 
     2492    char type_string[11] = { 0 }; /* 32 bit type only needs 10 digits */ 
     2493    snprintf(type_string, 11, "%u", type); 
     2494 
     2495    key.buffer_sz = strlen(host) + strlen(type_string) +  
     2496                    strlen("precreate-pool-") + 2; 
    24212497    key.buffer = malloc(key.buffer_sz); 
    24222498    if(!key.buffer) 
     
    24242500        return(-ENOMEM); 
    24252501    } 
    2426     snprintf((char*)key.buffer, key.buffer_sz, "precreate-pool-%s", host); 
     2502    snprintf((char*)key.buffer, key.buffer_sz, "precreate-pool-%s-%s",  
     2503             host, type_string); 
    24272504    key.read_sz = 0; 
    24282505 
     
    24532530    { 
    24542531        /* handle doesn't exist yet; let's create it */ 
    2455         gossip_debug(GOSSIP_SERVER_DEBUG, "precreate_pool didn't find handle for %s; creating now.\n", host); 
     2532        gossip_debug(GOSSIP_SERVER_DEBUG, "precreate_pool didn't find handle " 
     2533                     "for %s, type %s; creating now.\n", host, type_string); 
    24562534 
    24572535        /* find extent array for ourselves */ 
     
    24972575            return(ret < 0 ? ret : js.error_code); 
    24982576        } 
    2499         gossip_debug(GOSSIP_SERVER_DEBUG, "precreate_pool created handle %llu for %s.\n", llu(*pool_handle), host); 
     2577        gossip_debug(GOSSIP_SERVER_DEBUG, "precreate_pool created handle %llu " 
     2578                     "for %s, type %s.\n", llu(*pool_handle), host,  
     2579                     type_string); 
    25002580 
    25012581    } 
     
    25032583    { 
    25042584        /* handle already exists */ 
    2505         gossip_debug(GOSSIP_SERVER_DEBUG, "precreate_pool found handle %llu for %s.\n", llu(*pool_handle), host); 
    2506     } 
    2507  
     2585        gossip_debug(GOSSIP_SERVER_DEBUG, "precreate_pool found handle %llu " 
     2586                     "for %s, type %s.\n", llu(*pool_handle), host,  
     2587                     type_string); 
     2588    } 
    25082589    free(key.buffer); 
    25092590    return(0); 
     
    25522633} 
    25532634 
    2554 static int precreate_pool_launch_refiller(const char* host,  
     2635/* 
     2636 * starts a precreate pool refiller state machine for the specified host and 
     2637 * type of handle. 
     2638 *    host: the remote host to get handles from 
     2639 *    type: the DS type of handle the refiller will be refilling 
     2640 *    addr: the BMI addr of the remote host 
     2641 *    fsid: the filesystem ID of the fs the pool refiller is associated with 
     2642 *    pool_handle: the handle of the pool itself 
     2643 * 
     2644 *    This will only be called for a host/type that matches and needs a filler 
     2645 *    so a remote server that is I/O only will only get refillers for datafile 
     2646 *    handles. 
     2647 */ 
     2648static int precreate_pool_launch_refiller(const char* host, PVFS_ds_type type, 
    25552649    PVFS_BMI_addr_t addr, PVFS_fs_id fsid, PVFS_handle pool_handle) 
    25562650{ 
    25572651    struct PINT_smcb *tmp_smcb = NULL; 
    25582652    struct PINT_server_op *s_op; 
    2559     int ret; 
     2653    int ret, index = 0; 
     2654    struct server_configuration_s *user_opts = get_server_config_struct(); 
     2655 
     2656    assert(user_opts); 
     2657    PVFS_ds_type_to_int(type, &index); 
     2658 
     2659    if( user_opts->precreate_batch_size[index] == 0 ) 
     2660    { 
     2661        gossip_debug(GOSSIP_SERVER_DEBUG, "%s: NOT launching refiller for " 
     2662                     "host %s, type %d, pool: %llu, batch_size is 0\n", 
     2663                     __func__, host, type, llu(pool_handle)); 
     2664        return 0; 
     2665    } 
    25602666 
    25612667    /* allocate smcb */ 
     
    25752681    } 
    25762682 
    2577     ret = PINT_cached_config_get_server( 
    2578         fsid, host, PINT_SERVER_TYPE_IO,  
    2579         &s_op->u.precreate_pool_refiller.data_handle_extent_array); 
     2683    /* set this refillers handle range based on the type of handle it will  
     2684     * hold. If it's a datafile get an IO server range, otherwise get a meta 
     2685     * range. */ 
     2686    ret = PINT_cached_config_get_server( fsid, host,  
     2687              ((type == PVFS_TYPE_DATAFILE) ? PINT_SERVER_TYPE_IO :  
     2688                                              PINT_SERVER_TYPE_META), 
     2689              &s_op->u.precreate_pool_refiller.handle_extent_array); 
    25802690    if(ret < 0) 
    25812691    { 
     
    25852695    } 
    25862696 
     2697    gossip_debug(GOSSIP_SERVER_DEBUG, "%s: launching refiller for host %s, " 
     2698                 "type %d, pool: %llu, batch size %d (index %d)\n", __func__,  
     2699                 s_op->u.precreate_pool_refiller.host, type, llu(pool_handle), 
     2700                 user_opts->precreate_batch_size[index], index); 
     2701 
    25872702    s_op->u.precreate_pool_refiller.pool_handle = pool_handle; 
    25882703    s_op->u.precreate_pool_refiller.fsid = fsid; 
     2704    s_op->u.precreate_pool_refiller.type = type; 
    25892705    s_op->u.precreate_pool_refiller.host_addr = addr; 
    25902706 
  • branches/cu-security-branch/src/server/pvfs2-server.h

    r8417 r8509  
    392392    char* host; 
    393393    PVFS_BMI_addr_t host_addr; 
    394     PVFS_handle_extent_array data_handle_extent_array; 
     394    PVFS_handle_extent_array handle_extent_array; 
     395    PVFS_ds_type type; 
    395396    PVFS_capability capability; 
    396397}; 
     
    732733/* server side state machines */ 
    733734extern struct PINT_state_machine_s pvfs2_mirror_sm; 
    734  
     735extern struct PINT_state_machine_s pvfs2_pjmp_call_msgpairarray_sm; 
     736extern struct PINT_state_machine_s pvfs2_pjmp_get_attr_with_prelude_sm; 
     737extern struct PINT_state_machine_s pvfs2_pjmp_remove_work_sm; 
     738extern struct PINT_state_machine_s pvfs2_pjmp_mirror_work_sm; 
     739extern struct PINT_state_machine_s pvfs2_pjmp_create_immutable_copies_sm; 
     740extern struct PINT_state_machine_s pvfs2_pjmp_get_attr_work_sm; 
    735741 
    736742/* nested state machines */ 
     
    746752extern struct PINT_state_machine_s pvfs2_unexpected_sm; 
    747753extern struct PINT_state_machine_s pvfs2_create_immutable_copies_sm; 
    748 extern struct PINT_state_machine_s pvfs2_call_msgpairarray_sm; 
    749754extern struct PINT_state_machine_s pvfs2_mirror_work_sm; 
    750755extern struct PINT_state_machine_s pvfs2_tree_remove_work_sm; 
    751756extern struct PINT_state_machine_s pvfs2_tree_get_file_size_work_sm; 
     757extern struct PINT_state_machine_s pvfs2_call_msgpairarray_sm; 
    752758 
    753759/* Exported Prototypes */ 
  • branches/cu-security-branch/src/server/set-eattr.sm

    r8397 r8509  
    7878        pjmp setup_create_immutable_copies 
    7979        { 
    80            CREATE_IMM_COPIES => pvfs2_create_immutable_copies_sm; 
     80           CREATE_IMM_COPIES => pvfs2_pjmp_create_immutable_copies_sm; 
    8181        } 
    8282        success => inspect_imm_copies; 
  • branches/cu-security-branch/src/server/tree-communicate.sm

    r8403 r8509  
    7575        pjmp tree_remove_setup 
    7676        { 
    77             REMOTE_OPERATION => pvfs2_call_msgpairarray_sm; 
    78             LOCAL_OPERATION => pvfs2_remove_work_sm; 
     77            REMOTE_OPERATION => pvfs2_pjmp_call_msgpairarray_sm; 
     78            LOCAL_OPERATION => pvfs2_pjmp_remove_work_sm; 
    7979        } 
    8080        default => tree_remove_work_cleanup; 
     
    115115        pjmp tree_get_file_size_setup 
    116116        { 
    117             REMOTE_OPERATION => pvfs2_call_msgpairarray_sm; 
    118             LOCAL_OPERATION => pvfs2_get_attr_with_prelude_sm; 
     117            REMOTE_OPERATION => pvfs2_pjmp_call_msgpairarray_sm; 
     118            LOCAL_OPERATION => pvfs2_pjmp_get_attr_with_prelude_sm; 
    119119        } 
    120120        default => tree_get_file_size_work_cleanup; 
  • branches/cu-security-branch/src/server/unstuff.sm

    r8414 r8509  
    291291        s_op->req->u.unstuff.fs_id, 
    292292        (s_op->u.unstuff.num_dfiles_req-1), 
     293        PVFS_TYPE_DATAFILE, 
    293294        NULL, 
    294295        &s_op->u.unstuff.dfile_array[1], 
     
    580581    int ret; 
    581582 
     583    /* nlmills: TODO: current functionality in Orange-Branch is described 
     584     * in the log entry for changeset Orange-Branch:bligon:20100920181650. 
     585     * probably need to replicate this. 
     586     */ 
    582587    if (s_op->req->capability.op_mask & PINT_CAP_WRITE) 
    583588    {