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 --- |