---
 mkfs.jffs2.c |   44 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 42 insertions(+), 2 deletions(-)

--- git.orig/mkfs.jffs2.c
+++ git/mkfs.jffs2.c
@@ -98,10 +98,16 @@ struct filesystem_entry {
 	struct filesystem_entry *next;	/* Only relevant to non-directories */
 	struct filesystem_entry *files;	/* Only relevant to directories */
 	struct rb_node hardlink_rb;
 };
 
+struct ignorepath_entry {
+	struct ignorepath_entry* next;	/* Points to the next ignorepath element */
+	char name[PATH_MAX];		/* Name of the entry */
+};
+
+static struct ignorepath_entry* ignorepath = 0;
 struct rb_root hardlinks;
 static int out_fd = -1;
 static int in_fd = -1;
 static char default_rootdir[] = ".";
 static char *rootdir = default_rootdir;
@@ -404,19 +410,28 @@ static struct filesystem_entry *recursiv
 	int i, n;
 	struct stat sb;
 	char *hpath, *tpath;
 	struct dirent *dp, **namelist;
 	struct filesystem_entry *entry;
-
+	struct ignorepath_entry* element = ignorepath;
 
 	if (lstat(hostpath, &sb)) {
 		perror_msg_and_die("%s", hostpath);
 	}
 
 	entry = add_host_filesystem_entry(targetpath, hostpath,
 			sb.st_uid, sb.st_gid, sb.st_mode, 0, parent);
 
+	while ( element ) {
+		if ( strcmp( element->name, targetpath ) == 0 ) {
+			printf( "Note: ignoring directories below '%s'\n", targetpath );
+			return entry;
+			break;
+		}
+		element = element->next;
+	}
+
 	n = scandir(hostpath, &namelist, 0, alphasort);
 	if (n < 0) {
 		perror_msg_and_die("opening directory %s", hostpath);
 	}
 
@@ -1446,10 +1461,11 @@ static void create_target_filesystem(str
 static struct option long_options[] = {
 	{"pad", 2, NULL, 'p'},
 	{"root", 1, NULL, 'r'},
 	{"pagesize", 1, NULL, 's'},
 	{"eraseblock", 1, NULL, 'e'},
+	{"ignore", 1, NULL, 'I'},
 	{"output", 1, NULL, 'o'},
 	{"help", 0, NULL, 'h'},
 	{"verbose", 0, NULL, 'v'},
 	{"version", 0, NULL, 'V'},
 	{"big-endian", 0, NULL, 'b'},
@@ -1493,10 +1509,11 @@ static char *helptext =
 "  -y, --compressor-priority=PRIORITY:COMPRESSOR_NAME\n"
 "                          Set the priority of a compressor\n"
 "  -L, --list-compressors  Show the list of the avaiable compressors\n"
 "  -t, --test-compression  Call decompress and compare with the original (for test)\n"
 "  -n, --no-cleanmarkers   Don't add a cleanmarker to every eraseblock\n"
+"  -I, --ignore=PATH       Ignore sub directory and file tree below PATH when recursing over the file system\n"
 "  -o, --output=FILE       Output to FILE (default: stdout)\n"
 "  -l, --little-endian     Create a little-endian filesystem\n"
 "  -b, --big-endian        Create a big-endian filesystem\n"
 "  -D, --devtable=FILE     Use the named FILE as a device table file\n"
 "  -f, --faketime          Change all file times to '0' for regression testing\n"
@@ -1659,21 +1676,22 @@ int main(int argc, char **argv)
 	FILE *devtable = NULL;
 	struct filesystem_entry *root;
 	char *compr_name = NULL;
 	int compr_prior  = -1;
 	int warn_page_size = 0;
+  	struct ignorepath_entry* element = ignorepath;
 
 	page_size = sysconf(_SC_PAGESIZE);
 	if (page_size < 0) /* System doesn't know so ... */
 		page_size = 4096; /* ... we make an educated guess */
 	if (page_size != 4096)
 		warn_page_size = 1; /* warn user if page size not 4096 */
 
 	jffs2_compressors_init();
 
 	while ((opt = getopt_long(argc, argv,
-					"D:d:r:s:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0)
+   					"D:d:r:s:I:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0)
 	{
 		switch (opt) {
 			case 'D':
 				devtable = xfopen(optarg, "r");
 				if (fstat(fileno(devtable), &sb) < 0)
@@ -1693,10 +1711,32 @@ int main(int argc, char **argv)
 			case 's':
 				page_size = strtol(optarg, NULL, 0);
 				warn_page_size = 0; /* set by user, so don't need to warn */
 				break;
 
+			case 'I':
+				printf( "Note: Adding '%s' to ignore Path\n", optarg );
+				element = ignorepath;
+				if ( !ignorepath ) {
+					ignorepath = xmalloc( sizeof( struct ignorepath_entry ) );
+					ignorepath->next = 0;
+					strcpy( &ignorepath->name[0], optarg );
+				} else {
+					while ( element->next ) element = element->next;
+					element->next = xmalloc( sizeof( struct ignorepath_entry ) );
+ 					element->next->next = 0;
+					strcpy( &element->next->name[0], optarg );
+				}
+				printf( "--------- Dumping ignore path list ----------------\n" );
+				element = ignorepath;
+				while ( element ) {
+					printf( "  * '%s'\n", &element->name[0] );
+					element = element->next;
+				}
+				printf( "---------------------------------------------------\n" );
+				break;
+
 			case 'o':
 				if (out_fd != -1) {
 					error_msg_and_die("output filename specified more than once");
 				}
 				out_fd = open(optarg, O_CREAT | O_TRUNC | O_RDWR, 0644);