diff options
Diffstat (limited to 'fs/cifs/fscache.c')
| -rw-r--r-- | fs/cifs/fscache.c | 93 | 
1 files changed, 49 insertions, 44 deletions
diff --git a/fs/cifs/fscache.c b/fs/cifs/fscache.c index a2ad94efcfe..8d4b7bc8ae9 100644 --- a/fs/cifs/fscache.c +++ b/fs/cifs/fscache.c @@ -2,7 +2,7 @@   *   fs/cifs/fscache.c - CIFS filesystem cache interface   *   *   Copyright (c) 2010 Novell, Inc. - *   Author(s): Suresh Jayaraman (sjayaraman@suse.de> + *   Author(s): Suresh Jayaraman <sjayaraman@suse.de>   *   *   This library is free software; you can redistribute it and/or modify   *   it under the terms of the GNU Lesser General Public License as published @@ -27,33 +27,33 @@ void cifs_fscache_get_client_cookie(struct TCP_Server_Info *server)  {  	server->fscache =  		fscache_acquire_cookie(cifs_fscache_netfs.primary_index, -				&cifs_fscache_server_index_def, server); -	cFYI(1, "CIFS: get client cookie (0x%p/0x%p)", server, -				server->fscache); +				&cifs_fscache_server_index_def, server, true); +	cifs_dbg(FYI, "%s: (0x%p/0x%p)\n", +		 __func__, server, server->fscache);  }  void cifs_fscache_release_client_cookie(struct TCP_Server_Info *server)  { -	cFYI(1, "CIFS: release client cookie (0x%p/0x%p)", server, -				server->fscache); +	cifs_dbg(FYI, "%s: (0x%p/0x%p)\n", +		 __func__, server, server->fscache);  	fscache_relinquish_cookie(server->fscache, 0);  	server->fscache = NULL;  } -void cifs_fscache_get_super_cookie(struct cifsTconInfo *tcon) +void cifs_fscache_get_super_cookie(struct cifs_tcon *tcon)  {  	struct TCP_Server_Info *server = tcon->ses->server;  	tcon->fscache =  		fscache_acquire_cookie(server->fscache, -				&cifs_fscache_super_index_def, tcon); -	cFYI(1, "CIFS: get superblock cookie (0x%p/0x%p)", -				server->fscache, tcon->fscache); +				&cifs_fscache_super_index_def, tcon, true); +	cifs_dbg(FYI, "%s: (0x%p/0x%p)\n", +		 __func__, server->fscache, tcon->fscache);  } -void cifs_fscache_release_super_cookie(struct cifsTconInfo *tcon) +void cifs_fscache_release_super_cookie(struct cifs_tcon *tcon)  { -	cFYI(1, "CIFS: releasing superblock cookie (0x%p)", tcon->fscache); +	cifs_dbg(FYI, "%s: (0x%p)\n", __func__, tcon->fscache);  	fscache_relinquish_cookie(tcon->fscache, 0);  	tcon->fscache = NULL;  } @@ -62,15 +62,17 @@ static void cifs_fscache_enable_inode_cookie(struct inode *inode)  {  	struct cifsInodeInfo *cifsi = CIFS_I(inode);  	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); -	struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb); +	struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);  	if (cifsi->fscache)  		return; -	cifsi->fscache = fscache_acquire_cookie(tcon->fscache, -				&cifs_fscache_inode_object_def, cifsi); -	cFYI(1, "CIFS: got FH cookie (0x%p/0x%p)", tcon->fscache, -				cifsi->fscache); +	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_FSCACHE) { +		cifsi->fscache = fscache_acquire_cookie(tcon->fscache, +				&cifs_fscache_inode_object_def, cifsi, true); +		cifs_dbg(FYI, "%s: got FH cookie (0x%p/0x%p)\n", +			 __func__, tcon->fscache, cifsi->fscache); +	}  }  void cifs_fscache_release_inode_cookie(struct inode *inode) @@ -78,8 +80,7 @@ void cifs_fscache_release_inode_cookie(struct inode *inode)  	struct cifsInodeInfo *cifsi = CIFS_I(inode);  	if (cifsi->fscache) { -		cFYI(1, "CIFS releasing inode cookie (0x%p)", -				cifsi->fscache); +		cifs_dbg(FYI, "%s: (0x%p)\n", __func__, cifsi->fscache);  		fscache_relinquish_cookie(cifsi->fscache, 0);  		cifsi->fscache = NULL;  	} @@ -90,8 +91,8 @@ static void cifs_fscache_disable_inode_cookie(struct inode *inode)  	struct cifsInodeInfo *cifsi = CIFS_I(inode);  	if (cifsi->fscache) { -		cFYI(1, "CIFS disabling inode cookie (0x%p)", -				cifsi->fscache); +		cifs_dbg(FYI, "%s: (0x%p)\n", __func__, cifsi->fscache); +		fscache_uncache_all_inode_pages(cifsi->fscache, inode);  		fscache_relinquish_cookie(cifsi->fscache, 1);  		cifsi->fscache = NULL;  	} @@ -101,10 +102,8 @@ void cifs_fscache_set_inode_cookie(struct inode *inode, struct file *filp)  {  	if ((filp->f_flags & O_ACCMODE) != O_RDONLY)  		cifs_fscache_disable_inode_cookie(inode); -	else { +	else  		cifs_fscache_enable_inode_cookie(inode); -		cFYI(1, "CIFS: fscache inode cookie set"); -	}  }  void cifs_fscache_reset_inode_cookie(struct inode *inode) @@ -120,9 +119,9 @@ void cifs_fscache_reset_inode_cookie(struct inode *inode)  		cifsi->fscache = fscache_acquire_cookie(  					cifs_sb_master_tcon(cifs_sb)->fscache,  					&cifs_fscache_inode_object_def, -					cifsi); -		cFYI(1, "CIFS: new cookie 0x%p oldcookie 0x%p", -				cifsi->fscache, old); +					cifsi, true); +		cifs_dbg(FYI, "%s: new cookie 0x%p oldcookie 0x%p\n", +			 __func__, cifsi->fscache, old);  	}  } @@ -132,8 +131,8 @@ int cifs_fscache_release_page(struct page *page, gfp_t gfp)  		struct inode *inode = page->mapping->host;  		struct cifsInodeInfo *cifsi = CIFS_I(inode); -		cFYI(1, "CIFS: fscache release page (0x%p/0x%p)", -				page, cifsi->fscache); +		cifs_dbg(FYI, "%s: (0x%p/0x%p)\n", +			 __func__, page, cifsi->fscache);  		if (!fscache_maybe_release_page(cifsi->fscache, page, gfp))  			return 0;  	} @@ -144,8 +143,7 @@ int cifs_fscache_release_page(struct page *page, gfp_t gfp)  static void cifs_readpage_from_fscache_complete(struct page *page, void *ctx,  						int error)  { -	cFYI(1, "CFS: readpage_from_fscache_complete (0x%p/%d)", -			page, error); +	cifs_dbg(FYI, "%s: (0x%p/%d)\n", __func__, page, error);  	if (!error)  		SetPageUptodate(page);  	unlock_page(page); @@ -158,8 +156,8 @@ int __cifs_readpage_from_fscache(struct inode *inode, struct page *page)  {  	int ret; -	cFYI(1, "CIFS: readpage_from_fscache(fsc:%p, p:%p, i:0x%p", -			CIFS_I(inode)->fscache, page, inode); +	cifs_dbg(FYI, "%s: (fsc:%p, p:%p, i:0x%p\n", +		 __func__, CIFS_I(inode)->fscache, page, inode);  	ret = fscache_read_or_alloc_page(CIFS_I(inode)->fscache, page,  					 cifs_readpage_from_fscache_complete,  					 NULL, @@ -167,15 +165,15 @@ int __cifs_readpage_from_fscache(struct inode *inode, struct page *page)  	switch (ret) {  	case 0: /* page found in fscache, read submitted */ -		cFYI(1, "CIFS: readpage_from_fscache: submitted"); +		cifs_dbg(FYI, "%s: submitted\n", __func__);  		return ret;  	case -ENOBUFS:	/* page won't be cached */  	case -ENODATA:	/* page not in cache */ -		cFYI(1, "CIFS: readpage_from_fscache %d", ret); +		cifs_dbg(FYI, "%s: %d\n", __func__, ret);  		return 1;  	default: -		cERROR(1, "unknown error ret = %d", ret); +		cifs_dbg(VFS, "unknown error ret = %d\n", ret);  	}  	return ret;  } @@ -190,8 +188,8 @@ int __cifs_readpages_from_fscache(struct inode *inode,  {  	int ret; -	cFYI(1, "CIFS: __cifs_readpages_from_fscache (0x%p/%u/0x%p)", -			CIFS_I(inode)->fscache, *nr_pages, inode); +	cifs_dbg(FYI, "%s: (0x%p/%u/0x%p)\n", +		 __func__, CIFS_I(inode)->fscache, *nr_pages, inode);  	ret = fscache_read_or_alloc_pages(CIFS_I(inode)->fscache, mapping,  					  pages, nr_pages,  					  cifs_readpage_from_fscache_complete, @@ -199,16 +197,16 @@ int __cifs_readpages_from_fscache(struct inode *inode,  					  mapping_gfp_mask(mapping));  	switch (ret) {  	case 0:	/* read submitted to the cache for all pages */ -		cFYI(1, "CIFS: readpages_from_fscache: submitted"); +		cifs_dbg(FYI, "%s: submitted\n", __func__);  		return ret;  	case -ENOBUFS:	/* some pages are not cached and can't be */  	case -ENODATA:	/* some pages are not cached */ -		cFYI(1, "CIFS: readpages_from_fscache: no page"); +		cifs_dbg(FYI, "%s: no page\n", __func__);  		return 1;  	default: -		cFYI(1, "unknown error ret = %d", ret); +		cifs_dbg(FYI, "unknown error ret = %d\n", ret);  	}  	return ret; @@ -218,19 +216,26 @@ void __cifs_readpage_to_fscache(struct inode *inode, struct page *page)  {  	int ret; -	cFYI(1, "CIFS: readpage_to_fscache(fsc: %p, p: %p, i: %p", -			CIFS_I(inode)->fscache, page, inode); +	cifs_dbg(FYI, "%s: (fsc: %p, p: %p, i: %p)\n", +		 __func__, CIFS_I(inode)->fscache, page, inode);  	ret = fscache_write_page(CIFS_I(inode)->fscache, page, GFP_KERNEL);  	if (ret != 0)  		fscache_uncache_page(CIFS_I(inode)->fscache, page);  } +void __cifs_fscache_readpages_cancel(struct inode *inode, struct list_head *pages) +{ +	cifs_dbg(FYI, "%s: (fsc: %p, i: %p)\n", +		 __func__, CIFS_I(inode)->fscache, inode); +	fscache_readpages_cancel(CIFS_I(inode)->fscache, pages); +} +  void __cifs_fscache_invalidate_page(struct page *page, struct inode *inode)  {  	struct cifsInodeInfo *cifsi = CIFS_I(inode);  	struct fscache_cookie *cookie = cifsi->fscache; -	cFYI(1, "CIFS: fscache invalidatepage (0x%p/0x%p)", page, cookie); +	cifs_dbg(FYI, "%s: (0x%p/0x%p)\n", __func__, page, cookie);  	fscache_wait_on_page_write(cookie, page);  	fscache_uncache_page(cookie, page);  }  | 
