В третьем релиз-кандидате (на самом деле - раньше, еще в rc1) ядра поломался (а точнее пофиксился и неслабо проапдейтился) клиентский код NFS, ниже приведен дифф на виновной функции. Не заценит ли уважаемое кернел-хаккерское подмножетво ALL оные и не подскажет ли - как вернуть поддержку NFS на путь исправления? В асм ядра своими грязными руками лезть стремновато, за недостатком понимания что там и как... #============================================== # косячная функция #============================================== diff -urdN linux-2.6.18/fs/nfs/dir.c linux-2.6.19/fs/nfs/dir.c --- linux-2.6.18/fs/nfs/dir.c 2006-10-28 00:21:02.130255000 +0400 +++ linux-2.6.19/fs/nfs/dir.c 2006-10-28 00:21:39.630255000 +0400 @@ -1,17 +1,24 @@ void nfs_access_add_cache(struct inode *inode, struct nfs_access_entry *set) { - struct nfs_inode *nfsi = NFS_I(inode); - struct nfs_access_entry *cache = &nfsi->cache_access; - - if (cache->cred != set->cred) { - if (cache->cred) - put_rpccred(cache->cred); - cache->cred = get_rpccred(set->cred); - } - /* FIXME: replace current access_cache BKL reliance with inode->i_lock */ - spin_lock(&inode->i_lock); - nfsi->cache_validity &= ~NFS_INO_INVALID_ACCESS; - spin_unlock(&inode->i_lock); + struct nfs_access_entry *cache = kmalloc(sizeof(*cache), GFP_KERNEL); + if (cache == NULL) + return; + RB_CLEAR_NODE(&cache->rb_node); cache->jiffies = set->jiffies; + cache->cred = get_rpccred(set->cred); cache->mask = set->mask; + + nfs_access_add_rbtree(inode, cache); + + /* Update accounting */ + smp_mb__before_atomic_inc(); + atomic_long_inc(&nfs_access_nr_entries); + smp_mb__after_atomic_inc(); + + /* Add inode to global LRU list */ + if (!test_and_set_bit(NFS_INO_ACL_LRU_SET, &NFS_FLAGS(inode))) { + spin_lock(&nfs_access_lru_lock); + list_add_tail(&NFS_I(inode)->access_cache_inode_lru, &nfs_access_lru_list); + spin_unlock(&nfs_access_lru_lock); + } } #============================================== # фрагмент include/asm/bitops.h (x86_64) #============================================== static __inline__ int test_and_set_bit(int nr, volatile void * addr) { int oldbit; __asm__ __volatile__( LOCK_PREFIX "btsl %2,%1\n\tsbbl %0,%0" :"=r" (oldbit),"+m" (ADDR) :"dIr" (nr) : "memory"); return oldbit; }
Ответ на:
комментарий
от xnix
Ответ на:
комментарий
от e
Ответ на:
комментарий
от xnix
Ответ на:
комментарий
от xnix
Ответ на:
комментарий
от xnix
Ответ на:
комментарий
от e
Ответ на:
комментарий
от xnix
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум linux-2.6.19+ (2006)
- Форум [fs-cache nfs] ничего не кешируется (2012)
- Форум 2.6.19 коп вырубается (2006)
- Форум косяки (2008)
- Форум Косяк (2006)
- Форум NForce4 ADMA && kernel 2.6.19 (2006)
- Форум bttv & 2.6.19 - нет звука (2007)
- Форум FS (2017)
- Форум fs (2009)
- Форум FS (2008)