+int mds_splitting_expected(struct obd_device *obd, struct dentry *dentry)
+{
+ struct mds_obd *mds = &obd->u.mds;
+ struct mea *mea = NULL;
+ int rc, size;
+
+ /* clustered MD ? */
+ if (!mds->mds_lmv_obd)
+ RETURN(0);
+
+ /* inode exist? */
+ if (dentry->d_inode == NULL)
+ return 0;
+
+ /* a dir can be splitted only */
+ if (!S_ISDIR(dentry->d_inode->i_mode))
+ return 0;
+
+ /* large enough to be splitted? */
+ if (dentry->d_inode->i_size < MAX_DIR_SIZE)
+ return 0;
+
+ /* don't split root directory */
+ if (dentry->d_inode->i_ino == mds->mds_rootfid.id)
+ return 0;
+
+ mds_get_lmv_attr(obd, dentry->d_inode, &mea, &size);
+ if (mea) {
+ /* already splitted or slave object: shouldn't be splitted */
+ rc = 0;
+ } else {
+ /* may be splitted */
+ rc = 1;
+ }
+
+ if (mea)
+ OBD_FREE(mea, size);
+ RETURN(rc);
+}
+