F: Documentation/scsi/ufs.txt
F: drivers/scsi/ufs/
-UNIONFS
+UNION FILE SYSTEM
P: Erez Zadok
M: ezk@cs.sunysb.edu
L: unionfs@filesystems.org
W: http://unionfs.filesystems.org/
-T: git git.kernel.org/pub/scm/linux/kernel/git/ezk/unionfs.git
+T: git git://git.fsl.cs.sunysb.edu/unionfs-latest.git
S: Maintained
+F: Documentation/filesystems/unionfs/
+F: fs/unionfs/
UNSORTED BLOCK IMAGES (UBI)
M: Artem Bityutskiy <dedekind1@gmail.com>
*/
struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
{
- struct qstr this;
- unsigned int c;
- int err;
-
- WARN_ON_ONCE(!mutex_is_locked(&base->d_inode->i_mutex));
-
- this.name = name;
- this.len = len;
- this.hash = full_name_hash(name, len);
- if (!len)
- return ERR_PTR(-EACCES);
-
- while (len--) {
- c = *(const unsigned char *)name++;
- if (c == '/' || c == '\0')
- return ERR_PTR(-EACCES);
- }
- /*
- * See if the low-level filesystem might want
- * to use its own hash..
- */
- if (base->d_flags & DCACHE_OP_HASH) {
- int err = base->d_op->d_hash(base, base->d_inode, &this);
- if (err < 0)
- return ERR_PTR(err);
- }
-
- err = inode_permission(base->d_inode, MAY_EXEC);
- if (err)
- return ERR_PTR(err);
-
- return __lookup_hash(&this, base, NULL);
+ return lookup_one_len_nd(name, base, len, NULL);
}
/* pass nameidata from caller (useful for NFS) */
int len, struct nameidata *nd)
{
struct qstr this;
- unsigned long hash;
unsigned int c;
+ int err;
WARN_ON_ONCE(!mutex_is_locked(&base->d_inode->i_mutex));
this.name = name;
this.len = len;
+ this.hash = full_name_hash(name, len);
if (!len)
return ERR_PTR(-EACCES);
- hash = init_name_hash();
while (len--) {
c = *(const unsigned char *)name++;
if (c == '/' || c == '\0')
return ERR_PTR(-EACCES);
- hash = partial_name_hash(c, hash);
}
- this.hash = end_name_hash(hash);
/*
* See if the low-level filesystem might want
* to use its own hash..
return ERR_PTR(err);
}
+ err = inode_permission(base->d_inode, MAY_EXEC);
+ if (err)
+ return ERR_PTR(err);
+
return __lookup_hash(&this, base, nd);
}
#include <linux/fs.h>
#include <linux/fs_stack.h>
-/*
- * does _NOT_ require i_mutex to be held.
+/* does _NOT_ require i_mutex to be held.
*
* This function cannot be inlined since i_size_{read,write} is rather
* heavy-weight on 32-bit systems
-/*
- * Copyright (c) 2006-2009 Erez Zadok
- * Copyright (c) 2006-2007 Josef 'Jeff' Sipek
- * Copyright (c) 2006-2009 Stony Brook University
- * Copyright (c) 2006-2009 The Research Foundation of SUNY
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
#ifndef _LINUX_FS_STACK_H
#define _LINUX_FS_STACK_H
-/*
- * This file defines generic functions used primarily by stackable
+/* This file defines generic functions used primarily by stackable
* filesystems; none of these functions require i_mutex to be held.
*/