int bufferfork_to_invalidate(map_t *map, struct buffer_head *buffer) { unsigned delta = tux3_inode_delta(map->inode); /* * The userland shouldn't need to buffer fork on truncate * path, because no async backend. So, just make sure it. */ assert(buffer_can_modify(buffer, delta)); return 0; }
int bufferfork_to_invalidate(map_t *map, struct buffer_head *buffer) { if(DEBUG_MODE_U==1) { printf("\t\t\t\t%25s[U] %25s %4d #in\n",__FILE__,__func__,__LINE__); } unsigned delta = tux3_inode_delta(map->inode); /* * The userland shouldn't need to buffer fork on truncate * path, because no async backend. So, just make sure it. */ assert(buffer_can_modify(buffer, delta)); return 0; }
/* * Caller must hold lock_page() or backend (otherwise, you may race * with buffer fork or set dirty) */ void tux3_clear_buffer_dirty(struct buffer_head *buffer, unsigned delta) { struct address_space *buffer_mapping = buffer->b_assoc_map; /* The buffer must not need to fork */ assert(buffer_can_modify(buffer, delta)); if (buffer_mapping) { spin_lock(&buffer_mapping->private_lock); list_del_init(&buffer->b_assoc_buffers); buffer->b_assoc_map = NULL; tux3_clear_bufdelta(buffer); spin_unlock(&buffer_mapping->private_lock); clear_buffer_dirty(buffer); } else BUG_ON(!list_empty(&buffer->b_assoc_buffers)); }