svn commit: r186897 - head/sys/ufs/ffs

Konstantin Belousov kib at FreeBSD.org
Thu Jan 8 04:48:28 PST 2009


Author: kib
Date: Thu Jan  8 12:48:27 2009
New Revision: 186897
URL: http://svn.freebsd.org/changeset/base/186897

Log:
  If unmount of the ffs mp failed, reinitialize the extended attributes
  for the mp, and restart them if autostart is enabled.
  
  Reported and tested by:	pho
  Reviewed by:	rwatson
  MFC after:	3 weeks

Modified:
  head/sys/ufs/ffs/ffs_vfsops.c

Modified: head/sys/ufs/ffs/ffs_vfsops.c
==============================================================================
--- head/sys/ufs/ffs/ffs_vfsops.c	Thu Jan  8 12:47:30 2009	(r186896)
+++ head/sys/ufs/ffs/ffs_vfsops.c	Thu Jan  8 12:48:27 2009	(r186897)
@@ -1030,6 +1030,9 @@ ffs_unmount(mp, mntflags, td)
 	struct ufsmount *ump = VFSTOUFS(mp);
 	struct fs *fs;
 	int error, flags, susp;
+#ifdef UFS_EXTATTR
+	int e_restart;
+#endif
 
 	flags = 0;
 	fs = ump->um_fs;
@@ -1043,8 +1046,10 @@ ffs_unmount(mp, mntflags, td)
 		if (error != EOPNOTSUPP)
 			printf("ffs_unmount: ufs_extattr_stop returned %d\n",
 			    error);
+		e_restart = 0;
 	} else {
 		ufs_extattr_uepm_destroy(&ump->um_extattr);
+		e_restart = 1;
 	}
 #endif
 	if (susp) {
@@ -1121,6 +1126,15 @@ fail:
 		vfs_write_resume(mp);
 		vn_start_write(NULL, &mp, V_WAIT);
 	}
+#ifdef UFS_EXTATTR
+	if (e_restart) {
+		ufs_extattr_uepm_init(&ump->um_extattr);
+#ifdef UFS_EXTATTR_AUTOSTART
+		(void) ufs_extattr_autostart(mp, td);
+#endif
+	}
+#endif
+
 	return (error);
 }
 


More information about the svn-src-all mailing list