[bug #1435] fix loss of dir layout info on mds restart

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

 



Here's a fix for bug 1435.  The MDS didn't recover default_layout for
subdirs from dir entries encoded in the parent dir, so layout policies
could be lost upon MDS restart if they didn't happen to be encoded in
some other change still present in the MDS journal.

Fix restoring dir layouts from dir entries

From: Alexandre Oliva <oliva@xxxxxxx>

Signed-off-by: Alexandre Oliva <oliva@xxxxxxx>
---
 src/mds/CDir.cc |   10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc
index 4b1d3ef..e5a147d 100644
--- a/src/mds/CDir.cc
+++ b/src/mds/CDir.cc
@@ -1566,6 +1566,16 @@ void CDir::_fetched(bufferlist &bl, const string& want_dn)
 	  // symlink?
 	  if (in->is_symlink()) 
 	    in->symlink = symlink;
+	  else if (in->is_dir()) {
+	    default_file_layout dfl;
+	    memset(&dfl, 0, sizeof(dfl));
+	    // FIXME: this should be properly encoded
+	    if (memcmp (&dfl.layout, &in->inode.layout, sizeof(dfl)) != 0) {
+	      in->default_layout = new default_file_layout;
+	      memcpy (&in->default_layout->layout,
+		      &in->inode.layout, sizeof(dfl));
+	    }
+	  }
 	  
 	  in->dirfragtree.swap(fragtree);
 	  in->xattrs.swap(xattrs);

-- 
Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist      Red Hat Brazil Compiler Engineer

[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux