diff --git a/fs/orangefs/dir.c b/fs/orangefs/dir.c
index 4cfb3e5b597ebd5a2582dd00d5590a5d8ecf6710..cac601498925febed61febf6aa574843c942e55c 100644
--- a/fs/orangefs/dir.c
+++ b/fs/orangefs/dir.c
@@ -275,6 +275,28 @@ static int orangefs_dir_fill(struct orangefs_inode_s *oi,
 	return 0;
 }
 
+static loff_t orangefs_dir_llseek(struct file *file, loff_t offset,
+    int whence)
+{
+	struct orangefs_dir *od = file->private_data;
+	/*
+	 * Delete the stored data so userspace sees new directory
+	 * entries.
+	 */
+	if (!whence && offset < od->end) {
+		struct orangefs_dir_part *part = od->part;
+		while (part) {
+			struct orangefs_dir_part *next = part->next;
+			vfree(part);
+			part = next;
+		}
+		od->token = ORANGEFS_ITERATE_START;
+		od->part = NULL;
+		od->end = 1 << PART_SHIFT;
+	}
+	return default_llseek(file, offset, whence);
+}
+
 static int orangefs_dir_iterate(struct file *file,
     struct dir_context *ctx)
 {
@@ -371,7 +393,7 @@ static int orangefs_dir_release(struct inode *inode, struct file *file)
 }
 
 const struct file_operations orangefs_dir_operations = {
-	.llseek = default_llseek,
+	.llseek = orangefs_dir_llseek,
 	.read = generic_read_dir,
 	.iterate = orangefs_dir_iterate,
 	.open = orangefs_dir_open,