Merge branch 'afs-proc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull AFS updates from Al Viro: "Assorted AFS stuff - ended up in vfs.git since most of that consists of David's AFS-related followups to Christoph's procfs series" * 'afs-proc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: afs: Optimise callback breaking by not repeating volume lookup afs: Display manually added cells in dynamic root mount afs: Enable IPv6 DNS lookups afs: Show all of a server's addresses in /proc/fs/afs/servers afs: Handle CONFIG_PROC_FS=n proc: Make inline name size calculation automatic afs: Implement network namespacing afs: Mark afs_net::ws_cell as __rcu and set using rcu functions afs: Fix a Sparse warning in xdr_decode_AFSFetchStatus() proc: Add a way to make network proc files writable afs: Rearrange fs/afs/proc.c to remove remaining predeclarations. afs: Rearrange fs/afs/proc.c to move the show routines up afs: Rearrange fs/afs/proc.c by moving fops and open functions down afs: Move /proc management functions to the end of the file
This commit is contained in:
@@ -409,7 +409,7 @@ static struct proc_dir_entry *__proc_create(struct proc_dir_entry **parent,
|
||||
if (!ent)
|
||||
goto out;
|
||||
|
||||
if (qstr.len + 1 <= sizeof(ent->inline_name)) {
|
||||
if (qstr.len + 1 <= SIZEOF_PDE_INLINE_NAME) {
|
||||
ent->name = ent->inline_name;
|
||||
} else {
|
||||
ent->name = kmalloc(qstr.len + 1, GFP_KERNEL);
|
||||
@@ -740,3 +740,27 @@ void *PDE_DATA(const struct inode *inode)
|
||||
return __PDE_DATA(inode);
|
||||
}
|
||||
EXPORT_SYMBOL(PDE_DATA);
|
||||
|
||||
/*
|
||||
* Pull a user buffer into memory and pass it to the file's write handler if
|
||||
* one is supplied. The ->write() method is permitted to modify the
|
||||
* kernel-side buffer.
|
||||
*/
|
||||
ssize_t proc_simple_write(struct file *f, const char __user *ubuf, size_t size,
|
||||
loff_t *_pos)
|
||||
{
|
||||
struct proc_dir_entry *pde = PDE(file_inode(f));
|
||||
char *buf;
|
||||
int ret;
|
||||
|
||||
if (!pde->write)
|
||||
return -EACCES;
|
||||
if (size == 0 || size > PAGE_SIZE - 1)
|
||||
return -EINVAL;
|
||||
buf = memdup_user_nul(ubuf, size);
|
||||
if (IS_ERR(buf))
|
||||
return PTR_ERR(buf);
|
||||
ret = pde->write(f, buf, size);
|
||||
kfree(buf);
|
||||
return ret == 0 ? size : ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user