Message ID | 1308147910-17057-1-git-send-email-andros@netapp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 2011-06-15 10:25, andros@netapp.com wrote: > From: Andy Adamson <andros@netapp.com> > > Signed-off-by: Andy Adamson <andros@netapp.com> > cc:stable@kernel.org [2.6.39] Looks good to me. Benny > --- > fs/nfs/inode.c | 2 ++ > fs/nfs/pnfs.h | 1 + > fs/nfs/pnfs_dev.c | 14 +++++++++++++- > 3 files changed, 16 insertions(+), 1 deletions(-) > > diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c > index 6f4850d..55ba1b0 100644 > --- a/fs/nfs/inode.c > +++ b/fs/nfs/inode.c > @@ -1595,6 +1595,8 @@ static int __init init_nfs_fs(void) > if (err) > goto out0; > > + nfs4_init_deviceid_cache(); > + > #ifdef CONFIG_PROC_FS > rpc_proc_register(&nfs_rpcstat); > #endif > diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h > index e46edac..67400bc 100644 > --- a/fs/nfs/pnfs.h > +++ b/fs/nfs/pnfs.h > @@ -212,6 +212,7 @@ void nfs4_init_deviceid_node(struct nfs4_deviceid_node *, > struct nfs4_deviceid_node *nfs4_insert_deviceid_node(struct nfs4_deviceid_node *); > bool nfs4_put_deviceid_node(struct nfs4_deviceid_node *); > void nfs4_deviceid_purge_client(const struct nfs_client *); > +void nfs4_init_deviceid_cache(void); > > static inline int lo_fail_bit(u32 iomode) > { > diff --git a/fs/nfs/pnfs_dev.c b/fs/nfs/pnfs_dev.c > index 037a5c6..923a9da 100644 > --- a/fs/nfs/pnfs_dev.c > +++ b/fs/nfs/pnfs_dev.c > @@ -161,6 +161,15 @@ nfs4_init_deviceid_node(struct nfs4_deviceid_node *d, > } > EXPORT_SYMBOL_GPL(nfs4_init_deviceid_node); > > +void > +nfs4_init_deviceid_cache() > +{ > + long h; > + > + for (h = 0; h < NFS4_DEVICE_ID_HASH_SIZE; h++) > + INIT_HLIST_HEAD(&nfs4_deviceid_cache[h]); > +} > + > /* > * Uniquely initialize and insert a deviceid node into cache > * > @@ -236,9 +245,10 @@ _deviceid_purge_client(const struct nfs_client *clp, long hash) > > synchronize_rcu(); > while (!hlist_empty(&tmp)) { > + d = hlist_entry(tmp.first, struct nfs4_deviceid_node, tmpnode); > + hlist_del_init(&d->tmpnode); > if (atomic_dec_and_test(&d->ref)) > d->ld->free_deviceid_node(d); > - hlist_del_init(&d->tmpnode); > } > } > > @@ -247,6 +257,8 @@ nfs4_deviceid_purge_client(const struct nfs_client *clp) > { > long h; > > + if (!(clp->cl_exchange_flags & EXCHGID4_FLAG_USE_PNFS_MDS)) > + return; > for (h = 0; h < NFS4_DEVICE_ID_HASH_SIZE; h++) > _deviceid_purge_client(clp, h); > } -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 2011-06-15 10:25, andros@netapp.com wrote: > From: Andy Adamson <andros@netapp.com> > > Signed-off-by: Andy Adamson <andros@netapp.com> > cc:stable@kernel.org [2.6.39] > --- > fs/nfs/inode.c | 2 ++ > fs/nfs/pnfs.h | 1 + > fs/nfs/pnfs_dev.c | 14 +++++++++++++- > 3 files changed, 16 insertions(+), 1 deletions(-) > > diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c > index 6f4850d..55ba1b0 100644 > --- a/fs/nfs/inode.c > +++ b/fs/nfs/inode.c > @@ -1595,6 +1595,8 @@ static int __init init_nfs_fs(void) > if (err) > goto out0; > > + nfs4_init_deviceid_cache(); > + > #ifdef CONFIG_PROC_FS > rpc_proc_register(&nfs_rpcstat); > #endif > diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h > index e46edac..67400bc 100644 > --- a/fs/nfs/pnfs.h > +++ b/fs/nfs/pnfs.h > @@ -212,6 +212,7 @@ void nfs4_init_deviceid_node(struct nfs4_deviceid_node *, > struct nfs4_deviceid_node *nfs4_insert_deviceid_node(struct nfs4_deviceid_node *); > bool nfs4_put_deviceid_node(struct nfs4_deviceid_node *); > void nfs4_deviceid_purge_client(const struct nfs_client *); > +void nfs4_init_deviceid_cache(void); > > static inline int lo_fail_bit(u32 iomode) > { > diff --git a/fs/nfs/pnfs_dev.c b/fs/nfs/pnfs_dev.c > index 037a5c6..923a9da 100644 > --- a/fs/nfs/pnfs_dev.c > +++ b/fs/nfs/pnfs_dev.c > @@ -161,6 +161,15 @@ nfs4_init_deviceid_node(struct nfs4_deviceid_node *d, > } > EXPORT_SYMBOL_GPL(nfs4_init_deviceid_node); > > +void > +nfs4_init_deviceid_cache() > +{ > + long h; > + > + for (h = 0; h < NFS4_DEVICE_ID_HASH_SIZE; h++) > + INIT_HLIST_HEAD(&nfs4_deviceid_cache[h]); > +} > + > /* > * Uniquely initialize and insert a deviceid node into cache > * > @@ -236,9 +245,10 @@ _deviceid_purge_client(const struct nfs_client *clp, long hash) > > synchronize_rcu(); > while (!hlist_empty(&tmp)) { > + d = hlist_entry(tmp.first, struct nfs4_deviceid_node, tmpnode); > + hlist_del_init(&d->tmpnode); nit: hlist_del rather than hlist_del_init should be enough here... Benny > if (atomic_dec_and_test(&d->ref)) > d->ld->free_deviceid_node(d); > - hlist_del_init(&d->tmpnode); > } > } > > @@ -247,6 +257,8 @@ nfs4_deviceid_purge_client(const struct nfs_client *clp) > { > long h; > > + if (!(clp->cl_exchange_flags & EXCHGID4_FLAG_USE_PNFS_MDS)) > + return; > for (h = 0; h < NFS4_DEVICE_ID_HASH_SIZE; h++) > _deviceid_purge_client(clp, h); > } -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 6f4850d..55ba1b0 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -1595,6 +1595,8 @@ static int __init init_nfs_fs(void) if (err) goto out0; + nfs4_init_deviceid_cache(); + #ifdef CONFIG_PROC_FS rpc_proc_register(&nfs_rpcstat); #endif diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h index e46edac..67400bc 100644 --- a/fs/nfs/pnfs.h +++ b/fs/nfs/pnfs.h @@ -212,6 +212,7 @@ void nfs4_init_deviceid_node(struct nfs4_deviceid_node *, struct nfs4_deviceid_node *nfs4_insert_deviceid_node(struct nfs4_deviceid_node *); bool nfs4_put_deviceid_node(struct nfs4_deviceid_node *); void nfs4_deviceid_purge_client(const struct nfs_client *); +void nfs4_init_deviceid_cache(void); static inline int lo_fail_bit(u32 iomode) { diff --git a/fs/nfs/pnfs_dev.c b/fs/nfs/pnfs_dev.c index 037a5c6..923a9da 100644 --- a/fs/nfs/pnfs_dev.c +++ b/fs/nfs/pnfs_dev.c @@ -161,6 +161,15 @@ nfs4_init_deviceid_node(struct nfs4_deviceid_node *d, } EXPORT_SYMBOL_GPL(nfs4_init_deviceid_node); +void +nfs4_init_deviceid_cache() +{ + long h; + + for (h = 0; h < NFS4_DEVICE_ID_HASH_SIZE; h++) + INIT_HLIST_HEAD(&nfs4_deviceid_cache[h]); +} + /* * Uniquely initialize and insert a deviceid node into cache * @@ -236,9 +245,10 @@ _deviceid_purge_client(const struct nfs_client *clp, long hash) synchronize_rcu(); while (!hlist_empty(&tmp)) { + d = hlist_entry(tmp.first, struct nfs4_deviceid_node, tmpnode); + hlist_del_init(&d->tmpnode); if (atomic_dec_and_test(&d->ref)) d->ld->free_deviceid_node(d); - hlist_del_init(&d->tmpnode); } } @@ -247,6 +257,8 @@ nfs4_deviceid_purge_client(const struct nfs_client *clp) { long h; + if (!(clp->cl_exchange_flags & EXCHGID4_FLAG_USE_PNFS_MDS)) + return; for (h = 0; h < NFS4_DEVICE_ID_HASH_SIZE; h++) _deviceid_purge_client(clp, h); }