dir.c (b18da0c56e9ff43a007b6c8e302c62e720964151) dir.c (451d0f599934fd97faf54a5d7954b518e66192cb)
1/*
2 FUSE: Filesystem in Userspace
3 Copyright (C) 2001-2008 Miklos Szeredi <miklos@szeredi.hu>
4
5 This program can be distributed under the terms of the GNU GPL.
6 See the file COPYING.
7*/
8

--- 854 unchanged lines hidden (view full) ---

863
864 if (refreshed != NULL)
865 *refreshed = r;
866
867 return err;
868}
869
870int fuse_reverse_inval_entry(struct super_block *sb, u64 parent_nodeid,
1/*
2 FUSE: Filesystem in Userspace
3 Copyright (C) 2001-2008 Miklos Szeredi <miklos@szeredi.hu>
4
5 This program can be distributed under the terms of the GNU GPL.
6 See the file COPYING.
7*/
8

--- 854 unchanged lines hidden (view full) ---

863
864 if (refreshed != NULL)
865 *refreshed = r;
866
867 return err;
868}
869
870int fuse_reverse_inval_entry(struct super_block *sb, u64 parent_nodeid,
871 struct qstr *name)
871 u64 child_nodeid, struct qstr *name)
872{
873 int err = -ENOTDIR;
874 struct inode *parent;
875 struct dentry *dir;
876 struct dentry *entry;
877
878 parent = ilookup5(sb, parent_nodeid, fuse_inode_eq, &parent_nodeid);
879 if (!parent)

--- 10 unchanged lines hidden (view full) ---

890
891 entry = d_lookup(dir, name);
892 dput(dir);
893 if (!entry)
894 goto unlock;
895
896 fuse_invalidate_attr(parent);
897 fuse_invalidate_entry(entry);
872{
873 int err = -ENOTDIR;
874 struct inode *parent;
875 struct dentry *dir;
876 struct dentry *entry;
877
878 parent = ilookup5(sb, parent_nodeid, fuse_inode_eq, &parent_nodeid);
879 if (!parent)

--- 10 unchanged lines hidden (view full) ---

890
891 entry = d_lookup(dir, name);
892 dput(dir);
893 if (!entry)
894 goto unlock;
895
896 fuse_invalidate_attr(parent);
897 fuse_invalidate_entry(entry);
898
899 if (child_nodeid != 0 && entry->d_inode) {
900 mutex_lock(&entry->d_inode->i_mutex);
901 if (get_node_id(entry->d_inode) != child_nodeid) {
902 err = -ENOENT;
903 goto badentry;
904 }
905 if (d_mountpoint(entry)) {
906 err = -EBUSY;
907 goto badentry;
908 }
909 if (S_ISDIR(entry->d_inode->i_mode)) {
910 shrink_dcache_parent(entry);
911 if (!simple_empty(entry)) {
912 err = -ENOTEMPTY;
913 goto badentry;
914 }
915 entry->d_inode->i_flags |= S_DEAD;
916 }
917 dont_mount(entry);
918 clear_nlink(entry->d_inode);
919 err = 0;
920 badentry:
921 mutex_unlock(&entry->d_inode->i_mutex);
922 if (!err)
923 d_delete(entry);
924 } else {
925 err = 0;
926 }
898 dput(entry);
927 dput(entry);
899 err = 0;
900
901 unlock:
902 mutex_unlock(&parent->i_mutex);
903 iput(parent);
904 return err;
905}
906
907/*

--- 756 unchanged lines hidden ---
928
929 unlock:
930 mutex_unlock(&parent->i_mutex);
931 iput(parent);
932 return err;
933}
934
935/*

--- 756 unchanged lines hidden ---