static inline void ext2_dec_count(struct inode *inode)
{
inode->i_nlink--;
- // obdfs_change_inode(inode);
+ if (inode->i_nlink > 0)
+ obdfs_change_inode(inode);
}
static inline int ext2_add_nondir(struct dentry *dentry, struct inode *inode)
*/
void __set_page_dirty(struct page *page)
{
- struct address_space *mapping = page->mapping;
+ struct address_space *mapping;
+ spinlock_t *pg_lock;
+
+ pg_lock = PAGECACHE_LOCK(page);
+ spin_lock(pg_lock);
+
+ mapping = page->mapping;
+ spin_lock(&mapping->page_lock);
- spin_lock(&pagecache_lock);
list_del(&page->list);
list_add(&page->list, &mapping->dirty_pages);
- spin_unlock(&pagecache_lock);
+
+ spin_unlock(&mapping->page_lock);
+ spin_unlock(pg_lock);
if (mapping->host)
mark_inode_dirty_pages(mapping->host);
*/
void __set_page_clean(struct page *page)
{
- struct address_space *mapping = page->mapping;
struct inode *inode;
- ENTRY;
+ struct address_space *mapping;
+ spinlock_t *pg_lock;
+
+ pg_lock = PAGECACHE_LOCK(page);
+ spin_lock(pg_lock);
+
+ mapping = page->mapping;
+ spin_lock(&mapping->page_lock);
- spin_lock(&pagecache_lock);
list_del(&page->list);
list_add(&page->list, &mapping->clean_pages);
- spin_unlock(&pagecache_lock);
+
+ spin_unlock(&mapping->page_lock);
+ spin_unlock(pg_lock);
inode = mapping->host;
if (list_empty(&mapping->dirty_pages)) {