2000-09-08 Trond Myklebust * Release version 0.23.1 * fs/nfs/dir.c: Fix a problem with new sillydelete code. DCACHE_NFSFS_RENAMED was being reset in the wrong place. 2000-09-05 Trond Myklebust * Release version 0.23.0 * fs/nfs/inode.c: set the default rsize/wsize for udp mounts back to 1024. * net/sunrpc/clnt.c fs/nfs/dir.c: reenable setuid hack if the 'broken_suid' a.k.a. NFS_MOUNT_BROKEN_SUID mount flag is set. 2000-09-04 Trond Myklebust * Release 0.22.5 * net/sunrpc/clnt.c fs/nfs/dir.c: disable setuid hack. It can be reenabled by defining CONFIG_SUNRPC_ABUSIVE_SUID * fs/nfs/dir.c: disallow ACCESS checking via RPC_CALL_REALUID if this entails raising privileges to uid == 0. * fs/nfs/dir.c fs/nfs/unlink.c fs/nfs/inode.c: New sillydelete scheme based on asynchronous RPC calls. Will (hopefully) get rid of the problems with 'rpciod sleeping on sync task!'. 2000-09-01 Trond Myklebust * prerelease 0.22.4 * net/sunrpc/sched.c: Fix bug in rpc_find_parent(). Fix race on locked tasks in rpc_wakeup_task(). * fs/nfs/inode.c: Fix problem with dtsize > rsize. 2000-08-17 Trond Myklebust * fs/nfs/dir.c: Fix Oops when unlink() is called on a negative dentry. 2000-08-16 Trond Myklebust * net/sunrpc/sched.c: Fix rpc_wake_up()/rpc_wake_up_status() hang. * net/sunrpc/sched.c: Fix rpc_find_parent() possible hang. 2000-07-24 Trond Myklebust * Release version 0.22.3 * Fix xprt_sendmsg to cure the firewall problem: if errors are not related to connection problems, return the error to call_status(). 2000-07-18 Trond Myklebust * Fix __rpc_atrun -> rpc_atrun, and __rpc_default_timer -> rpc_default_timer (i.e. non-spinlocked version -> spinlocked) 2000-07-17 Trond Myklebust * Prerelease version 0.22.3 * Backport the RPC timer fixes from linux-2.4 since we no longer have automatic synchronization between BHs and wait queue access. * Back out part of the spinlock removal. We appear to still need hard-irq protection on RPC wait queue access against the write_space() callbacks. This is not true on the linux-2.4.x code since write_space() runs only in BHs and ordinary kernel context. 2000-07-08 Trond Myklebust * Rerelease version 0.22.2 due to a screwup when generating the patches. * Release version 0.22.2. 2000-07-05 Trond Myklebust * include/linux/sunrpc/*.h: a few critical variables which are modified in soft-irq routines were declared volatile. It doesn't hurt to be safe... * net/sunrpc/xprt.c: Speed up Van Jacobson algorithm by a factor 10. * Get rid of spinlocks. We're covered by the big kernel lock in all of the NFS + sunrpc code. Most of that was part of the lab-studies for the 2.3.x code. * net/sunrpc/sched.c, net/sunrpc/xprt.c: Revert to bh_atomic()-based code in order to get rid of races. We do in any case not need the hard-irq safeness in spin_lock_irqsave() + friends. 2000-06-23 Trond Myklebust * net/sunrpc/xprt.c: Add support for TCP socket timeouts. * fs/nfs/proc.c: Fix buglet in NFSv2 mknod(). 2000-06-9 Trond Myklebust * Release version 0.22.0 * Patch from Ion Badulescu for the sparc. Small patch to the sys_sunos mount code and add in backport of 2.3.x long multiplication code. * mm/filemap.c, mm/write.c: Revert all previous changes to the updatepage() API. Instead, we backport the prepare_write() from 2.3.x. * mm/filemap.c, mm/read.c: Backport NFSv3 read code from 2.3.99-pre10-3. Backport sync_page() into the wait_on_page() code. * Release version 0.21.3 2000-06-01 Trond Myklebust * net/sunrpc/xprt.c: Protect operations on 'xid' static variable, and on xprt->cong from SMP races. * net/sunrpc/clnt.c, net/sunrpc/sched.c, fs/lockd/host.c: Make operations on clnt->cl_user atomic. 2000-05-31 Trond Myklebust * Prerelease version 0.21.1 * fs/nfs/nfs2xdr.c, fs/nfs/nfs3xdr.c: Improve checking of buffer overflow. Catch it before we test the value of the filename length. 2000-05-23 Trond Myklebust * Prerelease version 0.21.0 * mm/symlink.c: Simplify using read_cache_page(). * mm/filemap.c: Add read_cache_page() support routine for 2.3.x directory caching. * fs/nfs/dir.c: Backport 2.3.x directory caching. * Release version 0.20.11 * fs/nfs/inode.c: Fix problem with dropped directories, and shrink_dcache_parent(). * fs/nfs/write.c: Small tweak to nfs_strategy(). * fs/nfs/write.c: Fix potential denial problem when having global hard limit on number of writebacks. * fs/nfs/nfs2xdr.c: Fix bug in readdir when we have 'short packet' errors. * fs/nfs/dir.c: Small tweak to nfs_permission() in order to reduce net traffic. Now only call ACCESS when 1) DAC override capabilities may have been invoked 2) root squashing is suspected 3) ACLs may overturn a negative answer * fs/nfs/dir.c: Correct potential races w.r.t. d_count * fs/nfs/dir.c: Fix up i_nlink bug. 2000-04-20 Trond Myklebust * Released version 0.20.10. * fs/nfs/inode.c: zero out file-system specific part of superblock struct before we fill it in nfs_read_super(). * fs/nfs/mount_clnt.c: Fixed 2 bugs in NFSroot. 1 show-stopper that zeroed out the mount reply struct rather than the file handle struct. The second was a signed/unsigned comparison. 2000-04-19 Trond Myklebust * Released version 0.20.9 2000-04-18 Trond Myklebust * Change division in nfs_calc_block_size() into a shift operation in case gcc-2.7.2 still doesn't get it... * Enable code for alternative readdir() cookie algorithm. This algorithm is used whenever we suspect the standard cookie algorithm (which assumes cookies are monotonically increasing) will fail. It is known to screw up on 'telldir()' and 'rm -rf'. 2000-04-02 Trond Myklebust * Fix typos in fs/lockd/mon.c 2000-03-27 Trond Myklebust * Convert writeback flushing routines to use pages index + number of pages rather than offset + number of bytes. (requested by Linus). * Fix up a few printk() statements to use (long long) for loff_t. * Move calls to nfs_refresh_inode() in nfs_readpage_sync()/nfs_writepage_sync() into the loop. 2000-03-23 Trond Myklebust * nfs_proc_write() should use NFS_FILE_SYNC, not NFS_DATA_SYNC. * Fix a few buglets in the NFS flushing routines. Amongst other things, we were flushing out 2 pages rather than 1 in nfs_wb_page(). * Fix xprt_create_socket(). We want to call xprt_bindresvport() iff we have reserved port capabilities. Having the right fsuid is no longer relevant. * Convert a few spinlocks in net/sunrpc/clnt.c to use the non-irqsafe spinlock. 2000-03-16 Trond Myklebust * Release version 0.20.8 * Clean up code in net/sunrpc/clnt.c. Move the call binding and connection to just before the 'transmit' stage, since this is more natural. * More TCP fixes. Clean up code, and allow for 0-length fragments. Fix up a few dangerous signed/unsigned comparisons. 2000-03-14 Trond Myklebust * Release version 0.20.6 * Fix NLM locking under TCP. Reduce the rate of socket rebinding, for TCP and ensure that the socket is always reconnected whenever call_bind() resets the port. 2000-03-13 Trond Myklebust * Release version 0.20.5 * write.c: Fix bug when merging requests. If the wb_offset changes, we need to update wb_bytes too. 2000-03-11 Trond Myklebust * write.c (nfs_updatepage): release request before exiting if nfs_wb_page() fails. * Minor cleanup of the RPC message interface. 2000-03-09 Trond Myklebust * Release version 0.20.4 * Further SMP debugging. Fix subtle bug in nfs_mark_request_*() in which the flush daemon could run while the writeback spinlock (nfs_wreq_lock) was being held. That seems to be the last SMP-specific problem. * Release version 0.20.3 * Make NFS read/write request allocation and nlm request allocation GFP_KERNEL, rather than GFP_NFS. * More temporary debugging checks. * Perform copy before creating/updating the request, since copy_from_user() may change the number of bytes to write. * Fix spinlock bug in flushd.c 2000-03-08 Trond Myklebust * Release version 0.20.2 * Various temporary debugging checks. * Remember to unlock requests if an error is seen in nfs_flush_list() or nfs_commit_list(). * In nfs_update_request() add condition that the request must already exist on the inode's dirty request list in order to be updated. * Fixed bug in nfs_sync_file() that was causing endless looping (and hence hangs). 2000-03-07 Trond Myklebust * Release version 0.20.1 * Fix bugs in NFS flush daemon which were causing corruption of inode's dirty/commit lists, and incorrect request locking. 2000-03-06 Trond Myklebust * Prerelease version 0.20.0 * Rewrite of the NFS client writeback code. Eliminates the unneccessary 'cluster' structure, allowing the commit operation to work on any set of writebacks within one inode. 2000-03-02 Trond Myklebust * Released version 0.19.2 * Add (hopefully unneccessary) debugging code in rpc_release_task() for finding dual releases. * Fix another typo in fs/nfs/write.c that caused an Oops in nfs_commit_done. * Fix typo in fs/nfs/dir.c that was causing dcache corruption. * Released version 0.19.1 * Fix up RPC TCP client. It was broken due to changes made in rpciod_tcp_dispatcher(). * Make NLM client work under TCP too. * Allow 1 request to hog the socket even while sleeping iff the problem is write buffer space. This forces us to put a call to xprt_up_transmit() in xprt_release(), since such a sleeping task could get killed in the meantime, and hence never return to xprt_transmit() for completion of the socket operation. 2000-02-18 Trond Myklebust * Released version 0.19.0 * Implemented cookie-based file pointer. Allow for switching between old 'offset into the page cache' and new (non NFS-conformant) code. Automatic switching between the 2 is not yet activated. * Fix bug in nfs_readdir() that caused us to loop 1 more time even if the getdents() buffer is already full. * Patch from Chuck Blake & Michael Kaminsky for file permission checking using NFS3PROC_ACCESS. * Patch from Chuck for allowing moving of mountpoints to track the renames of the mountpoint on the server. * Fix lockd server bug. NLM_GRANTED et al. use the rpciod client mechanism, but should not wait for a reply. * Fix nlmclnt_block() loop to exit when the lock has been unblocked. . . . . 1999-11-25 Trond Myklebust * Released version 0.16.4 * Implement nsm_unmonitor(). * Fix bug in lockd code that causes host info to time out and get caught by the garbage collector. 1999-11-19 Trond Myklebust * Released version 0.16.3 * More dircache cleanups. Decided to drop the reliance on cookies for cache consistency checking. Just use the file position pointer as an offset into the page cache. 1999-11-17 Trond Myklebust * Released version 0.16.1 * Several cleanups of the new dircache code. * Small change to symlink caching: read directly into the pagecache rather than reading first into an RPC buffer, and then copying. 1999-11-16 Trond Myklebust * Released version 0.16.0 * Backport of symlink caching using the pagecache from 2.3.x. * Backport of directory caching using the pagecache from 2.3.x. 1999-11-15 Trond Myklebust * Changed rpc_execute() to always run immediately any RPC request (as is standard on the stock linux kernel). 1999-11-11 Trond Myklebust * Released version 0.15.1 * Fix bug in tcp_input.c that was causing the SunRPC over tcp code to lose track of the socket connection status. 1999-11-09 Trond Myklebust * Released version 0.15.0 * Clean up RPC client API. 1999-11-05 Trond Myklebust * Improve congestion control in asynchronous reading/writeing. * Bugfix to rpc_procinfo structure in fs/lockd/mon.c. 1999-11-02 Trond Myklebust * Released version 0.14.7 * Small bugfix to rpc_procinfo structure in mount_clnt.c following patch by Peter Braam. * Run 'xdr_init()' upon client creation, since clients now also use xdr_zero and friends. 1999-10-15 Trond Myklebust * xprt_release(). Put back in the test for whether a task is still waiting on xprt->pending() -- remove it if it is... * xprt_lookup_rqst(): Needs to hold IRQ-safe 'rpc_queue_lock' while traversing the 'xprt->pending' waitqueue. 1999-10-14 Trond Myklebust * Released version 0.14.6 * nfs2xdr.c, nfs3xdr.c: Zero NFS file handle empty space. * clnt.c: Set task->tk_buffer to 0 before encoding call, in order that mandatory zero-padding of opaque and string RPC be automatic. * xprt.c: Fixed bug in NFS over tcp if transmit occurs in small packets. 1999-10-06 Trond Myklebust * Released version 0.14.5 * dir.c: also fixed case when NFSv3 server doesn't support the READDIRPLUS operation. * dir.c: Fixed case when NFSv3 server returns NFSERR_BAD_COOKIE, We want to invalidate the cache and then restart the cache filling from scratch. * Released version 0.14.4 * Found yet another error in setting page flag bits in readpage_async(). 1999-10-04 Trond Myklebust * Released version 0.14.3 * Removed superfluous semaphore from the dircache. The kernel lock is held whenever we readdir, hence there should be no danger of SMP races. * Released version 0.14.2 * Fixed some NFSv2 caching in dir.c. A lot of extra NFS_CACHEINV(dir) statements were needed for whenever we create/remove files/directories and the NFSv2 call doesn't return revised directory attributes. In addition, fix i_nlink updating whenever we mkdir/rmdir. * Add RPC_TASK_SWAPPER flag back to the COMMIT rpc call. This means that the call has a higher priority than all other RPC calls, and that the 'swap_buffer' statically allocated buffer may be used for the RPC task buffer if we're really low on dynamic memory, and are using the COMMIT call to free up resources. 1999-10-03 Trond Myklebust * Released version 0.14.1 * RPC write flushing daemon changes to increased robustness. * Added 'tk_release' callback to SunRPC task. Allows the caller to perform extra housecleaning after the rpc_task is released. This is needed in order to support rpc_task resends from 'tk_exit'. * Modified nfs_cluster stuff. Seek to increase robustness of writebacks against ENOMEM: rpc_task memory is now allocated at request creation time. 1999-10-02 Trond Myklebust * Put out version 0.13.2 * Found perfidious bug in nfs_iget(). We were hashing new_inode where we should have been hashing free_inode. 1999-10-01 Trond Myklebust * Put out version 0.13.1 * Fix problem with comparison between signed and unsigned in size_to_off_t(). * Somebody seems to have misunderstood the purpose of namlen in struct nfs_mount_data. It is supposed to define the maximum file name length, NOT the length of the hostname. * Added support for NFSv3 and TCP in NFSroot mounts! Hope it works. (Well, at least it compiles) * Put out version 0.12.3 * Fixed updating of NFS_ATTRTIMEO(inode). Should only be incremented once the timeout of the cached values has been observed. * Put out version 0.12.2 * It is a mistake to compare page pointers in nfs_find_request(). The page may have been unhashed and replaced due to cache invalidation. Instead compare start/end offsets of requests. If a page has been replaced, make sure nfs_updatepage() flushes out writebacks that reference the unhashed page. * More strict cache consistency checking when writing files. Remove condition that cache is valid as long as file size <= cached value. * Remove nfs_put_inode(). Move the functionality to nfs_clear_inode() which is called by clear_inode() when the inode is actually disposed of. 1999-09-30 Trond Myklebust * Put out version 0.12.1 * Upon final iput of an inode, invalidate the dircache. On the other hand, allow caching of inodes beyond lifetime of dentries, since they will always be revalidated upon reopening. * Improve cache consistency for directories. If nfs_lookup_revalidate() fails, we now mark the parent inode for revalidation too. * Change nfs_updatepage() to check whether source/dest are the same before calling copy_from_user(). Apparently necessary for 2.2.13 munmap/msync? * Make NFS internally sensitive to time values < 1second. This should improve cache coherency for servers which support it. 1999-09-27 Trond Myklebust * Put out version 0.11.15 * Prevent RPC tasks from being placed on schedq when they are already running (or not yet set up). Should fix a potential race. 1999-09-26 Trond Myklebust * Sneaked in a small fix in 0.11.14: Always set RPC_TASK_RUNNING in rpc_execute(). 1999-09-24 Trond Myklebust * Put out version 0.11.14 * rpc_release_task(). Remove task from global list and call rpc_del_timer() before removing it from the wait queue. * RPC_TASK_RUNNING is no longer set by rpc_init_task(). The task won't marked as being running until rpc_execute() is called. * Hunted and fixed a few rpc_allocate() that were being deallocated using kfree() rather than rpc_free(). 1999-09-23 Trond Myklebust * Put out version 0.11.13 * Fix nfs_refresh_inode(). Test for old attribute information was too strong. Prevented 'touch -t ' and other such things from working properly if mtime set was old. 1999-09-15 Trond Myklebust * Put out version 0.11.12. * Fix __nfs_fhget(). Don't want to call nfs_invalidate_inode(), since make_bad_inode() can play nasty tricks on file locking. * Fix 'nolock' support in nfs_lock(). fcntl_getlk() should work as expected now. * Removed call to nfs_dircache_lookup() from nfs_lookup(). We need to figure out a proper use for NFS3_READDIRPLUS. 1999-09-09 Trond Myklebust * Put out version 0.11.11. * Minor fix to xprt.c. Make sure that xprt_transmit_timeout() wakes up the next task on xprt->sending, and not just itself. * Fixed nfs_make_new_inode(). Inode fsid, and fileid fields have to be initialized before calling nfs_fill_inode() owing to the call to nfs_refresh_inode(). Also made sure inode->i_ino field is initialized correctly. 1999-09-06 Trond Myklebust * Sneaked in a fix to fs/smbfs/file.c that is due to the change in locking semantics in generic_file_write. Version number of patch was not updated since this is not strictly an NFSv3 fix. 1999-09-05 Trond Myklebust * Put out version 0.11.10. * New correction of block size calculation. Just set i_blksize and sb->s_blocksize to max(rsize,wsize,rtmult,wtmult). * Fix 'du' bug: inode->i_blocks should always be measured in 512-byte sized blocks. NB: NFSv3 gives out the exact number of bytes allocated to the file, so we don't need to do any fancy rounding to the nearest 'i_blksize'. 1999-09-03 Trond Myklebust * Put out version 0.11.9 * Correct calculation of block sizes on NFSv3. We need to be able to handle 64-bit sizes for disks and files. block sizes under NFSv3 now attempt to adapt so that file/disk sizes fit in the usual 'stat' structures. * Distinguish between rsize/wsize and the filesystem blocksize. The former need to be within 1k and 32k, the latter doesn't. Both were using nfs_block_size() which imposes such limitations. * nfs_updatepage: The line clearing PG_UNLOCK_AFTER from the request flags was redundant (and a potential source of Oopses), since we hold the page lock. (J.Y.) 1999-09-02 Trond Myklebust * Put out version 0.11.8 * Fixed bug due to server/client conflict in lockd. nlmclnt_async_call was being used by the server routines which do not have any saved NFS/RPC credentials in the struct file. 1999-09-01 Trond Myklebust * Put out version 0.11.7 * Fix bug in nfs_find_inode(): return if fsid && fileid are the same (was ||). (James Y.) * Fix in calculation of inode->i_block. (James Y.) * Started changelog file for NFSv3