В третьем релиз-кандидате (на самом деле - раньше, еще в 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)
- Форум bttv & 2.6.19 - нет звука (2007)
- Форум NForce4 ADMA && kernel 2.6.19 (2006)
- Форум FS (2017)
- Форум fs (2009)
- Форум FS (2008)