Example #1
0
static void gfs2_invalidatepage(struct page *page, unsigned long offset)
{
	struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host);
	struct buffer_head *head, *bh, *next;
	unsigned int curr_off = 0;

	BUG_ON(!PageLocked(page));
	if (!page_has_buffers(page))
		return;

	bh = head = page_buffers(page);
	do {
		unsigned int next_off = curr_off + bh->b_size;
		next = bh->b_this_page;

		if (offset <= curr_off)
			discard_buffer(sdp, bh);

		curr_off = next_off;
		bh = next;
	} while (bh != head);

	if (!offset)
		try_to_release_page(page, 0);

	return;
}
Example #2
0
bool stream_reader::get_page(page& spage) throw(std::exception)
{
	size_t advance;
	bool f;
try_again:
	fill_buffer();
	if(eof && !left)
		return false;
	f = page::scan(buffer, left, eof, advance);
	if(advance) {
		//The ogg stream resyncs.
		(*errors_to) << "Warning: Ogg stream: Recapture after " << advance << " bytes." << std::endl;
		discard_buffer(advance);
		goto try_again;
	}
	if(!f)
		goto try_again;
	spage = page(buffer, advance);
	last_offset = start_offset;
	discard_buffer(advance);
	return true;
}
Example #3
0
/*
 * Invalidate buffer, this must be called from frontend like truncate.
 * Caller must hold lock_page(), and page->mapping must be valid.
 */
void tux3_invalidate_buffer(struct buffer_head *buffer)
{
	unsigned delta = tux3_inode_delta(buffer_inode(buffer));
	tux3_clear_buffer_dirty(buffer, delta);
	discard_buffer(buffer);
}