diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2013-08-24 18:08:17 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-08-24 18:10:17 +0200 |
commit | 118b23022512eb2f41ce42db70dc0568d00be4ba (patch) | |
tree | ec36d1868c21403ce009182ae8acfeae2ea2c3d0 /fs/dcache.c | |
parent | Linux 3.11-rc6 (diff) | |
download | linux-118b23022512eb2f41ce42db70dc0568d00be4ba.tar.xz linux-118b23022512eb2f41ce42db70dc0568d00be4ba.zip |
cope with potentially long ->d_dname() output for shmem/hugetlb
dynamic_dname() is both too much and too little for those - the
output may be well in excess of 64 bytes dynamic_dname() assumes
to be enough (thanks to ashmem feeding really long names to
shmem_file_setup()) and vsnprintf() is an overkill for those
guys.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/dcache.c')
-rw-r--r-- | fs/dcache.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/fs/dcache.c b/fs/dcache.c index 87bdb5329c3c..83cfb834db03 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -2724,6 +2724,17 @@ char *dynamic_dname(struct dentry *dentry, char *buffer, int buflen, return memcpy(buffer, temp, sz); } +char *simple_dname(struct dentry *dentry, char *buffer, int buflen) +{ + char *end = buffer + buflen; + /* these dentries are never renamed, so d_lock is not needed */ + if (prepend(&end, &buflen, " (deleted)", 11) || + prepend_name(&end, &buflen, &dentry->d_name) || + prepend(&end, &buflen, "/", 1)) + end = ERR_PTR(-ENAMETOOLONG); + return end; +} + /* * Write full pathname from the root of the filesystem into the buffer. */ |