diff options
Diffstat (limited to 'fs/afs')
| -rw-r--r-- | fs/afs/cache.c | 1 | ||||
| -rw-r--r-- | fs/afs/cmservice.c | 1 | ||||
| -rw-r--r-- | fs/afs/dir.c | 1 | ||||
| -rw-r--r-- | fs/afs/file.c | 2 | ||||
| -rw-r--r-- | fs/afs/fsclient.c | 1 | ||||
| -rw-r--r-- | fs/afs/inode.c | 1 | ||||
| -rw-r--r-- | fs/afs/internal.h | 2 | ||||
| -rw-r--r-- | fs/afs/mntpt.c | 26 | ||||
| -rw-r--r-- | fs/afs/rxrpc.c | 1 | ||||
| -rw-r--r-- | fs/afs/security.c | 5 | ||||
| -rw-r--r-- | fs/afs/super.c | 1 | ||||
| -rw-r--r-- | fs/afs/vlclient.c | 1 | ||||
| -rw-r--r-- | fs/afs/vlocation.c | 1 | ||||
| -rw-r--r-- | fs/afs/vnode.c | 1 | ||||
| -rw-r--r-- | fs/afs/volume.c | 7 | 
15 files changed, 32 insertions, 20 deletions
diff --git a/fs/afs/cache.c b/fs/afs/cache.c index e2b1d3f1651..0fb315dd4d2 100644 --- a/fs/afs/cache.c +++ b/fs/afs/cache.c @@ -9,7 +9,6 @@   * 2 of the License, or (at your option) any later version.   */ -#include <linux/slab.h>  #include <linux/sched.h>  #include "internal.h" diff --git a/fs/afs/cmservice.c b/fs/afs/cmservice.c index eb765489164..a3bcec75c54 100644 --- a/fs/afs/cmservice.c +++ b/fs/afs/cmservice.c @@ -11,6 +11,7 @@  #include <linux/module.h>  #include <linux/init.h> +#include <linux/slab.h>  #include <linux/sched.h>  #include <linux/ip.h>  #include "internal.h" diff --git a/fs/afs/dir.c b/fs/afs/dir.c index 88067f36e5e..adc1cb771b5 100644 --- a/fs/afs/dir.c +++ b/fs/afs/dir.c @@ -12,7 +12,6 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/init.h> -#include <linux/slab.h>  #include <linux/fs.h>  #include <linux/pagemap.h>  #include <linux/ctype.h> diff --git a/fs/afs/file.c b/fs/afs/file.c index 39b301662f2..0df9bc2b724 100644 --- a/fs/afs/file.c +++ b/fs/afs/file.c @@ -12,10 +12,10 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/init.h> -#include <linux/slab.h>  #include <linux/fs.h>  #include <linux/pagemap.h>  #include <linux/writeback.h> +#include <linux/gfp.h>  #include "internal.h"  static int afs_readpage(struct file *file, struct page *page); diff --git a/fs/afs/fsclient.c b/fs/afs/fsclient.c index 023b95b0d9d..4bd0218473a 100644 --- a/fs/afs/fsclient.c +++ b/fs/afs/fsclient.c @@ -10,6 +10,7 @@   */  #include <linux/init.h> +#include <linux/slab.h>  #include <linux/sched.h>  #include <linux/circ_buf.h>  #include "internal.h" diff --git a/fs/afs/inode.c b/fs/afs/inode.c index c048f065875..d00b312e311 100644 --- a/fs/afs/inode.c +++ b/fs/afs/inode.c @@ -16,7 +16,6 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/init.h> -#include <linux/slab.h>  #include <linux/fs.h>  #include <linux/pagemap.h>  #include <linux/sched.h> diff --git a/fs/afs/internal.h b/fs/afs/internal.h index c54dad4e606..a10f2582844 100644 --- a/fs/afs/internal.h +++ b/fs/afs/internal.h @@ -19,6 +19,7 @@  #include <linux/workqueue.h>  #include <linux/sched.h>  #include <linux/fscache.h> +#include <linux/backing-dev.h>  #include "afs.h"  #include "afs_vl.h" @@ -313,6 +314,7 @@ struct afs_volume {  	unsigned short		rjservers;	/* number of servers discarded due to -ENOMEDIUM */  	struct afs_server	*servers[8];	/* servers on which volume resides (ordered) */  	struct rw_semaphore	server_sem;	/* lock for accessing current server */ +	struct backing_dev_info	bdi;  };  /* diff --git a/fs/afs/mntpt.c b/fs/afs/mntpt.c index 5ffb570cd3a..b3feddc4f7d 100644 --- a/fs/afs/mntpt.c +++ b/fs/afs/mntpt.c @@ -12,11 +12,11 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/init.h> -#include <linux/slab.h>  #include <linux/fs.h>  #include <linux/pagemap.h>  #include <linux/mount.h>  #include <linux/namei.h> +#include <linux/gfp.h>  #include "internal.h" @@ -138,9 +138,9 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)  {  	struct afs_super_info *super;  	struct vfsmount *mnt; -	struct page *page = NULL; +	struct page *page;  	size_t size; -	char *buf, *devname = NULL, *options = NULL; +	char *buf, *devname, *options;  	int ret;  	_enter("{%s}", mntpt->d_name.name); @@ -150,22 +150,22 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)  	ret = -EINVAL;  	size = mntpt->d_inode->i_size;  	if (size > PAGE_SIZE - 1) -		goto error; +		goto error_no_devname;  	ret = -ENOMEM;  	devname = (char *) get_zeroed_page(GFP_KERNEL);  	if (!devname) -		goto error; +		goto error_no_devname;  	options = (char *) get_zeroed_page(GFP_KERNEL);  	if (!options) -		goto error; +		goto error_no_options;  	/* read the contents of the AFS special symlink */  	page = read_mapping_page(mntpt->d_inode->i_mapping, 0, NULL);  	if (IS_ERR(page)) {  		ret = PTR_ERR(page); -		goto error; +		goto error_no_page;  	}  	ret = -EIO; @@ -196,12 +196,12 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)  	return mnt;  error: -	if (page) -		page_cache_release(page); -	if (devname) -		free_page((unsigned long) devname); -	if (options) -		free_page((unsigned long) options); +	page_cache_release(page); +error_no_page: +	free_page((unsigned long) options); +error_no_options: +	free_page((unsigned long) devname); +error_no_devname:  	_leave(" = %d", ret);  	return ERR_PTR(ret);  } diff --git a/fs/afs/rxrpc.c b/fs/afs/rxrpc.c index bde3f19c099..67cf810e0fd 100644 --- a/fs/afs/rxrpc.c +++ b/fs/afs/rxrpc.c @@ -9,6 +9,7 @@   * 2 of the License, or (at your option) any later version.   */ +#include <linux/slab.h>  #include <net/sock.h>  #include <net/af_rxrpc.h>  #include <rxrpc/packet.h> diff --git a/fs/afs/security.c b/fs/afs/security.c index 3ef50437003..bb4ed144d0e 100644 --- a/fs/afs/security.c +++ b/fs/afs/security.c @@ -189,8 +189,9 @@ void afs_cache_permit(struct afs_vnode *vnode, struct key *key, long acl_order)  	if (!permits)  		goto out_unlock; -	memcpy(permits->permits, xpermits->permits, -	       count * sizeof(struct afs_permit)); +	if (xpermits) +		memcpy(permits->permits, xpermits->permits, +			count * sizeof(struct afs_permit));  	_debug("key %x access %x",  	       key_serial(key), vnode->status.caller_access); diff --git a/fs/afs/super.c b/fs/afs/super.c index 14f6431598a..e932e5a3a0c 100644 --- a/fs/afs/super.c +++ b/fs/afs/super.c @@ -311,6 +311,7 @@ static int afs_fill_super(struct super_block *sb, void *data)  	sb->s_magic		= AFS_FS_MAGIC;  	sb->s_op		= &afs_super_ops;  	sb->s_fs_info		= as; +	sb->s_bdi		= &as->volume->bdi;  	/* allocate the root inode and dentry */  	fid.vid		= as->volume->vid; diff --git a/fs/afs/vlclient.c b/fs/afs/vlclient.c index 36c1306e09e..340afd0cd18 100644 --- a/fs/afs/vlclient.c +++ b/fs/afs/vlclient.c @@ -9,6 +9,7 @@   * 2 of the License, or (at your option) any later version.   */ +#include <linux/gfp.h>  #include <linux/init.h>  #include <linux/sched.h>  #include "internal.h" diff --git a/fs/afs/vlocation.c b/fs/afs/vlocation.c index 6e689208def..9ac260d1361 100644 --- a/fs/afs/vlocation.c +++ b/fs/afs/vlocation.c @@ -11,6 +11,7 @@  #include <linux/kernel.h>  #include <linux/module.h> +#include <linux/slab.h>  #include <linux/init.h>  #include <linux/sched.h>  #include "internal.h" diff --git a/fs/afs/vnode.c b/fs/afs/vnode.c index 2f05c4fc2a7..25cf4c3f4ff 100644 --- a/fs/afs/vnode.c +++ b/fs/afs/vnode.c @@ -12,7 +12,6 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/init.h> -#include <linux/slab.h>  #include <linux/fs.h>  #include <linux/sched.h>  #include "internal.h" diff --git a/fs/afs/volume.c b/fs/afs/volume.c index a353e69e239..401eeb21869 100644 --- a/fs/afs/volume.c +++ b/fs/afs/volume.c @@ -106,6 +106,10 @@ struct afs_volume *afs_volume_lookup(struct afs_mount_params *params)  	volume->cell		= params->cell;  	volume->vid		= vlocation->vldb.vid[params->type]; +	ret = bdi_setup_and_register(&volume->bdi, "afs", BDI_CAP_MAP_COPY); +	if (ret) +		goto error_bdi; +  	init_rwsem(&volume->server_sem);  	/* look up all the applicable server records */ @@ -151,6 +155,8 @@ error:  	return ERR_PTR(ret);  error_discard: +	bdi_destroy(&volume->bdi); +error_bdi:  	up_write(¶ms->cell->vl_sem);  	for (loop = volume->nservers - 1; loop >= 0; loop--) @@ -200,6 +206,7 @@ void afs_put_volume(struct afs_volume *volume)  	for (loop = volume->nservers - 1; loop >= 0; loop--)  		afs_put_server(volume->servers[loop]); +	bdi_destroy(&volume->bdi);  	kfree(volume);  	_leave(" [destroyed]");  |