git://git.camperquake.de
/
zfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Evict meta data from ghost lists + l2arc headers
[zfs.git]
/
module
/
zfs
/
zfs_ctldir.c
diff --git
a/module/zfs/zfs_ctldir.c
b/module/zfs/zfs_ctldir.c
index
b3801d4
..
168f853
100644
(file)
--- a/
module/zfs/zfs_ctldir.c
+++ b/
module/zfs/zfs_ctldir.c
@@
-443,7
+443,7
@@
zfsctl_snapdir_lookup(struct inode *dip, char *name, struct inode **ipp,
ZFS_ENTER(zsb);
ZFS_ENTER(zsb);
- error = dmu_snapshot_
id
(zsb->z_os, name, &id);
+ error = dmu_snapshot_
lookup
(zsb->z_os, name, &id);
if (error) {
ZFS_EXIT(zsb);
return (error);
if (error) {
ZFS_EXIT(zsb);
return (error);
@@
-732,7
+732,11
@@
zfsctl_unmount_snapshot(zfs_sb_t *zsb, char *name, int flags)
sep = avl_find(&zsb->z_ctldir_snaps, &search, NULL);
if (sep) {
avl_remove(&zsb->z_ctldir_snaps, sep);
sep = avl_find(&zsb->z_ctldir_snaps, &search, NULL);
if (sep) {
avl_remove(&zsb->z_ctldir_snaps, sep);
+ mutex_exit(&zsb->z_ctldir_lock);
+
error = __zfsctl_unmount_snapshot(sep, flags);
error = __zfsctl_unmount_snapshot(sep, flags);
+
+ mutex_enter(&zsb->z_ctldir_lock);
if (error == EBUSY)
avl_add(&zsb->z_ctldir_snaps, sep);
else
if (error == EBUSY)
avl_add(&zsb->z_ctldir_snaps, sep);
else
@@
-767,7
+771,11
@@
zfsctl_unmount_snapshots(zfs_sb_t *zsb, int flags, int *count)
while (sep != NULL) {
next = AVL_NEXT(&zsb->z_ctldir_snaps, sep);
avl_remove(&zsb->z_ctldir_snaps, sep);
while (sep != NULL) {
next = AVL_NEXT(&zsb->z_ctldir_snaps, sep);
avl_remove(&zsb->z_ctldir_snaps, sep);
+ mutex_exit(&zsb->z_ctldir_lock);
+
error = __zfsctl_unmount_snapshot(sep, flags);
error = __zfsctl_unmount_snapshot(sep, flags);
+
+ mutex_enter(&zsb->z_ctldir_lock);
if (error == EBUSY) {
avl_add(&zsb->z_ctldir_snaps, sep);
(*count)++;
if (error == EBUSY) {
avl_add(&zsb->z_ctldir_snaps, sep);
(*count)++;
@@
-909,7
+917,7
@@
zfsctl_lookup_objset(struct super_block *sb, uint64_t objsetid, zfs_sb_t **zsbp)
*/
sep = avl_first(&zsb->z_ctldir_snaps);
while (sep != NULL) {
*/
sep = avl_first(&zsb->z_ctldir_snaps);
while (sep != NULL) {
- error = dmu_snapshot_
id
(zsb->z_os, sep->se_name, &id);
+ error = dmu_snapshot_
lookup
(zsb->z_os, sep->se_name, &id);
if (error)
goto out;
if (error)
goto out;