diff options
| author | Dave Airlie <airlied@redhat.com> | 2012-05-07 16:09:09 +0100 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2012-05-07 16:09:35 +0100 | 
| commit | 4f256e8aa3eda15c11c3cec3ec5336e1fc579cbd (patch) | |
| tree | 33c02b5e18e79756005a3edfa7c862a47de668d5 /fs/dcache.c | |
| parent | 4086b1e2b19729eebf632073b9d4ab811726d8eb (diff) | |
| parent | dc257cf154be708ecc47b8b89c12ad8cd2cc35e4 (diff) | |
| download | olio-linux-3.10-4f256e8aa3eda15c11c3cec3ec5336e1fc579cbd.tar.xz olio-linux-3.10-4f256e8aa3eda15c11c3cec3ec5336e1fc579cbd.zip  | |
Merge branch 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel into drm-core-next
Daniel prepared this branch with a back-merge as git was getting
very confused about changes in intel_display.c
Diffstat (limited to 'fs/dcache.c')
| -rw-r--r-- | fs/dcache.c | 26 | 
1 files changed, 22 insertions, 4 deletions
diff --git a/fs/dcache.c b/fs/dcache.c index b60ddc41d78..b80531c9177 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -141,18 +141,29 @@ int proc_nr_dentry(ctl_table *table, int write, void __user *buffer,   * Compare 2 name strings, return 0 if they match, otherwise non-zero.   * The strings are both count bytes long, and count is non-zero.   */ +#ifdef CONFIG_DCACHE_WORD_ACCESS + +#include <asm/word-at-a-time.h> +/* + * NOTE! 'cs' and 'scount' come from a dentry, so it has a + * aligned allocation for this particular component. We don't + * strictly need the load_unaligned_zeropad() safety, but it + * doesn't hurt either. + * + * In contrast, 'ct' and 'tcount' can be from a pathname, and do + * need the careful unaligned handling. + */  static inline int dentry_cmp(const unsigned char *cs, size_t scount,  				const unsigned char *ct, size_t tcount)  { -#ifdef CONFIG_DCACHE_WORD_ACCESS  	unsigned long a,b,mask;  	if (unlikely(scount != tcount))  		return 1;  	for (;;) { -		a = *(unsigned long *)cs; -		b = *(unsigned long *)ct; +		a = load_unaligned_zeropad(cs); +		b = load_unaligned_zeropad(ct);  		if (tcount < sizeof(unsigned long))  			break;  		if (unlikely(a != b)) @@ -165,7 +176,13 @@ static inline int dentry_cmp(const unsigned char *cs, size_t scount,  	}  	mask = ~(~0ul << tcount*8);  	return unlikely(!!((a ^ b) & mask)); +} +  #else + +static inline int dentry_cmp(const unsigned char *cs, size_t scount, +				const unsigned char *ct, size_t tcount) +{  	if (scount != tcount)  		return 1; @@ -177,9 +194,10 @@ static inline int dentry_cmp(const unsigned char *cs, size_t scount,  		tcount--;  	} while (tcount);  	return 0; -#endif  } +#endif +  static void __d_free(struct rcu_head *head)  {  	struct dentry *dentry = container_of(head, struct dentry, d_u.d_rcu);  |