diff options
Diffstat (limited to 'Documentation/filesystems/vfs.txt')
-rw-r--r-- | Documentation/filesystems/vfs.txt | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index ea271f2d3954..a47cc819f37b 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -827,7 +827,7 @@ This describes how a filesystem can overload the standard dentry | |||
827 | operations. Dentries and the dcache are the domain of the VFS and the | 827 | operations. Dentries and the dcache are the domain of the VFS and the |
828 | individual filesystem implementations. Device drivers have no business | 828 | individual filesystem implementations. Device drivers have no business |
829 | here. These methods may be set to NULL, as they are either optional or | 829 | here. These methods may be set to NULL, as they are either optional or |
830 | the VFS uses a default. As of kernel 2.6.13, the following members are | 830 | the VFS uses a default. As of kernel 2.6.22, the following members are |
831 | defined: | 831 | defined: |
832 | 832 | ||
833 | struct dentry_operations { | 833 | struct dentry_operations { |
@@ -837,6 +837,7 @@ struct dentry_operations { | |||
837 | int (*d_delete)(struct dentry *); | 837 | int (*d_delete)(struct dentry *); |
838 | void (*d_release)(struct dentry *); | 838 | void (*d_release)(struct dentry *); |
839 | void (*d_iput)(struct dentry *, struct inode *); | 839 | void (*d_iput)(struct dentry *, struct inode *); |
840 | char *(*d_dname)(struct dentry *, char *, int); | ||
840 | }; | 841 | }; |
841 | 842 | ||
842 | d_revalidate: called when the VFS needs to revalidate a dentry. This | 843 | d_revalidate: called when the VFS needs to revalidate a dentry. This |
@@ -859,6 +860,26 @@ struct dentry_operations { | |||
859 | VFS calls iput(). If you define this method, you must call | 860 | VFS calls iput(). If you define this method, you must call |
860 | iput() yourself | 861 | iput() yourself |
861 | 862 | ||
863 | d_dname: called when the pathname of a dentry should be generated. | ||
864 | Usefull for some pseudo filesystems (sockfs, pipefs, ...) to delay | ||
865 | pathname generation. (Instead of doing it when dentry is created, | ||
866 | its done only when the path is needed.). Real filesystems probably | ||
867 | dont want to use it, because their dentries are present in global | ||
868 | dcache hash, so their hash should be an invariant. As no lock is | ||
869 | held, d_dname() should not try to modify the dentry itself, unless | ||
870 | appropriate SMP safety is used. CAUTION : d_path() logic is quite | ||
871 | tricky. The correct way to return for example "Hello" is to put it | ||
872 | at the end of the buffer, and returns a pointer to the first char. | ||
873 | dynamic_dname() helper function is provided to take care of this. | ||
874 | |||
875 | Example : | ||
876 | |||
877 | static char *pipefs_dname(struct dentry *dent, char *buffer, int buflen) | ||
878 | { | ||
879 | return dynamic_dname(dentry, buffer, buflen, "pipe:[%lu]", | ||
880 | dentry->d_inode->i_ino); | ||
881 | } | ||
882 | |||
862 | Each dentry has a pointer to its parent dentry, as well as a hash list | 883 | Each dentry has a pointer to its parent dentry, as well as a hash list |
863 | of child dentries. Child dentries are basically like files in a | 884 | of child dentries. Child dentries are basically like files in a |
864 | directory. | 885 | directory. |