SEARCH  

NEWS

2010.10.06:11:36:27
Nobel z fizyki za przełomowy materiał (wideo)
Szybsze komputery i przejrzyste ekrany dotykowe mogą pojawić się na rynku dzięki grafenowi. Jest to supermocny, cienki materiał odkryty w roku 2004. Wczoraj nagrodę Nobla z fizyki otrzymali Andriej Gejm i Konstantin Nowosiołow za przełomowe eksperymenty związane z grafenem.

 

messageID:533360007550
author:Jan Blunck
title: PATCH 08 32 whiteout Dont return informati
The userspace isnt ready for handling another filetype. Therefore this patch lets readdir() and others skip over the whiteout directory entries they might find. Signed-off-by: Jan Blunck <j.blunck@xxxxxxxxxxxxx Signed-off-by: David Woodhouse <dwmw2@xxxxxxxxxxxxx Signed-off-by: Valerie Aurora (Henson) <vaurora@xxxxxxxxxx --- fs/compat.c | 9 +++++++++ fs/nfsd/nfs3xdr.c | 5 +++++ fs/nfsd/nfs4xdr.c | 2 +- fs/nfsd/nfsxdr.c | 4 ++++ fs/readdir.c | 9 +++++++++ 5 files changed, 28 insertions(+), 1 deletions(-) diff --git a/fs/compat.c b/fs/compat.c index d0145ca..9b83e4b 100644 --- a/fs/compat.c +++ b/fs/compat.c @@ -828,6 +828,9 @@ static int compat_fillonedir(void *__buf, const char *name, int namlen, struct compat_old_linux_dirent __user *dirent; compat_ulong_t d_ino; + if (d_type == DT_WHT) + return 0; + if (buf- result) return -EINVAL; d_ino = ino; @@ -899,6 +902,9 @@ static int compat_filldir(void *__buf, const char *name, int namlen, compat_ulong_t d_ino; int reclen = ALIGN(NAME_OFFSET(dirent) + namlen + 2, sizeof(compat_long_t)); + if (d_type == DT_WHT) + return 0; + buf- error = -EINVAL; /* only used if we fail.. */ if (reclen buf- count) return -EINVAL; @@ -988,6 +994,9 @@ static int compat_filldir64(void * __buf, const char * name, int namlen, loff_t int reclen = ALIGN(jj + namlen + 1, sizeof(u64)); u64 off; + if (d_type == DT_WHT) + return 0; + buf- error = -EINVAL; /* only used if we fail.. */ if (reclen buf- count) return -EINVAL; diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c index 17d0dd9..06c67af 100644 --- a/fs/nfsd/nfs3xdr.c +++ b/fs/nfsd/nfs3xdr.c @@ -883,6 +883,11 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen, int elen; /* estimated entry length in words */ int num_entry_words = 0; /* actual number of words */ + if (d_type == DT_WHT) { + cd- common.err = nfs_ok; + return 0; + } + if (cd- offset) { u64 offset64 = offset; diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 9250067..b001ed5 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -1908,7 +1908,7 @@ nfsd4_encode_dirent(void *ccdv, const char *name, int namlen, __be32 nfserr = nfserr_toosmall; /* In nfsv4, "." and ".." never make it onto the wire.. */ - if (name && isdotent(name, namlen)) { + if (d_type == DT_WHT || (name && isdotent(name, namlen))) { cd- common.err = nfs_ok; return 0; } diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c index afd08e2..a7d622c 100644 --- a/fs/nfsd/nfsxdr.c +++ b/fs/nfsd/nfsxdr.c @@ -513,6 +513,10 @@ nfssvc_encode_entry(void *ccdv, const char *name, namlen, name, offset, ino); */ + if (d_type == DT_WHT) { + cd- common.err = nfs_ok; + return 0; + } if (offset ~((u32) 0)) { cd- common.err = nfserr_fbig; return -EINVAL; diff --git a/fs/readdir.c b/fs/readdir.c index 7723401..3a48491 100644 --- a/fs/readdir.c +++ b/fs/readdir.c @@ -77,6 +77,9 @@ static int fillonedir(void * __buf, const char * name, int namlen, loff_t offset struct old_linux_dirent __user * dirent; unsigned long d_ino; + if (d_type == DT_WHT) + return 0; + if (buf- result) return -EINVAL; d_ino = ino; @@ -154,6 +157,9 @@ static int filldir(void * __buf, const char * name, int namlen, loff_t offset, unsigned long d_ino; int reclen = ALIGN(NAME_OFFSET(dirent) + namlen + 2, sizeof(long)); + if (d_type == DT_WHT) + return 0; + buf- error = -EINVAL; /* only used if we fail.. */ if (reclen buf- count) return -EINVAL; @@ -239,6 +245,9 @@ static int filldir64(void * __buf, const char * name, int namlen, loff_t offset, struct getdents_callback64 * buf = (struct getdents_callback64 *) __buf; int reclen = ALIGN(NAME_OFFSET(dirent) + namlen + 1, sizeof(u64)); + if (d_type == DT_WHT) + return 0; + buf- error = -EINVAL; /* only used if we fail.. */ if (reclen buf- count) return -EINVAL; -- 1.6.1.3 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at rel="nofollow" vger.kernel.org/majordomo-info.html vger.kernel.org/majordomo-info.html
Index