This is a second pass at a patchset to implement proper hardlink handling in CIFS. The first set was posted a little more than a month ago and only implemented this for mounts with posix extensions. This patchset should also implement it for non-posix mounts, as long as the server is capable of reporting uniqueid's. The idea here is to add a new cifs_fattr struct that acts as a container for file attributes returned by the server. Each "dialect" has a translation routine that converts the info returned by the server to this container. This approach allows us to use iget5_locked get references to inodes, which allows us to identify hardlinks at inode instantiation time. It also results in around a 250 line reduction in code. This is mostly due to the fact that the patchset eliminates a lot of cut-and-paste code duplication and some hardlink handling hackery that should no longer be needed. The set should be bisectable if committed in order, but I've not done any real testing on anything but the complete set. I've also only tested it with the most commonly used options (posix extensions and nounix). The less commonly traveled codepaths also need to be tested (cifsacl, sfu, etc). I see this as 2.6.31 material. Comments and suggestions appreciated. Jeff Layton (13): cifs: have cifs_NTtimeToUnix take a little-endian arg cifs: make cnvrtDosUnixTm take a little-endian args and an offset cifs: allow get_cifs_acl to be called without an inode cifs: rename cifs_iget to cifs_root_iget cifs: add new cifs_fattr struct for holding cifs inode attributes in common way cifs: add new cifs_iget function and convert unix codepath to use it cifs: convert posix readdir codepath to use cifs_iget cifs: convert cifs_get_inode_info to use cifs_iget cifs: convert non-posix readdir codepath to use cifs_iget cifs: remove cifs_new_inode cifs: make serverino the default when mounting cifs: remove cifsInodeInfo->inUse counter cifs: remove "hardlink detection" from cifs_rename fs/cifs/cifsacl.c | 50 ++-- fs/cifs/cifsfs.c | 3 +- fs/cifs/cifsfs.h | 15 +- fs/cifs/cifsglob.h | 29 ++- fs/cifs/cifsproto.h | 19 +- fs/cifs/cifssmb.c | 4 +- fs/cifs/connect.c | 2 + fs/cifs/dir.c | 25 +- fs/cifs/file.c | 2 +- fs/cifs/inode.c | 811 ++++++++++++++++++++++----------------------------- fs/cifs/netmisc.c | 24 +- fs/cifs/readdir.c | 571 +++++++++++++------------------------ 12 files changed, 649 insertions(+), 906 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html