--- include/linux/msdos_fs.h.orig	Tue Apr 22 12:05:35 2003
+++ include/linux/msdos_fs.h	Tue Apr 22 12:06:02 2003
@@ -146,8 +146,7 @@
 	__u32   reserved1[120];	/* Nothing as far as I can tell */
 	__u32   signature2;	/* 0x61417272L */
 	__u32   free_clusters;	/* Free cluster count.  -1 if unknown */
-	__u32   next_cluster;	/* Most recently allocated cluster.
-				 * Unused under Linux. */
+	__u32   next_cluster;	/* Most recently allocated cluster */
 	__u32   reserved2[4];
 };
 
--- fs/fat/inode.c.orig	Tue Apr 22 12:06:12 2003
+++ fs/fat/inode.c	Tue Apr 22 12:08:12 2003
@@ -898,6 +898,7 @@
 			       sbi->fsinfo_sector);
 		} else {
 			sbi->free_clusters = CF_LE_L(fsinfo->free_clusters);
+			sbi->prev_free = CF_LE_L(fsinfo->next_cluster);
 		}
 
 		brelse(fsinfo_bh);
--- fs/fat/misc.c.orig	Tue Apr 22 12:06:16 2003
+++ fs/fat/misc.c	Tue Apr 22 12:06:49 2003
@@ -74,6 +74,7 @@
 		       MSDOS_SB(sb)->fsinfo_sector);
 	} else {
 		fsinfo->free_clusters = CF_LE_L(MSDOS_SB(sb)->free_clusters);
+		fsinfo->next_cluster = CF_LE_L(MSDOS_SB(sb)->prev_free);
 		mark_buffer_dirty(bh);
 	}
 	brelse(bh);
