Re: [V2, 1/1] NFSv4.1: remove pnfs_layout_hdr from pnfs_destroy_all_layouts tmp_list

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/16/2011 09:44 PM, Andy Adamson wrote:

On May 14, 2011, at 6:50 PM, Vitaliy Gusev wrote:

On 01/-10/-28163 10:59 PM, Andy Adamson wrote:
From: Andy Adamson<andros@xxxxxxxxxx>

Prevents an infinite loop as list was never emptied.

Signed-off-by: Andy Adamson<andros@xxxxxxxxxx>
+++ b/fs/nfs/pnfs.c
@@ -383,6 +383,7 @@ pnfs_destroy_all_layouts(struct nfs_client *clp)
  				plh_layouts);
  		dprintk("%s freeing layout for inode %lu\n", __func__,
  			lo->plh_inode->i_ino);
+		list_del_init(&lo->plh_layouts);
  		pnfs_destroy_layout(NFS_I(lo->plh_inode));

Shouldn't pnfs_destroy_layout() do it ?

pnfs_destroy_layout can't do it. The list is local to pnfs_destroy_all_layouts.
It's confusing because both pnfs_destroy_layout and pnfs_destroy_all_layouts have
> a local tmp_list used for different purposes.

Yes purposes are different but "lo" is the same and list_del_init() in pnfs_free_lseg_list() see the same "lo" from pnfs_destroy_all_layouts.


 pnfs_destroy_layout(struct nfs_inode *nfsi):

      lo = nfsi->layout;

   >>> after that mark_matching_lsegs_invalid adds "lo" to tmplist_v2

	
 pnfs_free_lseg_list(tmplist_v2):

	lo = list_first_entry(free_me, struct pnfs_layout_segment,
			      pls_list)->pls_layout;

  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  Here is "lo" from pnfs_destroy_all_layouts.


	if (test_bit(NFS_LAYOUT_DESTROYED, &lo->plh_flags)) {
		struct nfs_client *clp;

		clp = NFS_SERVER(lo->plh_inode)->nfs_client;
		spin_lock(&clp->cl_lock);
		list_del_init(&lo->plh_layouts);
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Here is second deleting "lo" that was already deleted in pnfs_destroy_all_layouts.

So if all is ok, it will delete list twice.

I suppose, either current schema has to be changed or list_del_init() should be removed from pnfs_destoy_all_layouts with fixing mark_matching_lsegs_invalid and ref counter.


---
Gusev Vitaliy
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux