コード例 #1
0
ファイル: inode.c プロジェクト: JBTech/ralink_rt5350
void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr)
{
	if (S_ISREG(inode->i_mode) && i_size_read(inode) != attr->size)
#ifdef KERNEL_2_6
		invalidate_inode_pages(inode->i_mapping);
#else
		invalidate_inode_pages(inode);
#endif

	inode->i_ino     = attr->ino;
	inode->i_mode    = (inode->i_mode & S_IFMT) + (attr->mode & 07777);
	inode->i_nlink   = attr->nlink;
	inode->i_uid     = attr->uid;
	inode->i_gid     = attr->gid;
	i_size_write(inode, attr->size);
	inode->i_blksize = PAGE_CACHE_SIZE;
	inode->i_blocks  = attr->blocks;
#ifdef KERNEL_2_6
	inode->i_atime.tv_sec   = attr->atime;
	inode->i_atime.tv_nsec  = attr->atimensec;
	inode->i_mtime.tv_sec   = attr->mtime;
	inode->i_mtime.tv_nsec  = attr->mtimensec;
	inode->i_ctime.tv_sec   = attr->ctime;
	inode->i_ctime.tv_nsec  = attr->ctimensec;
#else
	inode->i_atime   = attr->atime;
	inode->i_mtime   = attr->mtime;
	inode->i_ctime   = attr->ctime;
#endif
}
コード例 #2
0
void nilfs_btnode_cache_clear(struct address_space *btnc)
{
#if NEED_INVALIDATE_INODE_PAGES
	invalidate_inode_pages(btnc);
#else
	invalidate_mapping_pages(btnc, 0, -1);
#endif
	truncate_inode_pages(btnc, 0);
}
コード例 #3
0
void fuse_finish_open(struct inode *inode, struct file *file,
		      struct fuse_file *ff, struct fuse_open_out *outarg)
{
	if (outarg->open_flags & FOPEN_DIRECT_IO)
		file->f_op = &fuse_direct_io_file_operations;
	if (!(outarg->open_flags & FOPEN_KEEP_CACHE))
		invalidate_inode_pages(inode->i_mapping);
	ff->fh = outarg->fh;
	file->private_data = ff;
}
コード例 #4
0
/*
 * Invalidate the local caches
 */
static void
nfs_zap_caches(struct inode *inode)
{
    NFS_ATTRTIMEO(inode) = NFS_MINATTRTIMEO(inode);
    NFS_CACHEINV(inode);

    if (S_ISDIR(inode->i_mode))
        nfs_invalidate_dircache(inode);
    else
        invalidate_inode_pages(inode);
}
コード例 #5
0
ファイル: cache.c プロジェクト: chinnyannieb/empeg-hijack
void
smb_invalid_dir_cache(struct inode * dir)
{
	/*
	 * Get rid of any unlocked pages, and clear the
	 * 'valid' flag in case a scan is in progress.
	 */
	invalidate_inode_pages(dir);
	dir->u.smbfs_i.cache_valid &= ~SMB_F_CACHEVALID;
	dir->u.smbfs_i.oldmtime = 0;
}
コード例 #6
0
ファイル: dir.c プロジェクト: niubl/camera_project
/* Now we cache directories properly, by stuffing the dirent
 * data directly in the page cache.
 *
 * Inode invalidation due to refresh etc. takes care of
 * _everything_, no sloppy entry flushing logic, no extraneous
 * copying, network direct to page cache, the way it was meant
 * to be.
 *
 * NOTE: Dirent information verification is done always by the
 *	 page-in of the RPC reply, nowhere else, this simplies
 *	 things substantially.
 */
static
int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page *page)
{
	struct file	*file = desc->file;
	struct inode	*inode = file->f_dentry->d_inode;
	struct rpc_cred	*cred = nfs_file_cred(file);
	void		*buffer = kmap(page);
	int		error;

	dfprintk(VFS, "NFS: nfs_readdir_filler() reading cookie %Lu into page %lu.\n", (long long)desc->entry->cookie, page->index);

 again:
	error = NFS_PROTO(inode)->readdir(inode, cred, desc->entry->cookie, buffer,
					  NFS_SERVER(inode)->dtsize, desc->plus);
	/* We requested READDIRPLUS, but the server doesn't grok it */
	if (desc->plus && error == -ENOTSUPP) {
		NFS_FLAGS(inode) &= ~NFS_INO_ADVISE_RDPLUS;
		desc->plus = 0;
		goto again;
	}
	if (error < 0)
		goto error;
	SetPageUptodate(page);
	kunmap(page);
	/* Ensure consistent page alignment of the data.
	 * Note: assumes we have exclusive access to this mapping either
	 *	 throught inode->i_sem or some other mechanism.
	 */
	if (page->index == 0)
		invalidate_inode_pages(inode);
	UnlockPage(page);
	return 0;
 error:
	SetPageError(page);
	kunmap(page);
	UnlockPage(page);
	invalidate_inode_pages(inode);
	desc->error = error;
	return -EIO;
}
コード例 #7
0
ファイル: blkmtd.c プロジェクト: iPodLinux/linux-2.6.7-ipod
static void free_device(struct blkmtd_dev *dev)
{
    DEBUG(2, "blkmtd: free_device() dev = %p\n", dev);
    if(dev) {
        if(dev->mtd_info.eraseregions)
            kfree(dev->mtd_info.eraseregions);
        if(dev->mtd_info.name)
            kfree(dev->mtd_info.name);

        if(dev->blkdev) {
            invalidate_inode_pages(dev->blkdev->bd_inode->i_mapping);
            close_bdev_excl(dev->blkdev);
        }
        kfree(dev);
    }
}
コード例 #8
0
/* Now we cache directories properly, by stuffing the dirent
 * data directly in the page cache.
 *
 * Inode invalidation due to refresh etc. takes care of
 * _everything_, no sloppy entry flushing logic, no extraneous
 * copying, network direct to page cache, the way it was meant
 * to be.
 *
 * NOTE: Dirent information verification is done always by the
 *	 page-in of the RPC reply, nowhere else, this simplies
 *	 things substantially.
 */
static
int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page *page)
{
	struct file	*file = desc->file;
	struct inode	*inode = file->f_dentry->d_inode;
	struct rpc_cred	*cred = nfs_file_cred(file);
	unsigned long	timestamp;
	int		error;

	dfprintk(VFS, "NFS: nfs_readdir_filler() reading cookie %Lu into page %lu.\n", (long long)desc->entry->cookie, page->index);

 again:
	timestamp = jiffies;
	error = NFS_PROTO(inode)->readdir(file->f_dentry, cred, desc->entry->cookie, page,
					  NFS_SERVER(inode)->dtsize, desc->plus);
	if (error < 0) {
		/* We requested READDIRPLUS, but the server doesn't grok it */
		if (error == -ENOTSUPP && desc->plus) {
			NFS_SERVER(inode)->caps &= ~NFS_CAP_READDIRPLUS;
			NFS_FLAGS(inode) &= ~NFS_INO_ADVISE_RDPLUS;
			desc->plus = 0;
			goto again;
		}
		goto error;
	}
	SetPageUptodate(page);
	NFS_FLAGS(inode) |= NFS_INO_INVALID_ATIME;
	/* Ensure consistent page alignment of the data.
	 * Note: assumes we have exclusive access to this mapping either
	 *	 throught inode->i_sem or some other mechanism.
	 */
	if (page->index == 0) {
		invalidate_inode_pages(inode->i_mapping);
		NFS_I(inode)->readdir_timestamp = timestamp;
	}
	unlock_page(page);
	return 0;
 error:
	SetPageError(page);
	unlock_page(page);
	nfs_zap_caches(inode);
	desc->error = error;
	return -EIO;
}
コード例 #9
0
ファイル: bitmap.c プロジェクト: ivucica/linux
static void bitmap_file_put(struct bitmap *bitmap)
{
	struct file *file;
	unsigned long flags;

	spin_lock_irqsave(&bitmap->lock, flags);
	file = bitmap->file;
	bitmap->file = NULL;
	spin_unlock_irqrestore(&bitmap->lock, flags);

	if (file)
		wait_event(bitmap->write_wait,
			   atomic_read(&bitmap->pending_writes)==0);
	bitmap_file_unmap(bitmap);

	if (file) {
		struct inode *inode = file->f_path.dentry->d_inode;
		invalidate_inode_pages(inode->i_mapping);
		fput(file);
	}
}
コード例 #10
0
ファイル: inode.c プロジェクト: jameshilliard/20-4-4
void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr)
{
	struct fuse_conn *fc = get_fuse_conn(inode);
	if (S_ISREG(inode->i_mode) && i_size_read(inode) != attr->size)
		invalidate_inode_pages(inode->i_mapping);

	inode->i_ino     = attr->ino;
	inode->i_mode    = (inode->i_mode & S_IFMT) + (attr->mode & 07777);
	inode->i_nlink   = attr->nlink;
	inode->i_uid     = attr->uid;
	inode->i_gid     = attr->gid;
	spin_lock(&fc->lock);
	i_size_write(inode, attr->size);
	spin_unlock(&fc->lock);
	inode->i_blksize = PAGE_CACHE_SIZE;
	inode->i_blocks  = attr->blocks;
	inode->i_atime.tv_sec   = attr->atime;
	inode->i_atime.tv_nsec  = attr->atimensec;
	inode->i_mtime.tv_sec   = attr->mtime;
	inode->i_mtime.tv_nsec  = attr->mtimensec;
	inode->i_ctime.tv_sec   = attr->ctime;
	inode->i_ctime.tv_nsec  = attr->ctimensec;
}