mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull more vfs stuff from Al Viro: "O_TMPFILE ABI changes, Oleg's fput() series, misc cleanups, including making simple_lookup() usable for filesystems with non-NULL s_d_op, which allows us to get rid of quite a bit of ugliness" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: sunrpc: now we can just set ->s_d_op cgroup: we can use simple_lookup() now efivarfs: we can use simple_lookup() now make simple_lookup() usable for filesystems that set ->s_d_op configfs: don't open-code d_alloc_name() __rpc_lookup_create_exclusive: pass string instead of qstr rpc_create_*_dir: don't bother with qstr llist: llist_add() can use llist_add_batch() llist: fix/simplify llist_add() and llist_add_batch() fput: turn "list_head delayed_fput_list" into llist_head fs/file_table.c:fput(): add comment Safer ABI for O_TMPFILE
This commit is contained in:
@@ -673,13 +673,12 @@ static int __rpc_rmpipe(struct inode *dir, struct dentry *dentry)
|
||||
}
|
||||
|
||||
static struct dentry *__rpc_lookup_create_exclusive(struct dentry *parent,
|
||||
struct qstr *name)
|
||||
const char *name)
|
||||
{
|
||||
struct dentry *dentry;
|
||||
|
||||
dentry = d_lookup(parent, name);
|
||||
struct qstr q = QSTR_INIT(name, strlen(name));
|
||||
struct dentry *dentry = d_hash_and_lookup(parent, &q);
|
||||
if (!dentry) {
|
||||
dentry = d_alloc(parent, name);
|
||||
dentry = d_alloc(parent, &q);
|
||||
if (!dentry)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
@@ -704,8 +703,7 @@ static void __rpc_depopulate(struct dentry *parent,
|
||||
for (i = start; i < eof; i++) {
|
||||
name.name = files[i].name;
|
||||
name.len = strlen(files[i].name);
|
||||
name.hash = full_name_hash(name.name, name.len);
|
||||
dentry = d_lookup(parent, &name);
|
||||
dentry = d_hash_and_lookup(parent, &name);
|
||||
|
||||
if (dentry == NULL)
|
||||
continue;
|
||||
@@ -747,12 +745,7 @@ static int rpc_populate(struct dentry *parent,
|
||||
|
||||
mutex_lock(&dir->i_mutex);
|
||||
for (i = start; i < eof; i++) {
|
||||
struct qstr q;
|
||||
|
||||
q.name = files[i].name;
|
||||
q.len = strlen(files[i].name);
|
||||
q.hash = full_name_hash(q.name, q.len);
|
||||
dentry = __rpc_lookup_create_exclusive(parent, &q);
|
||||
dentry = __rpc_lookup_create_exclusive(parent, files[i].name);
|
||||
err = PTR_ERR(dentry);
|
||||
if (IS_ERR(dentry))
|
||||
goto out_bad;
|
||||
@@ -785,7 +778,7 @@ out_bad:
|
||||
}
|
||||
|
||||
static struct dentry *rpc_mkdir_populate(struct dentry *parent,
|
||||
struct qstr *name, umode_t mode, void *private,
|
||||
const char *name, umode_t mode, void *private,
|
||||
int (*populate)(struct dentry *, void *), void *args_populate)
|
||||
{
|
||||
struct dentry *dentry;
|
||||
@@ -856,7 +849,6 @@ struct dentry *rpc_mkpipe_dentry(struct dentry *parent, const char *name,
|
||||
struct dentry *dentry;
|
||||
struct inode *dir = parent->d_inode;
|
||||
umode_t umode = S_IFIFO | S_IRUSR | S_IWUSR;
|
||||
struct qstr q;
|
||||
int err;
|
||||
|
||||
if (pipe->ops->upcall == NULL)
|
||||
@@ -864,12 +856,8 @@ struct dentry *rpc_mkpipe_dentry(struct dentry *parent, const char *name,
|
||||
if (pipe->ops->downcall == NULL)
|
||||
umode &= ~S_IWUGO;
|
||||
|
||||
q.name = name;
|
||||
q.len = strlen(name);
|
||||
q.hash = full_name_hash(q.name, q.len),
|
||||
|
||||
mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT);
|
||||
dentry = __rpc_lookup_create_exclusive(parent, &q);
|
||||
dentry = __rpc_lookup_create_exclusive(parent, name);
|
||||
if (IS_ERR(dentry))
|
||||
goto out;
|
||||
err = __rpc_mkpipe_dentry(dir, dentry, umode, &rpc_pipe_fops,
|
||||
@@ -940,8 +928,8 @@ static void rpc_clntdir_depopulate(struct dentry *dentry)
|
||||
|
||||
/**
|
||||
* rpc_create_client_dir - Create a new rpc_client directory in rpc_pipefs
|
||||
* @dentry: dentry from the rpc_pipefs root to the new directory
|
||||
* @name: &struct qstr for the name
|
||||
* @dentry: the parent of new directory
|
||||
* @name: the name of new directory
|
||||
* @rpc_client: rpc client to associate with this directory
|
||||
*
|
||||
* This creates a directory at the given @path associated with
|
||||
@@ -950,7 +938,7 @@ static void rpc_clntdir_depopulate(struct dentry *dentry)
|
||||
* later be created using rpc_mkpipe().
|
||||
*/
|
||||
struct dentry *rpc_create_client_dir(struct dentry *dentry,
|
||||
struct qstr *name,
|
||||
const char *name,
|
||||
struct rpc_clnt *rpc_client)
|
||||
{
|
||||
return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, NULL,
|
||||
@@ -996,7 +984,7 @@ static void rpc_cachedir_depopulate(struct dentry *dentry)
|
||||
rpc_depopulate(dentry, cache_pipefs_files, 0, 3);
|
||||
}
|
||||
|
||||
struct dentry *rpc_create_cache_dir(struct dentry *parent, struct qstr *name,
|
||||
struct dentry *rpc_create_cache_dir(struct dentry *parent, const char *name,
|
||||
umode_t umode, struct cache_detail *cd)
|
||||
{
|
||||
return rpc_mkdir_populate(parent, name, umode, NULL,
|
||||
@@ -1076,9 +1064,7 @@ struct dentry *rpc_d_lookup_sb(const struct super_block *sb,
|
||||
const unsigned char *dir_name)
|
||||
{
|
||||
struct qstr dir = QSTR_INIT(dir_name, strlen(dir_name));
|
||||
|
||||
dir.hash = full_name_hash(dir.name, dir.len);
|
||||
return d_lookup(sb->s_root, &dir);
|
||||
return d_hash_and_lookup(sb->s_root, &dir);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rpc_d_lookup_sb);
|
||||
|
||||
|
Reference in New Issue
Block a user