LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [2.6.7-rc1-bk] NTFS: 2.1.12 release - Fix the second fix to the decompression engine and some cleanups.
@ 2004-05-26 21:16 Anton Altaparmakov
  2004-05-26 21:17 ` [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 1/3 Anton Altaparmakov
  0 siblings, 1 reply; 4+ messages in thread
From: Anton Altaparmakov @ 2004-05-26 21:16 UTC (permalink / raw)
  To: Andrew Morton, Linus Torvalds; +Cc: linux-kernel, linux-ntfs-dev

Hi Andrew, Hi Linus, please do a

	bk pull bk://linux-ntfs.bkbits.net/ntfs-2.6

This will update the following files:

 Documentation/filesystems/ntfs.txt |    3
 fs/ntfs/ChangeLog                  |   18 ++++
 fs/ntfs/Makefile                   |    4 -
 fs/ntfs/aops.c                     |    9 ++
 fs/ntfs/compress.c                 |   20 +----
 fs/ntfs/dir.c                      |    2
 fs/ntfs/inode.c                    |  134 ++++++++++++++++++++++++-------------
 fs/ntfs/inode.h                    |    9 ++
 fs/ntfs/ntfs.h                     |    1
 fs/ntfs/super.c                    |    4 -
 10 files changed, 140 insertions(+), 64 deletions(-)

through these ChangeSets:

<aia21@cantab.net> (04/05/17 1.1717.9.1)
   NTFS: Add a new address space operations struct, ntfs_mst_aops, for mst
         protected attributes.  This is because the default ntfs_aops do not
         make sense with mst protected data and were they to write anything to
         such an attribute they would cause data corruption so we provide
         ntfs_mst_aops which does not have any write related operations set.

<aia21@cantab.net> (04/05/25 1.1731)
   NTFS: Cleanup dirty ntfs inode handling (fs/ntfs/inode.[hc]) which also
         includes an adapted ntfs_commit_inode() and an implementation of
         ntfs_write_inode() which for now just cleans dirty inodes without
         writing them (it does emit a warning that this is happening).

<aia21@cantab.net> (04/05/26 1.1733)
   NTFS: 2.1.12 release - Fix the second fix to the decompression engine.

For the benefit of non-BK users and to make code review easier, I am
sending each ChangeSet in a separate email as a diff -u style patch.

Thanks!

Best regards,

	Anton
-- 
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK
Linux NTFS maintainer / IRC: #ntfs on irc.freenode.net
WWW: http://linux-ntfs.sf.net/, http://www-stu.christs.cam.ac.uk/~aia21/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 1/3
  2004-05-26 21:16 [2.6.7-rc1-bk] NTFS: 2.1.12 release - Fix the second fix to the decompression engine and some cleanups Anton Altaparmakov
@ 2004-05-26 21:17 ` Anton Altaparmakov
  2004-05-26 21:19   ` [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 2/3 Anton Altaparmakov
  0 siblings, 1 reply; 4+ messages in thread
From: Anton Altaparmakov @ 2004-05-26 21:17 UTC (permalink / raw)
  To: Andrew Morton, Linus Torvalds; +Cc: linux-kernel, linux-ntfs-dev

This is patch 1 in the series. It contains the following ChangeSet:

<aia21@cantab.net> (04/05/17 1.1717.9.1)
   NTFS: Add a new address space operations struct, ntfs_mst_aops, for mst
         protected attributes.  This is because the default ntfs_aops do not
         make sense with mst protected data and were they to write anything to
         such an attribute they would cause data corruption so we provide
         ntfs_mst_aops which does not have any write related operations set.

Best regards,

	Anton
-- 
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK
Linux NTFS maintainer / IRC: #ntfs on irc.freenode.net
WWW: http://linux-ntfs.sf.net/, http://www-stu.christs.cam.ac.uk/~aia21/

===================================================================

diff -Nru a/fs/ntfs/ChangeLog b/fs/ntfs/ChangeLog
--- a/fs/ntfs/ChangeLog	2004-05-26 22:10:11 +01:00
+++ b/fs/ntfs/ChangeLog	2004-05-26 22:10:11 +01:00
@@ -25,6 +25,14 @@
 	  sufficient for synchronisation here. We then just need to make sure
 	  ntfs_readpage/writepage/truncate interoperate properly with us.

+2.1.12 - WIP.
+
+	- Add a new address space operations struct, ntfs_mst_aops, for mst
+	  protected attributes.  This is because the default ntfs_aops do not
+	  make sense with mst protected data and were they to write anything to
+	  such an attribute they would cause data corruption so we provide
+	  ntfs_mst_aops which does not have any write related operations set.
+
 2.1.11 - Driver internal cleanups.

 	- Only build logfile.o if building the driver with read-write support.
diff -Nru a/fs/ntfs/Makefile b/fs/ntfs/Makefile
--- a/fs/ntfs/Makefile	2004-05-26 22:10:11 +01:00
+++ b/fs/ntfs/Makefile	2004-05-26 22:10:11 +01:00
@@ -5,7 +5,7 @@
 ntfs-objs := aops.o attrib.o compress.o debug.o dir.o file.o inode.o mft.o \
 	     mst.o namei.o super.o sysctl.o unistr.o upcase.o

-EXTRA_CFLAGS = -DNTFS_VERSION=\"2.1.11\"
+EXTRA_CFLAGS = -DNTFS_VERSION=\"2.1.12-WIP\"

 ifeq ($(CONFIG_NTFS_DEBUG),y)
 EXTRA_CFLAGS += -DDEBUG
diff -Nru a/fs/ntfs/aops.c b/fs/ntfs/aops.c
--- a/fs/ntfs/aops.c	2004-05-26 22:10:11 +01:00
+++ b/fs/ntfs/aops.c	2004-05-26 22:10:11 +01:00
@@ -1788,3 +1788,12 @@
 #endif
 };

+/**
+ * ntfs_mst_aops - general address space operations for mst protecteed inodes
+ *		   and attributes
+ */
+struct address_space_operations ntfs_mst_aops = {
+	.readpage	= ntfs_readpage,	/* Fill page with data. */
+	.sync_page	= block_sync_page,	/* Currently, just unplugs the
+						   disk request queue. */
+};
diff -Nru a/fs/ntfs/inode.c b/fs/ntfs/inode.c
--- a/fs/ntfs/inode.c	2004-05-26 22:10:11 +01:00
+++ b/fs/ntfs/inode.c	2004-05-26 22:10:11 +01:00
@@ -872,7 +872,7 @@
 		/* Setup the operations for this inode. */
 		vi->i_op = &ntfs_dir_inode_ops;
 		vi->i_fop = &ntfs_dir_ops;
-		vi->i_mapping->a_ops = &ntfs_aops;
+		vi->i_mapping->a_ops = &ntfs_mst_aops;
 	} else {
 		/* It is a file. */
 		reinit_attr_search_ctx(ctx);
@@ -1249,7 +1249,10 @@
 	/* Setup the operations for this attribute inode. */
 	vi->i_op = NULL;
 	vi->i_fop = NULL;
-	vi->i_mapping->a_ops = &ntfs_aops;
+	if (NInoMstProtected(ni))
+		vi->i_mapping->a_ops = &ntfs_mst_aops;
+	else
+		vi->i_mapping->a_ops = &ntfs_aops;

 	if (!NInoCompressed(ni))
 		vi->i_blocks = ni->allocated_size >> 9;
diff -Nru a/fs/ntfs/ntfs.h b/fs/ntfs/ntfs.h
--- a/fs/ntfs/ntfs.h	2004-05-26 22:10:11 +01:00
+++ b/fs/ntfs/ntfs.h	2004-05-26 22:10:11 +01:00
@@ -62,6 +62,7 @@
 /* The various operations structs defined throughout the driver files. */
 extern struct super_operations ntfs_sops;
 extern struct address_space_operations ntfs_aops;
+extern struct address_space_operations ntfs_mst_aops;
 extern struct address_space_operations ntfs_mft_aops;

 extern struct  file_operations ntfs_file_ops;

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 2/3
  2004-05-26 21:17 ` [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 1/3 Anton Altaparmakov
@ 2004-05-26 21:19   ` Anton Altaparmakov
  2004-05-26 21:21     ` [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 3/3 Anton Altaparmakov
  0 siblings, 1 reply; 4+ messages in thread
From: Anton Altaparmakov @ 2004-05-26 21:19 UTC (permalink / raw)
  To: Andrew Morton, Linus Torvalds; +Cc: linux-kernel, linux-ntfs-dev

This is patch 2 in the series.  It contains the following ChangeSet:

<aia21@cantab.net> (04/05/25 1.1731)
   NTFS: Cleanup dirty ntfs inode handling (fs/ntfs/inode.[hc]) which also
         includes an adapted ntfs_commit_inode() and an implementation of
         ntfs_write_inode() which for now just cleans dirty inodes without
         writing them (it does emit a warning that this is happening).

Best regards,

	Anton
-- 
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK
Linux NTFS maintainer / IRC: #ntfs on irc.freenode.net
WWW: http://linux-ntfs.sf.net/, http://www-stu.christs.cam.ac.uk/~aia21/

===================================================================

diff -Nru a/fs/ntfs/ChangeLog b/fs/ntfs/ChangeLog
--- a/fs/ntfs/ChangeLog	2004-05-26 22:10:14 +01:00
+++ b/fs/ntfs/ChangeLog	2004-05-26 22:10:14 +01:00
@@ -32,6 +32,10 @@
 	  make sense with mst protected data and were they to write anything to
 	  such an attribute they would cause data corruption so we provide
 	  ntfs_mst_aops which does not have any write related operations set.
+	- Cleanup dirty ntfs inode handling (fs/ntfs/inode.[hc]) which also
+	  includes an adapted ntfs_commit_inode() and an implementation of
+	  ntfs_write_inode() which for now just cleans dirty inodes without
+	  writing them (it does emit a warning that this is happening).

 2.1.11 - Driver internal cleanups.

diff -Nru a/fs/ntfs/dir.c b/fs/ntfs/dir.c
--- a/fs/ntfs/dir.c	2004-05-26 22:10:14 +01:00
+++ b/fs/ntfs/dir.c	2004-05-26 22:10:14 +01:00
@@ -1196,7 +1196,7 @@
 	ia_mapping = vdir->i_mapping;
 	bmp_vi = ndir->itype.index.bmp_ino;
 	if (unlikely(!bmp_vi)) {
-		ntfs_debug("Inode %lu, regetting index bitmap.", vdir->i_ino);
+		ntfs_debug("Inode 0x%lx, regetting index bitmap.", vdir->i_ino);
 		bmp_vi = ntfs_attr_iget(vdir, AT_BITMAP, I30, 4);
 		if (unlikely(IS_ERR(bmp_vi))) {
 			ntfs_error(sb, "Failed to get bitmap attribute.");
diff -Nru a/fs/ntfs/inode.c b/fs/ntfs/inode.c
--- a/fs/ntfs/inode.c	2004-05-26 22:10:14 +01:00
+++ b/fs/ntfs/inode.c	2004-05-26 22:10:14 +01:00
@@ -1342,7 +1342,7 @@
 	ni->name_len = 0;

 	/*
-	 * This sets up our little cheat allowing us to reuse the async io
+	 * This sets up our little cheat allowing us to reuse the async read io
 	 * completion handler for directories.
 	 */
 	ni->itype.index.block_size = vol->mft_record_size;
@@ -1706,18 +1706,6 @@
 }

 /**
- * ntfs_commit_inode - write out a dirty inode
- * @ni:		inode to write out
- *
- */
-int ntfs_commit_inode(ntfs_inode *ni)
-{
-	ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
-	NInoClearDirty(ni);
-	return 0;
-}
-
-/**
  * ntfs_put_inode - handler for when the inode reference count is decremented
  * @vi:		vfs inode
  *
@@ -1745,34 +1733,6 @@

 void __ntfs_clear_inode(ntfs_inode *ni)
 {
-	int err;
-
-	ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
-	if (NInoDirty(ni)) {
-		err = ntfs_commit_inode(ni);
-		if (err) {
-			ntfs_error(ni->vol->sb, "Failed to commit dirty "
-					"inode synchronously.");
-			// FIXME: Do something!!!
-		}
-	}
-	/* Synchronize with ntfs_commit_inode(). */
-	down(&ni->mrec_lock);
-	up(&ni->mrec_lock);
-	if (NInoDirty(ni)) {
-		ntfs_error(ni->vol->sb, "Failed to commit dirty inode "
-				"asynchronously.");
-		// FIXME: Do something!!!
-	}
-	/* No need to lock at this stage as no one else has a reference. */
-	if (ni->nr_extents > 0) {
-		int i;
-
-		// FIXME: Handle dirty case for each extent inode!
-		for (i = 0; i < ni->nr_extents; i++)
-			ntfs_clear_extent_inode(ni->ext.extent_ntfs_inos[i]);
-		kfree(ni->ext.extent_ntfs_inos);
-	}
 	/* Free all alocated memory. */
 	down_write(&ni->run_list.lock);
 	if (ni->run_list.rl) {
@@ -1802,6 +1762,20 @@

 void ntfs_clear_extent_inode(ntfs_inode *ni)
 {
+	ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
+
+	BUG_ON(NInoAttr(ni));
+	BUG_ON(ni->nr_extents != -1);
+
+#ifdef NTFS_RW
+	if (NInoDirty(ni)) {
+		if (!is_bad_inode(VFS_I(ni->ext.base_ntfs_ino)))
+			ntfs_error(ni->vol->sb, "Clearing dirty extent inode!  "
+					"Losing data!  This is a BUG!!!");
+		// FIXME:  Do something!!!
+	}
+#endif /* NTFS_RW */
+
 	__ntfs_clear_inode(ni);

 	/* Bye, bye... */
@@ -1822,6 +1796,30 @@
 {
 	ntfs_inode *ni = NTFS_I(vi);

+#ifdef NTFS_RW
+	if (NInoDirty(ni)) {
+		BOOL was_bad = (is_bad_inode(vi));
+
+		/* Committing the inode also commits all extent inodes. */
+		ntfs_commit_inode(vi);
+
+		if (!was_bad && (is_bad_inode(vi) || NInoDirty(ni))) {
+			ntfs_error(vi->i_sb, "Failed to commit dirty inode "
+					"0x%lx.  Losing data!", vi->i_ino);
+			// FIXME:  Do something!!!
+		}
+	}
+#endif /* NTFS_RW */
+
+	/* No need to lock at this stage as no one else has a reference. */
+	if (ni->nr_extents > 0) {
+		int i;
+
+		for (i = 0; i < ni->nr_extents; i++)
+			ntfs_clear_extent_inode(ni->ext.extent_ntfs_inos[i]);
+		kfree(ni->ext.extent_ntfs_inos);
+	}
+
 	__ntfs_clear_inode(ni);

 	if (NInoAttr(ni)) {
@@ -1962,4 +1960,49 @@
 	return err;
 }

-#endif
+void ntfs_write_inode(struct inode *vi, int sync)
+{
+	ntfs_inode *ni = NTFS_I(vi);
+
+	ntfs_debug("Entering for %sinode 0x%lx.", NInoAttr(ni) ? "attr " : "",
+			vi->i_ino);
+
+	/*
+	 * Dirty attribute inodes are written via their real inodes so just
+	 * clean them here.
+	 */
+	if (NInoAttr(ni)) {
+		NInoClearDirty(ni);
+		return;
+	}
+
+	/* Write this base mft record. */
+	if (NInoDirty(ni)) {
+		ntfs_warning(vi->i_sb, "Cleaning dirty inode 0x%lx without "
+				"writing to disk as this is not yet "
+				"implemented.", vi->i_ino);
+		NInoClearDirty(ni);
+	}
+
+	/* Write all attached extent mft records. */
+	down(&ni->extent_lock);
+	if (ni->nr_extents > 0) {
+		int i;
+		ntfs_inode **extent_nis = ni->ext.extent_ntfs_inos;
+
+		for (i = 0; i < ni->nr_extents; i++) {
+			ntfs_inode *tni = extent_nis[i];
+
+			if (NInoDirty(tni)) {
+				ntfs_warning(vi->i_sb, "Cleaning dirty extent "
+						"inode 0x%lx without writing "
+						"to disk as this is not yet "
+						"implemented.", tni->mft_no);
+				NInoClearDirty(tni);
+			}
+		}
+	}
+	up(&ni->extent_lock);
+}
+
+#endif /* NTFS_RW */
diff -Nru a/fs/ntfs/inode.h b/fs/ntfs/inode.h
--- a/fs/ntfs/inode.h	2004-05-26 22:10:14 +01:00
+++ b/fs/ntfs/inode.h	2004-05-26 22:10:14 +01:00
@@ -281,6 +281,15 @@

 extern int ntfs_setattr(struct dentry *dentry, struct iattr *attr);

+extern void ntfs_write_inode(struct inode *vi, int sync);
+
+static inline void ntfs_commit_inode(struct inode *vi)
+{
+	if (!is_bad_inode(vi))
+		ntfs_write_inode(vi, 1);
+	return;
+}
+
 #endif /* NTFS_RW */

 #endif /* _LINUX_NTFS_INODE_H */
diff -Nru a/fs/ntfs/super.c b/fs/ntfs/super.c
--- a/fs/ntfs/super.c	2004-05-26 22:10:14 +01:00
+++ b/fs/ntfs/super.c	2004-05-26 22:10:14 +01:00
@@ -763,7 +763,7 @@
 	/* The $MFTMirr, like the $MFT is multi sector transfer protected. */
 	NInoSetMstProtected(tmp_ni);
 	/*
-	 * Set up our little cheat allowing us to reuse the async io
+	 * Set up our little cheat allowing us to reuse the async read io
 	 * completion handler for directories.
 	 */
 	tmp_ni->itype.index.block_size = vol->mft_record_size;

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 3/3
  2004-05-26 21:19   ` [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 2/3 Anton Altaparmakov
@ 2004-05-26 21:21     ` Anton Altaparmakov
  0 siblings, 0 replies; 4+ messages in thread
From: Anton Altaparmakov @ 2004-05-26 21:21 UTC (permalink / raw)
  To: Andrew Morton, Linus Torvalds; +Cc: linux-kernel, linux-ntfs-dev

This is patch 3 in the series.  It contains the following ChangeSet:

<aia21@cantab.net> (04/05/26 1.1733)
   NTFS: 2.1.12 release - Fix the second fix to the decompression engine.

Best regards,

	Anton
-- 
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK
Linux NTFS maintainer / IRC: #ntfs on irc.freenode.net
WWW: http://linux-ntfs.sf.net/, http://www-stu.christs.cam.ac.uk/~aia21/

===================================================================

diff -Nru a/Documentation/filesystems/ntfs.txt b/Documentation/filesystems/ntfs.txt
--- a/Documentation/filesystems/ntfs.txt	2004-05-26 22:10:16 +01:00
+++ b/Documentation/filesystems/ntfs.txt	2004-05-26 22:10:16 +01:00
@@ -273,6 +273,9 @@

 Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.

+2.1.12:
+	- Fix the second fix to the decompression engine from the 2.1.9 release
+	  and some further internals cleanups.
 2.1.11:
 	- Driver internal cleanups.
 2.1.10:
diff -Nru a/fs/ntfs/ChangeLog b/fs/ntfs/ChangeLog
--- a/fs/ntfs/ChangeLog	2004-05-26 22:10:16 +01:00
+++ b/fs/ntfs/ChangeLog	2004-05-26 22:10:16 +01:00
@@ -25,7 +25,7 @@
 	  sufficient for synchronisation here. We then just need to make sure
 	  ntfs_readpage/writepage/truncate interoperate properly with us.

-2.1.12 - WIP.
+2.1.12 - Fix the second fix to the decompression engine and some cleanups.

 	- Add a new address space operations struct, ntfs_mst_aops, for mst
 	  protected attributes.  This is because the default ntfs_aops do not
@@ -36,6 +36,10 @@
 	  includes an adapted ntfs_commit_inode() and an implementation of
 	  ntfs_write_inode() which for now just cleans dirty inodes without
 	  writing them (it does emit a warning that this is happening).
+	- Undo the second decompression engine fix (see 2.1.9 release ChangeLog
+	  entry) as it was only fixing a theoretical bug but at the same time
+	  it badly broke the handling of sparse and uncompressed compression
+	  blocks.

 2.1.11 - Driver internal cleanups.

diff -Nru a/fs/ntfs/Makefile b/fs/ntfs/Makefile
--- a/fs/ntfs/Makefile	2004-05-26 22:10:16 +01:00
+++ b/fs/ntfs/Makefile	2004-05-26 22:10:16 +01:00
@@ -5,7 +5,7 @@
 ntfs-objs := aops.o attrib.o compress.o debug.o dir.o file.o inode.o mft.o \
 	     mst.o namei.o super.o sysctl.o unistr.o upcase.o

-EXTRA_CFLAGS = -DNTFS_VERSION=\"2.1.12-WIP\"
+EXTRA_CFLAGS = -DNTFS_VERSION=\"2.1.12\"

 ifeq ($(CONFIG_NTFS_DEBUG),y)
 EXTRA_CFLAGS += -DDEBUG
diff -Nru a/fs/ntfs/compress.c b/fs/ntfs/compress.c
--- a/fs/ntfs/compress.c	2004-05-26 22:10:16 +01:00
+++ b/fs/ntfs/compress.c	2004-05-26 22:10:16 +01:00
@@ -507,7 +507,7 @@
 	 */
 	unsigned int nr_pages = (end_vcn - start_vcn) <<
 			vol->cluster_size_bits >> PAGE_CACHE_SHIFT;
-	unsigned int xpage, max_page, max_ofs, cur_page, cur_ofs, i;
+	unsigned int xpage, max_page, cur_page, cur_ofs, i;
 	unsigned int cb_clusters, cb_max_ofs;
 	int block, max_block, cb_max_page, bhs_size, nr_bhs, err = 0;
 	struct page **pages;
@@ -550,11 +550,8 @@
 	 */
 	max_page = ((VFS_I(ni)->i_size + PAGE_CACHE_SIZE - 1) >>
 			PAGE_CACHE_SHIFT) - offset;
-	max_ofs = (VFS_I(ni)->i_size + PAGE_CACHE_SIZE - 1) & ~PAGE_CACHE_MASK;
-	if (nr_pages < max_page) {
+	if (nr_pages < max_page)
 		max_page = nr_pages;
-		max_ofs = 0;
-	}
 	for (i = 0; i < max_page; i++, offset++) {
 		if (i != xpage)
 			pages[i] = grab_cache_page_nowait(mapping, offset);
@@ -722,14 +719,8 @@
 	cb_max_page >>= PAGE_CACHE_SHIFT;

 	/* Catch end of file inside a compression block. */
-	if (cb_max_page >= max_page) {
-		if (cb_max_page > max_page) {
-			cb_max_page = max_page;
-			cb_max_ofs = max_ofs;
-		} else if (cb_max_ofs > max_ofs) {
-			cb_max_ofs = max_ofs;
-		}
-	}
+	if (cb_max_page > max_page)
+		cb_max_page = max_page;

 	if (vcn == start_vcn - cb_clusters) {
 		/* Sparse cb, zero out page range overlapping the cb. */
@@ -897,7 +888,8 @@
 		if (page) {
 			ntfs_error(vol->sb, "Still have pages left! "
 					"Terminating them with extreme "
-					"prejudice.");
+					"prejudice.  Inode 0x%lx, page index "
+					"0x%lx.", ni->mft_no, page->index);
 			if (cur_page == xpage && !xpage_done)
 				SetPageError(page);
 			flush_dcache_page(page);
diff -Nru a/fs/ntfs/super.c b/fs/ntfs/super.c
--- a/fs/ntfs/super.c	2004-05-26 22:10:16 +01:00
+++ b/fs/ntfs/super.c	2004-05-26 22:10:16 +01:00
@@ -1142,7 +1142,7 @@
 #ifdef NTFS_RW
 	/* Make sure that no unsupported volume flags are set. */
 	if (vol->vol_flags & VOLUME_MUST_MOUNT_RO_MASK) {
-		static const char *es1 = "Volume has unsupported flags set ";
+		static const char *es1 = "Volume has unsupported flags set";
 		static const char *es2 = ".  Run chkdsk and mount in Windows.";

 		/* If a read-write mount, convert it to a read-only mount. */

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2004-05-26 21:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-05-26 21:16 [2.6.7-rc1-bk] NTFS: 2.1.12 release - Fix the second fix to the decompression engine and some cleanups Anton Altaparmakov
2004-05-26 21:17 ` [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 1/3 Anton Altaparmakov
2004-05-26 21:19   ` [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 2/3 Anton Altaparmakov
2004-05-26 21:21     ` [2.6.7-rc1-bk] NTFS: 2.1.12 release - patch 3/3 Anton Altaparmakov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).