Tear down and flush the mmap region

The inode eviction should unmap the pages associated with the inode.
These pages should also be flushed to disk to avoid the data loss.
Therefore, use truncate_setsize() in evict_inode() to release the
pagecache.

The API truncate_setsize() was added in 2.6.35 kernel. To ensure
compatibility with the old kernel, the patch defines its own
truncate_setsize function.

Signed-off-by: Prasad Joshi <pjoshi@stec-inc.com>
Closes #255
This commit is contained in:
Prasad Joshi
2011-06-25 13:30:29 +01:00
committed by Brian Behlendorf
parent 560bcf9d14
commit b312979252
59 changed files with 172 additions and 2 deletions
Vendored
+80
View File
@@ -14527,6 +14527,46 @@ _ACEOF
{ $as_echo "$as_me:$LINENO: checking whether symbol truncate_setsize is exported" >&5
$as_echo_n "checking whether symbol truncate_setsize is exported... " >&6; }
grep -q -E '[[:space:]]truncate_setsize[[:space:]]' \
$LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null
rc=$?
if test $rc -ne 0; then
export=0
for file in mm/truncate.c; do
grep -q -E "EXPORT_SYMBOL.*(truncate_setsize)" "$LINUX/$file" 2>/dev/null
rc=$?
if test $rc -eq 0; then
export=1
break;
fi
done
if test $export -eq 0; then
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
else
{ $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
#define HAVE_TRUNCATE_SETSIZE 1
_ACEOF
fi
else
{ $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
#define HAVE_TRUNCATE_SETSIZE 1
_ACEOF
fi
if test "$LINUX_OBJ" != "$LINUX"; then
KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
fi
@@ -18653,6 +18693,46 @@ _ACEOF
{ $as_echo "$as_me:$LINENO: checking whether symbol truncate_setsize is exported" >&5
$as_echo_n "checking whether symbol truncate_setsize is exported... " >&6; }
grep -q -E '[[:space:]]truncate_setsize[[:space:]]' \
$LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null
rc=$?
if test $rc -ne 0; then
export=0
for file in mm/truncate.c; do
grep -q -E "EXPORT_SYMBOL.*(truncate_setsize)" "$LINUX/$file" 2>/dev/null
rc=$?
if test $rc -eq 0; then
export=1
break;
fi
done
if test $export -eq 0; then
{ $as_echo "$as_me:$LINENO: result: no" >&5
$as_echo "no" >&6; }
else
{ $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
#define HAVE_TRUNCATE_SETSIZE 1
_ACEOF
fi
else
{ $as_echo "$as_me:$LINENO: result: yes" >&5
$as_echo "yes" >&6; }
cat >>confdefs.h <<\_ACEOF
#define HAVE_TRUNCATE_SETSIZE 1
_ACEOF
fi
if test "$LINUX_OBJ" != "$LINUX"; then
KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
fi