Skip to contentSkip to conversation

reiser4: remove an assertion "nikita-2577" which is no longer possible to check.

PATCH In review Ivan Shapovalov 2 participants 3 messages May 5, 2014 – May 6, 2014

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 reiser4: remove an assertion "nikita-2577" which is no longer possible to check.

Since 3.11, file->f_pos is not up-to-date during an iterate() in progress. This was true for readdir(), but is no longer so.

---

Is this correct? I assume that adjust_dir_pos() is called simultaneously with iterate()... or not? If not, then passing 'dir->f_pos' to reiser4_get_dir_fpos() will suffice.

 fs/reiser4/plugin/file_ops_readdir.c | 2 --
 1 file changed, 2 deletions(-)
fs/reiser4/plugin/file_ops_readdir.c +0 -2
index 0da5ac5..f53573c 100644
@@ -58,8 +58,6 @@ adjust_dir_pos(struct file *dir, struct readdir_pos *readdir_spot,
 		/* logical number of directory entry readdir is "looking" at
 		 * changes */
 		readdir_spot->entry_no += adj;
-		assert("nikita-2577",
-		       ergo(dir != NULL, reiser4_get_dir_fpos(dir) + adj >= 0));
 		if (de_id_cmp(&pos->dir_entry_key,
 			      &mod_point->dir_entry_key) == EQUAL_TO) {
 			assert("nikita-2575", mod_point->pos < pos->pos);
Signature · 1 line
1.9.2
#1 lore raw
Quoted 8 lines · Ivan Shapovalov

Since 3.11, file->f_pos is not up-to-date during an iterate() in progress. This was true for readdir(), but is no longer so.

---

Is this correct? I assume that adjust_dir_pos() is called simultaneously with iterate()... or not?

adjust_dir_pos() is a work around seekdir/telldir API, and has nothing with iterate(), see the comment before reiser4_iterate_common(). So, I think, it is incorrect, and dir->f_pos is perfectly valid.

Quoted 19 lines

If not, then passing 'dir->f_pos' to reiser4_get_dir_fpos()
will suffice.

  fs/reiser4/plugin/file_ops_readdir.c | 2 --
  1 file changed, 2 deletions(-)
fs/reiser4/plugin/file_ops_readdir.c +0 -2
index 0da5ac5..f53573c 100644
@@ -58,8 +58,6 @@ adjust_dir_pos(struct file *dir, struct readdir_pos *readdir_spot,
  		/* logical number of directory entry readdir is "looking" at
  		 * changes */
  		readdir_spot->entry_no += adj;
-		assert("nikita-2577",
-		       ergo(dir != NULL, reiser4_get_dir_fpos(dir) + adj >= 0));
  		if (de_id_cmp(&pos->dir_entry_key,
  			      &mod_point->dir_entry_key) == EQUAL_TO) {
  			assert("nikita-2575", mod_point->pos < pos->pos);
#2 lore raw

PATCH v2 1/1 reiser4: fix an assertion broken since 3.11.

reiser4_get_dir_fpos takes an extra argument. It should be safe to pass dir->f_pos (thus keeping the old behavior exactly).

---

OK, got it.

 fs/reiser4/plugin/file_ops_readdir.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
fs/reiser4/plugin/file_ops_readdir.c +2 -1
index 0da5ac5..e359dec 100644
@@ -59,7 +59,8 @@ adjust_dir_pos(struct file *dir, struct readdir_pos *readdir_spot,
 		 * changes */
 		readdir_spot->entry_no += adj;
 		assert("nikita-2577",
-		       ergo(dir != NULL, reiser4_get_dir_fpos(dir) + adj >= 0));
+		       ergo(dir != NULL, reiser4_get_dir_fpos(dir, dir->f_pos) + adj
+		                         >= 0));
 		if (de_id_cmp(&pos->dir_entry_key,
 			      &mod_point->dir_entry_key) == EQUAL_TO) {
 			assert("nikita-2575", mod_point->pos < pos->pos);
Signature · 1 line
1.9.2